2017-02-21 40 views
2

Как получить путь USB-устройства, например/dev/ttyACM0 или/dev/ttyUSB0, в соответствии с его idVedor и idProduct? Последующая функция нуждается в этом пути вместо idVendor и idProduct.Как получить путь к устройству USB с помощью idVendor и idProduct?

Примечание: кодом C/C++, а не командой.

Я использую Qt и CentOS.

+0

Зависит от устройства. Что это за устройство? На некоторых USB-устройствах не будет узла устройства, у некоторых будет несколько. – duskwuff

+0

Это устройство Arduino. В моем comuter он показывает/dev/ttyACM. – Jeff

+0

http://stackoverflow.com/a/41534846/1778421 –

ответ

1

Вы можете использовать libusbp, библиотеку абстракции USB, чтобы сделать это. См. port_name example that comes with libusbp. Это определенно будет работать для USB CDC ACM-устройств (например, /dev/ttyACM0), но я не уверен, что он будет работать на устройствах, которые используют другой драйвер. Если вы попробуете, напишите здесь, пожалуйста, о том, работает ли он.

+0

Спасибо, Дэвид. Я нашел другое решение по следующей ссылке: http://stackoverflow.com/questions/14279796/linux-libusb-get-usb-device-path?rq=1. Это решение использует libusb напрямую. Я попробую их обоих. – Jeff

+0

Я пробовал libusb и libusbp. – Jeff

+0

1) libusb :: libusb_get_port_path(), libusb 1.0.21. Результат не тот, который я ожидал. Это не строка, как/dev/ttyACM0. Вместо этого он по-прежнему похож на результат libusb_get_port_numbers(). Я не нашел больше примеров о том, как использовать libusb_get_port_path() и как разбирать его параметры. Из http://libusbx.sourceforge.net/api-1.0/group__dev.html#ga9d392b8dff7abf5e475c72fd071c3c34 я обнаружил, что libusb_get_port_path() - это обесцененная версия libusb_get_port_numbers(). – Jeff