Как поймать точное взаимодействие устройства USB-HID с программным обеспечением и переопределить его в моем собственном коде - PullRequest
3 голосов
/ 20 декабря 2010

Я пытаюсь работать с некоторым USB-устройством HID.
У меня есть проприетарное программное обеспечение (от производителя устройства), которое может взаимодействовать с устройством. Но мне нужно написать свой собственный.
С помощью инструмента анализатора я перехватил трафик между хостом и устройством. Этот инструмент BusDog .
Затем я смог воспроизвести тот же трафик через WriteFile с дескриптором устройства, который я получаю из CreateFile (для пути, полученного из API-интерфейса setupapi.dll). Но устройство не реагирует на мои команды («запросы», как они называются в мире USB / HID).

Затем я взял другой инструмент - HHD Device Monitoring Studio. Этот инструмент показывает не только «передачу прерываний», но и все виды передач. Я вижу следующий журнал:

008852: Class-Specific Request (DOWN), 20.12.2010 18:58:10.242 +0.031
Destination: Interface, Index 0
Reserved Bits: 34
Request: 0x9
Value: 0x30d
Send 0x8 bytes to the device

 0D 01 01 00 00 00 00 00                           ........
008853: Control Transfer (UP), 20.12.2010 18:58:10.242 +0.0. Status: 0x00000000
Pipe Handle: 0x8638c5c8

 0D 01 01 00 00 00 00 00                           ........
Setup Packet
 21 09 0D 03 00 00 08 00                           !.......
Recipient: Interface
Request Type: Class
Direction: Host->Device
Request: 0x9 (Unknown)
Value: 0x30d
Index: 0x0
Length: 0x8

Мой вопрос: как переопределить этот вид перевода в моем собственном коде? И как разобрать этот материал по параметрам соответствующей функции (это DeviceIoControl?)

p.s. Я использую C #, но на самом деле это не имеет большого значения, я могу понять C / C ++.

Ответы [ 2 ]

0 голосов
/ 26 июня 2014

Я подробно описываю подобные вещи в подробном обзоре этого ответа . Но я суммирую некоторые основные моменты.

Прежде всего, вы должны выяснить идентификаторы поставщика и продукта для устройства. (Они уникальны.) Процесс общения с устройством прост. Перечислите подключенные устройства, выберите тот, который соответствует идентификаторам, которые вы ищете, а затем используйте библиотеку типа libusb для чтения / записи с / на устройство. В самом низу приведенного выше стекового ответа, на который я ссылаюсь, приведен подробный пример.

0 голосов
/ 24 января 2011

Взгляните на подпрограммы поддержки HIDClass (http://msdn.microsoft.com/en-us/library/ff538865%28v=vs.85%29.aspx), которые включают в себя все соответствующие HID ioctl для вас ... это может быть что-то вроде отчета о функциях (HidD_SetFeature).

...