2011-01-05 14 views
3

Ich schreibe IO-Routinen für ein Linux-Gerät, an das verschiedene und wechselnde USB-Geräte angeschlossen werden. Zu diesem Zweck muss ich herausfinden können, welches Gerät an welchen Port angeschlossen ist, damit ich es mit der richtigen Software öffnen kann. Etwas wie "Udevinfo" wäre ideal, aber ich habe keine Ahnung, wie ich damit anfangen soll.Enum USB-Geräte in Linux/C++

Vorschläge auf C++ Apis zu lesen?

+0

Ich stimme 341008. Eine Stimme bis zu ihm. –

Antwort

0

Ich endete mit einer BASH-Lösung in der chkconfig-Datei. Ich laufe durch alle ttyUSB Einträge und schaue mir die Treiberinfo für jeden an:

USB_ID=`egrep -i "mct u232|pl2303|keyspan" -m 1 /proc/tty/driver/usbserial | awk '{ printf("$d", $1)}'` 
if [ -z $USB_ID ] 
then 
    echo $echo_n "No USB serial adapter found."; 
    exit 1 
fi 
2

Werfen Sie einen Blick auf libudev++. Es scheint genau das zu sein, wonach du suchst.

+0

libudev ++ sieht sehr interessant aus, möchte aber nicht auf meinem RHEL5.5 System installiert werden. – ethrbunny

2

Siehe libusblibusb_get_device_list, libusb_get_bus_number, libusb_get_device_address.

2

GIO sollte Ihnen dabei helfen. Durch Verbinden mit den Signalen volume-added und volume-removed wird Ihr Programm auf jedes Speichergerät hingewiesen, das dem System hinzugefügt oder aus dem System entfernt wurde. Wenn Sie die von GIO bereitgestellte Kontrollebene nicht benötigen, können Sie libudev++ verwenden, die einen High-Level-Wrapper über GIO bietet.

0

Ich weiß nicht, welche Art von Informationen Sie benötigen, aber Sie könnten einfach durch/sys/bus/usb gehen?

+0

Der Trick für mich ist herauszufinden, welches USB-Gerät zu welchem ​​Eintrag in/dev/TTYUSBn gehört. Ich hatte nicht viel Erfolg mit libusb oder libudev, also denke ich mehr über eine skriptgesteuerte Lösung nach, die den relevanten dev-Pfad auf der cmd-Zeile passieren würde. – ethrbunny