C'è un buon modo per rilevare tutti i dispositivi collegati collegati su porte seriali su linux? Im programmazione in C++ ma anche altri esempi sono benvenuti.C++ linux rileva tutte le porte seriali
Si può semplicemente provare ad aprire ogni porta e quando succede lo si aggiunge all'elenco delle porte ma questa non sembra una soluzione davvero buona.
È possibile accedere ai director di sviluppo e poiché la porta seriale è una porta USB, è possibile verificare quali file ttyUSB .. sono stati creati. Ma questo non funziona per le porte seriali non USB poiché i file per tty0 fino a tty63 sono sempre in questa directory.
Il mio esempio:
std::string port;
int fd
std::vector<std::string>> list;
for(int i = 0; i < 256; ++i)
{
port.clear();
port.append("/dev/ttyUSB");
port.append(std::to_string(i));
fd = open(port.c_str(), O_RDWR | O_NOCTTY | O_DELAY);
if(fd != -1)
{
list.push_back(port);
}
}
Grazie!
Le porte seriali sono solitamente denominate 'ttyS0' e così via. – Hasturkun
Questo mi dà la sensazione di una domanda XY, in cui il tuo problema reale è X, e tu pensi che la soluzione sia Y, quindi chiedi di Y. Perché vuoi sapere delle porte seriali sul sistema? –
Su 1 delle porte è collegato un dispositivo zigbee. Dal momento che voglio renderlo user friendly voglio elencare tutte le possibilità in modo che l'utente possa scegliere. Normalmente se si collega il dispositivo zigbee si dovrebbe ottenere esattamente un numero di porta restituito. @Hasturkun Nel mio caso dal momento che il mio dispositivo seriale usa una connessione USB è chiamato ttyUSB0. – Silver