Esiste un modo per accedere a una porta USB-seriale dall'ID del dispositivo, non dalla porta tty. *?

16

Su Linux I dispositivi seriali USB creano due alias sulla porta seriale:
/dev/tty* e /dev/serial/by-id/<my_usb_device_id>

C'è un modo su OSX per identificare una porta seriale tramite l'ID del dispositivo USB? Sia in System Profiler che usando ioreg -p IOUSB posso vedere l'id, ma questo non mi avvicina alla connessione usando quell'ident.

Stiamo sviluppando diversi componenti hardware ed è difficile testarli ogni volta che connetto un dispositivo diverso, ho bisogno di verificare la configurazione della porta seriale del software di test, perché su OSX il nome della porta tty.* dipende da la porta sul mio computer, non sul dispositivo. I ragazzi che utilizzano linux utilizzano volentieri la porta /dev/serial/by-id/<my_usb_device_id> per distinguere automaticamente tra i diversi dispositivi.

    
posta Johan 09.06.2016 - 08:37
fonte

2 risposte

2

Per un bridge FTDI che ho, il numero seriale appare già nel nome del dispositivo: appare come /dev/serial/by-id/usb-FTDI_FT231X_USB_UART_DA00AG57-if00-port0 (corrispondente a qualche /dev/ttyUSBx ) su Linux, e come /dev/cu.usbserial-DA00AG57 e /dev/tty.usbserial-DA00AG57 su macOS. (Vedi link per la differenza tra tty.* e cu.* .)

Sfortunatamente, per il ponte Prolific che ho, si applica ancora un problema come il tuo: un dispositivo che appare come /dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller-if00-port0 (che non contiene un numero di serie) è semplicemente /dev/cu.usbserial e /dev/tty.usbserial su macOS (nemmeno Sistema Profiler fornisce un numero di serie per questo). Chissà cosa succederebbe se avessi un secondo plug-in.

Forse esiste una risposta più generale che è indipendente dal venditore, ma tieni presente che alcuni dispositivi potrebbero non riportare un numero di serie.

    
risposta data 31.01.2017 - 08:01
fonte
1

In realtà, dovresti riuscire a trovare il mapping dall'ID del dispositivo / numero seriale al nome della porta seriale utilizzando ioreg . Prova questo comando:

ioreg -r -c IOUSBHostDevice -l

Stampa tutti i dispositivi host USB e stampa tutte le proprietà dalla sottostruttura di ciascun dispositivo. Dovresti essere in grado di trovare il tuo dispositivo al primo livello in base al suo ID o numero di serie. Una volta trovato, dovresti essere in grado di eseguire la scansione attraverso la sua sottostruttura e alla fine trovare un oggetto di classe IOSerialBSDClient . Questo conterrà la proprietà IODialinDevice che è ciò che desideri.

Se si desidera eseguire questa operazione a livello di codice, è possibile aggiungere l'opzione -a al comando ioreg , che genererà una versione plist dell'output precedente. Potresti quindi analizzarlo con una libreria come plistlib .

Potresti trovare utile utilizzare l'app IORegistryExplorer per visualizzarla, poiché l'output ioreg completo è leggermente difficile da leggere! Questo è disponibile nel pacchetto "Hardware IO Tools" di XCode che puoi trovare con per cercare i download sul sito degli sviluppatori Apple . Ecco come appare sul mio dispositivo:

    
risposta data 02.05.2018 - 16:14
fonte

Leggi altre domande sui tag