Проверьте идентификатор USB-устройства и подключенный порт из приложения C

Мне нужно иметь возможность идентифицировать подключенное USB-устройство (USB3 и/или USB2) и какой порт подключен к концентратору из программы C. Я работаю над встроенной системой Linux на основе Yocto.

Я могу получить эту информацию из командной строки с помощью lsusb. Например. Я подключил две USB-камеры, одну USB3 и другую USB2, и если я запущу lsusb -t, я увижу дерево соединений портов:

/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 5000M
    |__ Port 1: Dev 3, If 0, Class=Hub, Driver=hub/4p, 5000M
        |__ Port 4: Dev 6, If 0, Class=Miscellaneous Device, Driver=, 5000M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 3: Dev 3, If 0, Class=Video, Driver=uvcvideo, 480M
        |__ Port 3: Dev 3, If 1, Class=Video, Driver=uvcvideo, 480M
        |__ Port 3: Dev 3, If 2, Class=Human Interface Device, Driver=usbhid, 480M

При этом я легко знаю, что камера USB3 подключена к порту 4, а камера USB2 - к порту 3 (используя концентратор с 4 портами). Если я запустил только lsusb, получил идентификаторы и имена:

Bus 002 Device 006: ID 20f7:3001 USB3 Camera with CMOS sensor [MQ]
Bus 001 Device 003: ID 0403:de37 Future Technology Devices International, Ltd
Bus 001 Device 002: ID 04b4:650a Cypress Semiconductor Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 003: ID 04b4:6508 Cypress Semiconductor Corp.
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub

Как я могу легко сканировать порты концентратора и видеть, какое устройство (имя или идентификатор) подключено к чему (номер порта концентратора) из приложения C?

Извините, если это уже ответ где-то, но я не смог найти конкретный ответ.

Заранее спасибо.


person joe    schedule 17.06.2020    source источник
comment
Отвечает ли это на ваш вопрос: unix.stackexchange.com/questions/61484/?   -  person Storm    schedule 17.06.2020
comment
Спасибо за ответ, я не видел этого, я попробую решение и посмотрю, как оно пойдет.   -  person joe    schedule 17.06.2020
comment
Я попробовал предложенное решение, но оно у меня не сработало, не смог скомпилировать программу. Интересно, это потому, что я работаю над изображением yocto ..... любые другие идеи будут высоко оценены.   -  person joe    schedule 17.06.2020
comment
Вам необходимо установить одну из libusb библиотек на образ Yocto. Быстрый поиск в Google показывает, что для этих библиотек есть доступные рецепты. Если вы хотите сгенерировать вывод, аналогичный lsusb -t, и получить номера портов концентратора, вы можете установить libusb1, иначе libusb-compat должен выполнить эту работу.   -  person Storm    schedule 18.06.2020


Ответы (1)


Как указано, ответ - libusb, и я нашел полный ответ с примером в этот вопрос.

Также API для libusb определяется здесь.

person joe    schedule 23.06.2020