Sto usando il termios api in Linux per comunicare con un dispositivo seriale. Sto cercando di rilevare se il dispositivo è disconnesso, quindi posso provare a riconnettersi dopo un certo timeout. Ho il seguente codice esempio:Rilevare se un dispositivo di carattere si è disconnesso in Linux con termios api (C++)
while(1)
{
FD_ZERO(&rfds);
FD_SET(tty_fd, &rfds);
// have tried checking fcntl(tty_fd, F_GETFL); too
// Blocking call to wait until we have data
select(tty_fd+1, &rfds, NULL, NULL, NULL);
// While we have data, collect it
while (read(tty_fd, &c, 1)>0 && bytesRead++<200)
{
serialBuffer.push_back(c);
}
bytesRead = 0;
// Try to parse it
BufferParse();
}
non sto realmente vedere select() o valori di errore di ritorno fcntl (-1) dopo il dispositivo ttyUSB è fisicamente scollegato. Potrei, naturalmente, controllare se il file in/dev/esiste, ma speravo che esistesse una soluzione più elegante.
Gradirei qualche consiglio, grazie!
Con un adattatore USB, potrebbero esserci due livelli di disconnessione. Con un dispositivo collegato alla porta seriale, quel dispositivo non poteva più comunicare. Potrebbe esserci una disconnessione del collegamento RS232 stesso. Il segnale DSR/DTR viene spesso utilizzato per determinare la connessione locale. Con USB anche nell'immagine, l'adattatore USB può essere disconnesso dall'host. Quindi devi chiarire cosa stai cercando di rilevare. La lettura dei dati proviene dal dispositivo seriale collegato, non dalla porta seriale o dall'adattatore USB. Se il dispositivo è un modem, allora hai un altro collegamento. – sawdust
In questo caso, sto specificamente parlando del dispositivo USB-seriale disconnesso dalla macchina host. – chris12892
Puoi usare libudev per guardare gli eventi del dispositivo attraverso un descrittore di file: http://www.signal11.us/oss/udev/ – purplepsycho