Go Down

Topic: Midikeyboard an Arduino Due (USBHost Problem) (Read 239 times) previous topic - next topic

OptimusPrime

Mar 16, 2014, 02:00 pm Last Edit: Mar 16, 2014, 07:42 pm by OptimusPrime Reason: 1
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:
http://www.usbmadesimple.co.uk/index.html //USB für Dummies, eher praktisch orientiert
http://www.beyondlogic.org/usbnutshell/usb1.shtml //USB für Dummies extended, die USB Spezifikation im Schnellgang
http://forum.arduino.cc/index.php?PHPSESSID=ttpp845u9t0ld93dj9adhgt0n6&topic=199608.0 //Auslesen der Geräteeigenschaften
http://www.usb.org/developers/devclass_docs/midi10.pdf //Die USB-Midi Spezifikation

Das Gerät wird folgendermassen beschrieben:
Code: [Select]
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



Klaus_ww

Versteh ich nicht. Willst Du abhängig vom Gerät irgendwelche famosen Sachen machen oder "einfach nur" Midi-Daten umwandeln?

OptimusPrime

Ich möchte im ersten Schritt "nur" die Midimessages auslesen die das USB-Keyboard ausgibt. Dabei treten die oben beschriebenen Probleme auf. Du hast recht - ich habe nicht explizit erwähnt dass es sich um ein USB Keyboard handelt!
Famose Sachen lassen sich dann mit den Mididaten machen (wenn sie erstmal am Arduino vorliegen). Beispielsweise der schon erwähnte CV Konverter.

Go Up