Schönen guten Abend.
Ich hacke hier gerade an einem Gerät herum (ich beschreib es mal ganz unspezifisch als "Gamepad") und habe es hinbekommen, dieses Teil in einen seltsamen Modus zu versetzen. Nun wüßte ich gerne, was das für ein Modus ist und ob sich was Tolles damit anfangen läßt. :-)
Meine Fragen richten sich also hauptsächlich an die erfahrenen Hard- und Softwarebastler in diesem Forum. Ich denke da beispielsweise an Martin und Alexander. ;-)
Ich kann das Gerät über USB mit meinem Rechner verbinden und kriege in besagtem Modus unter anderem diese Informationen von lsusb
:
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 67
bNumInterfaces 2
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xc0
Self Powered
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 2 Communications
bInterfaceSubClass 2 Abstract (modem)
bInterfaceProtocol 1 AT-commands (v.25ter)
iInterface 0
CDC Header:
bcdCDC 1.10
CDC Call Management:
bmCapabilities 0x00
bDataInterface 1
CDC ACM:
bmCapabilities 0x02
line coding and serial state
CDC Union:
bMasterInterface 0
bSlaveInterface 1
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 255
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 10 CDC Data
bInterfaceSubClass 0 Unused
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x03 EP 3 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Offenbar gibt es 2 Interfaces, nämlich ACM (Abstract Control Model) und CDC Data. Wenn ich dmesg befrage, was sich mit dem Umschalten in diesen seltsamen Modus getan hat, kriege ich das hier als Antwort:
[ 8298.229790] usb 6-2: USB disconnect, address 23
[ 8298.860035] usb 6-2: new full speed USB device using ohci_hcd and address 24
[ 8299.033656] usb 6-2: configuration #1 chosen from 1 choice
[ 8299.034803] cdc_acm 6-2:1.0: This device cannot do calls on its own. It is not a modem.
[ 8299.034840] cdc_acm 6-2:1.0: ttyACM0: USB ACM device
Mit cat /dev/ttyACM0
bekomme ich dann tatsächlich kontinuierlich kleine Datenpakete hingeworfen. Immer nur irgendwelcher Binärmüll, etwa alle 250 ms, immer zwei Bytes auf einmal (was ich verwirrend finde, weil ja die maximale Paketgröße laut Interface-Deskriptor 8 Bit beträgt): FF 40 FF 40 FF 40 FF 29 FF 40 FF 40 FF 40 FF 40 FF 53 FF 40 FF 29 ...
Kein erkennbares Muster außer eben eine Hälfte der 16-Bit-Happen immer FF.
Das Gerät hat ein paar Knöpfe. Die zu drücken scheint keinen Einfluß auf diesen Output zu haben. Nun hab ich versucht, mit dem Gerät in diesem Modus irgendwie Kontakt aufzunehmen, etwas an ttyACM0 zu schreiben (V.25-Kommandos beispielsweise). Aber das brachte keine bemerkbare Veränderung im Output.
Ehrlich gesagt, weiß ich nicht so recht, was ich hier eigentlich vor mir habe. Ein Gerät, das in diesem Modus so ein bißchen wie Modem tut aber keins ist. Die Daten scheinen ja über den Interrupt-Endpoint auf meinem Rechner anzukommen. Kann jemand (vielleicht im V.25-Kontext) etwas in diese Daten hineininterpretieren? Und krieg ich irgendwie auch Kommunikation in die andere Richtung hin? Dieses CDC-Interface scheint ja Enpoints für beide Richtungen zur Verfügung zu stellen ... So richtig durchschaut habe ich diese seltsamen Interfaces allerdings noch nicht.
Frage über Fragen. Bin gespannt, ob jemand helfen kann.
Beste Grüße
Alex