2010-12-20 11 views
3

Ich versuche, mit einigen USB-HID-Gerät zu arbeiten.
Ich habe proprietäre Software (vom Hersteller des Geräts), die mit dem Gerät interagieren kann. Aber ich muss meine eigene schreiben.
Mit Hilfe eines Sniffer-Tools habe ich Verkehr zwischen dem Host und dem Gerät gefangen. Dieses Werkzeug ist BusDog.
Dann konnte ich den gleichen Verkehr über WriteFile mit Gerät Handle reproduzieren, die ich von CreateFile erhalten (für den Pfad von Setupapi.dll APIs). Aber das Gerät reagiert nicht auf meine Befehle ("Anfragen", wie sie in USB/HID-Welt genannt werden).Wie genaue USB-HID-Gerät Interaktion von einer Software zu fangen und in meinem eigenen Code neu implementieren

Dann nahm ich ein anderes Tool - HHD Device Monitoring Studio. Dieses Tool zeigt nicht nur "Interrupt-Übertragung", sondern auch alle Arten von Übertragungen. Ich kann das folgende Protokoll sehen:

 
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 

Meine Frage ist, wie diese Art Transfer in meinem eigenen Code neu zu implementieren? Und wie man dieses Zeug zu Parametern der passenden Funktion analysiert (ist das DeviceIoControl?)

p. Ich benutze C#, aber eigentlich spielt es keine Rolle, ich kann C/C++ verstehen.

Antwort

0

Ich detailliert diese Art von Sache in einer detaillierten Übersicht in dieser answer. Aber ich werde einige der wichtigsten Punkte zusammenfassen.

Zunächst müssen Sie die Hersteller- und Produkt-IDs für das Gerät herausfinden. (Diese sind einzigartig.) Die Kommunikation mit dem Gerät ist einfach. Zählen Sie die angeschlossenen Geräte auf, wählen Sie diejenige aus, die den gesuchten IDs entspricht, und verwenden Sie dann eine Bibliothek wie libusb, um vom Gerät zu lesen/schreiben. Es gibt ein detailliertes Beispiel ganz unten in der obigen Stapelantwort, mit der ich verlinkt bin.