[fpc-devel] serial under linux, SerOpen blocks

Armin Diehl ad at ardiehl.de
Thu Aug 18 13:00:14 CEST 2011


Hi Marco,

minicom calls open with O_NONBLOCK and resets O_NONBLOCK directly after 
the open call:

open("/dev/ttyUSB0", O_RDWR|O_NOCTTY|O_NONBLOCK) = 3
fcntl(3, F_GETFL)                       = 0x8802 (flags 
O_RDWR|O_NONBLOCK|O_LARGEFILE)
fcntl(3, F_SETFL, O_RDWR|O_LARGEFILE)   = 0

doing the same in serial.pp should not change the blocking behaviour of 
serial.pp.

function SerOpen(const DeviceName: String): TSerialHandle;
begin
   Result := fpopen(DeviceName, O_RDWR or O_NOCTTY or O_NONBLOCK);  // 
AD: O_NONBLOCK was missing
   if result > -1 then
     fpfcntl(Result,F_SETFL,O_RDWR or O_NOCTTY);                    
//AD: non blocking off again
end;

On 08/18/2011 12:21 PM, Marco van de Voort wrote:
> In our previous episode, Armin Diehl said:
>> should that be changed in the standard serial.pp ?
> I'm not sure, since this leaves nonblocking behaviour on by default,
> moreover serial is pan unix, and non linuxes might react differently.
>
> Btw do you see minicom do a sequence of "opening in nonblock, setting params and
> reopening without nonblock" ?
> _______________________________________________
> fpc-devel maillist  -  fpc-devel at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-devel




More information about the fpc-devel mailing list