¿Hay alguna forma de acceder a un puerto serie USB por medio de la identificación del dispositivo, no por el puerto tty. *?

16

En linux, los dispositivos serie USB crean dos alias en su puerto serie:
/dev/tty* y /dev/serial/by-id/<my_usb_device_id>

¿Hay una forma en OSX de identificar un puerto serie por la identificación del dispositivo USB? Tanto en System Profiler como en ioreg -p IOUSB puedo ver el ID, pero eso no me acerca más a conectarme con ese ID.

Estamos desarrollando varias piezas de hardware y es difícil probarlas ya que cada vez que conecto un dispositivo diferente, necesito verificar la configuración del puerto serie del software de prueba, porque en OSX el nombre de puerto tty.* depende de el puerto en mi computadora, no en el dispositivo. Los chicos que ejecutan Linux están felizmente utilizando el puerto /dev/serial/by-id/<my_usb_device_id> para distinguir automáticamente entre los diferentes dispositivos.

    
pregunta Johan 09.06.2016 - 08:37

2 respuestas

2

Para un puente FTDI que tengo, el número de serie ya aparece en el nombre del dispositivo: aparece como /dev/serial/by-id/usb-FTDI_FT231X_USB_UART_DA00AG57-if00-port0 (correspondiente a algunos /dev/ttyUSBx ) en Linux, y como /dev/cu.usbserial-DA00AG57 y /dev/tty.usbserial-DA00AG57 en macOS. (Consulte enlace para conocer la diferencia entre tty.* y cu.* .)

Desafortunadamente, para el puente Prolific tengo, un problema como el tuyo sigue siendo válido: un dispositivo que aparece como /dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller-if00-port0 (que no contiene un número de serie) es simplemente /dev/cu.usbserial y /dev/tty.usbserial en macOS (ni siquiera Sistema El perfilador da un número de serie para ello. Quién sabe qué pasaría si tuviera un segundo conectado.

Tal vez haya una respuesta más general que sea independiente del proveedor, pero tenga en cuenta que es posible que algunos dispositivos no informen un número de serie.

    
respondido por el chrstphrchvz 31.01.2017 - 08:01
1

En realidad, debería poder encontrar la asignación del ID de dispositivo / número de serie al nombre del puerto serie utilizando ioreg . Prueba este comando:

ioreg -r -c IOUSBHostDevice -l

Imprimirá todos los dispositivos host USB e imprimirá todas las propiedades del subárbol de cada dispositivo. Debería poder encontrar su dispositivo en el nivel superior según su ID o número de serie. Una vez que lo hayas encontrado, deberías poder escanear a través de su subárbol y, finalmente, encontrar un objeto de la clase IOSerialBSDClient . Esto contendrá la propiedad IODialinDevice que es lo que quieres.

Si luego desea hacer esto mediante programación, puede agregar la opción -a al comando ioreg , que generará una versión completa de la salida anterior. Luego, puede analizar esto con una biblioteca como plistlib .

¡Puede resultarle útil utilizar la aplicación IORegistryExplorer para ayudar a visualizar esto, ya que la salida completa de ioreg es un poco difícil de leer! Está disponible en el paquete "Hardware IO Tools" de XCode, que puede encontrar en buscando las descargas en el sitio de desarrolladores de Apple . Esto es lo que parece en mi dispositivo:

    
respondido por el Donald Harvey 02.05.2018 - 16:14

Lea otras preguntas en las etiquetas