Я пытаюсь работать с некоторым 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 ++.