Hi!
Ich möchte ein USB-Midikeyboard an den Due anschliessen und die Midinoten auslesen können. Für Musikbegeisterte: Das Ergebnis könnte ein sehr flexibler USB-MIDI zu Control Voltage Konverter sein.
Was bereits klappt:
Ich kann an Enpoint 0 die Beschreibung des Geräts auslesen, ich bekomme alle Werte wie es scheint korrekt übermittelt. Zumindest stimmen Manufacturer und Product.
Sehr hilfreich bis zu diesem Punkt waren für mich folgende Links:
USB Made Simple //USB für Dummies, eher praktisch orientiert
USB in a NutShell - Chapter 1 - Introduction //USB für Dummies extended, die USB Spezifikation im Schnellgang
Getting Arduino Due's Native USB Port Descriptors - Arduino Due - Arduino Forum //Auslesen der Geräteeigenschaften
http://www.usb.org/developers/devclass_docs/midi10.pdf //Die USB-Midi Spezifikation
Das Gerät wird folgendermassen beschrieben:
String Descriptors:
Manufacturer: M-Audio
Product: Oxygen 61
Device Descriptor:
Descriptor Length: 22
Descriptor type: 1
USB version: 100
Device class: 0
Device Subclass: 0
Device Protocol: 0
Max.packet size: 10
Vendor ID: 763
Product ID: 2028
Revision ID: 100
Mfg.string index: 1
Prod.string index: 2
Serial number index: 0
Number of conf.: 1
Configuration Descriptor:
Length: 9
Descriptor Type: 2
Total length: 65
Num.intf: 2
Conf.value: 1
Conf.string: 0
Attr.: 300
Max.pwr: 100 mA
Interface Descriptor:
Intf.number: 0
Alt.: 0
Endpoints: 0
Class: 1
Subclass: 1
Protocol: 0
Intf.string: 0
Interface Descriptor:
Intf.number: 1
Alt.: 0
Endpoints: 2
Class: 1
Subclass: 3
Protocol: 0
Intf.string: 0
Endpoint Descriptor:
Endpoint address bin: 10000101
Endpoint address dec: 133
Attr.: 2
Max.pkt size: 40
Polling interval: 0
Endpoint Descriptor:
Endpoint address bin: 11
Endpoint address dec: 3
Attr.: 2
Max.pkt size: 40
Polling interval: 0
Jetzt wird es spannend!
Wenn ich es richtig verstanden habe, muss ich dem Gerät an dieser Stelle eine Adresse zuweisen um weitere Transaktionen durchführen zu können. Ich habe mich durch die meisten USBHost Dateien gewühlt und mehrere Funktionen gefunden die laut inline Doku das wohl können.
Ist es korrekt jetzt eine Adresse zuzuweisen? Mit welcher Funktion weise ich Adresse zu?
Ausserdem bin ich auf der Suche nach einem USBHost "best practice". Die Beispiele "KeyboardController" nutzen wohl eine Form von Callbacks. Ich habe leider noch nicht ganz verstanden wie und wo diese Callbacks angemeldet werden können.
Weiß jemand wie es weitergeht? Hat vielleicht schon jemand ein USBHost Tutorial verfasst und ich finde es nicht? Die Referenzseiten geben sich leider etwas spärlich ![]()
Viele Grüße!
OptimusPrime