Alex: Hardware-Hack

Beitrag lesen

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