Ich habe mir jetzt folgendes überlegt:
Unter Linux konnte ich beobachten, dass die meisten Uart's wie von Arduino sich mit ttyUSB oder ttyACM melden.
Gibt es hier noch mehr Möglichkeiten?
Sonst ist es doch ganz einfach: Einfach nur diese "Dateien" suchen und in eine Stringliste Packen.
Spricht was dagegen?
Gut so weiß man natürlich nicht, ob diese Ports blockiert sind.
Ich denke, dass Problem mit fpOpen wird man nicht leicht lösen können.
Edit01
So in etwa meine ich das und das geht sehr gut...
Code: Alles auswählen
procedure GetSerialPortNames2(var PortListe:TStrings);
var
sr:TSearchRec;
begin
if FindFirst('/dev/tty*', LongInt($FFFFFFFF), sr) = 0 then
begin
repeat
if (sr.Name <> '.') and (sr.Name <> '..') Then
if (sr.Attr and LongInt($FFFFFFFF)) = Sr.Attr then begin
if (pos('ttyUSB',sr.name) > 0) or (pos('ttyACM',sr.name) > 0) then
PortListe.Add(sr.Name);
end;
until FindNext(sr) <> 0;
end;
FindClose(sr);
end;
var
StringList:TStrings;
begin
StringList:=TStringList.Create;
GetSerialPortNames2(StringList);
writeln(StringList.Text);
repeat
writeln('TEST1');
sleep(1000);
until KeyPressed;
StringList.Free;
Edit2:
In der Datei /proc/tty/drivers steht auch noch einige drin:
Code: Alles auswählen
/dev/tty /dev/tty 5 0 system:/dev/tty
/dev/console /dev/console 5 1 system:console
/dev/ptmx /dev/ptmx 5 2 system
/dev/vc/0 /dev/vc/0 4 0 system:vtmaster
acm /dev/ttyACM 166 0-31 serial
usbserial /dev/ttyUSB 188 0-511 serial
rfcomm /dev/rfcomm 216 0-255 serial
ttyprintk /dev/ttyprintk 5 3 console
serial /dev/ttyS 4 64-111 serial
pty_slave /dev/pts 136 0-1048575 pty:slave
pty_master /dev/ptm 128 0-1048575 pty:master
unknown /dev/tty 4 1-63 console
Also sollte man auch noch nach rfcomm filtern, dann ist man auf der Sicheren seite.