[fpc-devel] serial under linux, SerOpen blocks

Armin Diehl ad at ardiehl.de
Thu Aug 18 11:56:39 CEST 2011


Just tried it on a 32 bit system (Linux t41.armin.d 
2.6.35.13-92.fc14.i686 #1 SMP Sat May 21 17:39:42 UTC 2011 i686 i686 
i386 GNU/Linux) as root

uses baseunix;

var handle : longint;

begin
   writeln('Start: fpopen');
   handle := fpopen('/dev/ttyUSB0',O_RDWR or O_NOCTTY);
   writeln ('Result: ',Handle);
   if handle <> 0 then fpclose(handle);
end.

and exactly the same problem. fpopen blocks if minicom is not started on 
the same port. I think i have to figure out how minicom (or stty) opens 
the port.

btw, ttyUSB0 is a Prolific pl2303:

Aug 18 11:47:18 t41 kernel: [  599.994081] usb 3-2: new full speed USB 
device using uhci_hcd and address 2
Aug 18 11:47:18 t41 kernel: [  600.140165] usb 3-2: New USB device 
found, idVendor=067b, idProduct=2303
Aug 18 11:47:18 t41 kernel: [  600.140180] usb 3-2: New USB device 
strings: Mfr=1, Product=2, SerialNumber=0
Aug 18 11:47:18 t41 kernel: [  600.140191] usb 3-2: Product: USB-Serial 
Controller
Aug 18 11:47:18 t41 kernel: [  600.140200] usb 3-2: Manufacturer: 
Prolific Technology Inc.
Aug 18 11:47:18 t41 mtp-probe: checking bus 3, device 2: 
"/sys/devices/pci0000:00/0000:00:1d.1/usb3/3-2"
Aug 18 11:47:18 t41 mtp-probe: bus: 3, device: 2 was not an MTP device
Aug 18 11:47:18 t41 kernel: [  600.329041] usbcore: registered new 
interface driver usbserial
Aug 18 11:47:18 t41 kernel: [  600.329070] USB Serial support registered 
for generic
Aug 18 11:47:18 t41 kernel: [  600.329948] usbcore: registered new 
interface driver usbserial_generic
Aug 18 11:47:18 t41 kernel: [  600.329953] usbserial: USB Serial Driver core
Aug 18 11:47:18 t41 kernel: [  600.345812] USB Serial support registered 
for pl2303
Aug 18 11:47:18 t41 kernel: [  600.346655] pl2303 3-2:1.0: pl2303 
converter detected
Aug 18 11:47:18 t41 kernel: [  600.358507] usb 3-2: pl2303 converter now 
attached to ttyUSB0
Aug 18 11:47:18 t41 kernel: [  600.359439] usbcore: registered new 
interface driver pl2303
Aug 18 11:47:18 t41 kernel: [  600.359445] pl2303: Prolific PL2303 USB 
to serial adaptor driver


On 08/18/2011 10:22 AM, Mark Morgan Lloyd wrote:
> Armin Diehl wrote:
>> I need some hint regarding opening a serial (ttyUSB) port using the 
>> unit serial. Minicom works fine under my user id. When i call 
>> SerOpen('/dev/ttyUSB0'), fpopen blocks forever. When i first start 
>> minicom on that port, SerOpen and all other functions of serial.pp 
>> works fine.
>>
>> ttyUSB0 is:
>> crw-rw---- 1 root dialout 188, 0 Aug 18 09:37 /dev/ttyUSB0
>>
>> changing it to
>> crw-rw-rw- 1 root dialout 188, 0 Aug 18 09:38 ttyUSB0
>>
>> makes no difference. (my user id has the supplemental group "dialout" 
>> added) SerOpen will always block if minicom is not started on the 
>> same port, the same applies if i try it wit root.
>>
>> stty with minicom started:
>> speed 19200 baud; rows 0; columns 0; line = 0;
>> intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^A; eol = <undef>; 
>> eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S;
>> susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; 
>> time = 5;
>> -parenb -parodd cs8 hupcl -cstopb cread clocal crtscts
>> ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl 
>> ixon ixoff -iuclc -ixany -imaxbel -iutf8
>> -opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 
>> bs0 vt0 ff0
>> -isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase 
>> -tostop -echoprt -echoctl -echoke
>>
>> stty without mnicom started:
>> speed 19200 baud; rows 0; columns 0; line = 0;
>> intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^A; eol = <undef>; 
>> eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S;
>> susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; 
>> time = 0;
>> -parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts
>> -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl 
>> -ixon -ixoff -iuclc -ixany -imaxbel -iutf8
>> -opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 
>> bs0 vt0 ff0
>> -isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase 
>> -tostop -echoprt -echoctl -echoke
>>
>> diff
>> time = 0; -clocal -crtscts -ixon -ixof
>>
>> Fedora 14, 64 Bit
>> 2.6.35.13-92.fc14.x86_64 #1 SMP Sat May 21 17:26:25 UTC 2011 x86_64 
>> x86_64 x86_64 GNU/Linux
>
> Assuming that you mean the standard serial.pp, that's not something 
> I've seen here /but/ I'm using a 32-bit kernel. I think that the first 
> thing I'd explore is whether you need the incoming control lines (cts, 
> dsr, cd) to be asserted before the function completes, but quite 
> frankly if I'm reading your
>
> > When i first start minicom on that port, SerOpen and all other
> > functions of serial.pp works fine.
>
> correctly then it sounds like a kernel or driver issue.
>
> Anybody: I've modified serial.pp to support Win-32 and fix a couple of 
> issues. Bug http://62.166.198.202/view.php?id=18946
>




More information about the fpc-devel mailing list