Как прочитать из модема?

Материал из DRKB

Как прочитать из модема?[править | править код]

После предварительной настройки переменных, COM порт открывается как обычный файл. Так же пример показывает, как очищать буфер COM порта и читать из него.


var 
  PortSpec: array[0..255] of Char; 
  PortNo: Word; 
  success: Boolean; 
  error: Integer; 
begin 
  FillChar(PortSpec, Sizeof(PortSpec), #0); 
  StrPCopy(PortSpec, 'Com1:19200,n,8,1'); 
  PortSpec[3] := Char(Ord(PortSpec[3]) + Ord(PortNo)); 
  if not BuildCommDCB(PortSpec, Mode) then 
  begin 
    // какая-то ошибка... 
    Exit; 
  end; 

  PortSpec[5] := #0;    { 'Com1:' } 
  Mode.Flags := EV_RXCHAR + EV_EVENT2;  { $1001 } 
  Com := CreateFile(PortSpec, GENERIC_READ or GENERIC_WRITE, 
                    0,    // comm устройство открывается с эксклюзивным доступом
                    Nil, // нет security битов
                    OPEN_EXISTING, // comm устройства должны использовать OPEN_EXISTING
                    0,    // not overlapped I/O
                    0  // hTemplate должен быть NULL для comm устройств
                     ); 
  if Com = INVALID_HANDLE_VALUE then
    Error := GetLastError; 
  Success := GetCommState(Com, Mode); 

  if not Success then  // Обработчик ошибки. 
  begin 

  end; 

  Mode.BaudRate := 19200; 
  Mode.ByteSize := 8; 
  Mode.Parity := NOPARITY; 
  Mode.StopBits := ONESTOPBIT;//нужен был для перезаписи в NT 

  Success := SetCommState(Com, Mode); 

  if not Success then  // Обработчик ошибки. 
  begin 

  end; 
end;


Переменная "com" типа dword.

Вы так же можете очистить буфер COM порта

PurgeComm(Com, PURGE_RXCLEAR or PURGE_TXCLEAR);

И прочитать из него


function ReadCh(var Ch: Byte): DWORD; 
var 
  n: dword; 
begin 
  Readfile(Com, ch, 1, Result, nil); 
end;


Source: Взято из http://forum.sources.ru
ID: 01463