[fpc-pascal] Question on low-level functions for ttySxx

Rainer Hantsch office at hantsch.co.at
Wed Mar 26 14:07:35 CET 2008


Hello,

I am currently modernizing my "serial communications unit", which actually is 
a OOP wrapper around IOCtrl and termio.

It currently supports the following functions:
----------------------------------------------
  function    Open(portdev: string): boolean;  // Open serial port
  procedure   Close;                           // Close serial port
  function    SetComm(baud: integer; parity: char; dbits, sbits: byte): \
              boolean;   // Configure data format
  procedure   SetFlow(Flow: string);           // Set Flow Control {RTS/XON/BOTH}
  function    SetBaud(bd: longint): boolean;   // Set Baudrate {50/75/../115200}
  function    SetParity(c: char):boolean;      // Set Parity {N,E,O}
  function    SetDBits(n: byte):boolean;       // Set Data-Bits {5/6/7/8}
  function    SetSBits(n: byte):boolean;       // Set Stop-Bits {1/2}
  procedure   SetDTR(b: boolean);              // Rise/Lower DTR
  procedure   SetRTS(b: boolean);              // Rise/Lower RTS
  procedure   SetTXecho(b: boolean);           // Echo sent chars locally
  procedure   SetRXecho(b: boolean);           // Echo received char to remote
  procedure   DumpFlags;                       // Dump Flags to screen (for debugging)
  procedure   send(OutString:string);          // Put <string> into Transmit Queue
  function    recv: string;                    // Read from Receive Queue
  procedure   DrainOutput;                     // Wait until all chars have been sent
  procedure   FlushInBuf;                      // Empty Input Buffer
  procedure   FlushOutBuf;                     // Empty Output Buffer
  procedure   FlushBothBuf;                    // Empty Both Buffers

Most of this functionality will be familiar to one or the other of you, 
because I took them over from the OPUS FOSSIL driver X00.SYS.

What I am actually missing are functions for monitoring data flow. Means, that 
I want to be able to verify that data are really sent or received.

Currently I can only set handshaking, queue something in the sending buffer, 
and then hope that the data will really go out. But I cannot differentiate 
between buffer is filled and emptying slowly, or buffer is filled and nothing 
goes out.
Is there a possibility to test how many bytes are in the 
sending/receibing buffer? This would allow me to read from time to time 
and find out this way if dataflow is active. 

Thanks for any help.

Rainer




More information about the fpc-pascal mailing list