ich greife mit der externen Lib QextSerialPort auf meine seriellen Schnittstellen zu, um mit verschiedenen Geräten zu kommunizieren. Nun möchte ich aber nur die Schnittstellen in meiner Verbindungsliste haben, die im System auch wirklich zur Verfügung stehen. Dazu brauche ich also sowas wie einen kleinen seriellen Portscanner. Damit habe ich begonnen, aber leider funktioniert er noch nicht so ganz. Hier mein bisheriger Code für Windows:
Code: Alles auswählen
// setup windows handle
HANDLE comH = INVALID_HANDLE_VALUE;
QString port = "COM";
// the range for port access limited to 256
int portRange = 0x0100;
// check the full range (1..256)for the com ports
for(int i = 1 ; i < portRange ; ++i)
{
// build COM port name with number
QString fullPortName = port + QString::number(i,10);
// reset handle variable again
comH = INVALID_HANDLE_VALUE;
// Opening serial port with the port name
comH = CreateFileA ( fullPortName.toLocal8Bit().data(),
GENERIC_READ | GENERIC_WRITE, // Read/Write-Access
0, // do not share
NULL, // default security
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, // synchronous I/O
NULL ); // no attr. templat
// if a com port could be opened, store the port in the list
if( comH != INVALID_HANDLE_VALUE )
{
portList << fullPortName;
}
// close the com port handle again
CloseHandle(comH);
}
Das gleiche würde ich noch für Linux benötigen. Hat jemand eine kleine, schnelle und einfache Lösung, wie eine solche Porterkennung unter Linux aussehen könnte?
Danke schon im Voraus für Eure Hilfe!
Viele Grüße,
Thomas