Re: [USB] ID хаба и номер порта
От: _f_b_i_  
Дата: 08.12.09 12:38
Оценка:
Здравствуйте, jonnybbs, Вы писали:

J>Здравствуйте,


J>Собрали USB девайс. Работаю с ним через драйвера производителя USB контроллера (cypress).


J>Встала задача определить ID (номер или другую информацию, к которой можно сделать привязку) хаба, к которому подключен наш USB-девайс, а также номер порта. В API драйвера производителя таких функций нет. Единственное, что я могу узнать, это device handle (скорее всего тот, который возвращает CreateFile) и несколько структур USB_DEVICE_DESCRIPTOR, USB_CONFIGURATION_DESCRIPTOR, USB_INTERFACE_DESCRIPTOR.


J>Насколько я понял, номер порта можно узнать из symbolic name моего устройства. Но я не знаю как его получить, имея на руках только device handle. Скорее всего надо на этот хендл натравить DeviceIoControl с какими-то IOCTL_XXX, но какими никак не могу разобраться.


J>Построение дерева USB (перечисление всех устройств как в утилите usbview) думаю не подойдет, по причине того, что одновременно к компьютеру будет подключен десяток наших USB девайсов, т.е. сравнение по VID и PID не прокатит. А сравнивать по device handle (одно открыто в драйвере, другое мной в user mode) наверное нет смысла, т.к. скорее всего они будут разные.


Как это usbview не подойдет? собственно она это и делает, разливает девайсы воткнутые в разные порты на разных usb-hub. Все что нужно сделать это разобраться с алгоритмом энумерации девайсов в usbview. Также смотреть в сторону IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX.

Связать device handle через symlink можно с помощью CM_XXX функций.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.