Ein schöner Tag...
… Ich spiele im Moment mit dem Gedanken bei der Entwicklung von KDE aktiv mitzuwirken. Wäre auf jeden Fall keine schlechte Idee, da ein so grosses Projekt nie genug fähige Programmierer, Artiests, … haben kann.
… Ich spiele im Moment mit dem Gedanken bei der Entwicklung von KDE aktiv mitzuwirken. Wäre auf jeden Fall keine schlechte Idee, da ein so grosses Projekt nie genug fähige Programmierer, Artiests, … haben kann.
Wie ich auf der Seite von linuxdriverproject sehen kann, schein das M-Audio 49e midi-keyboard und Linux nicht zu funktionieren. Dem kann ich nicht zustimmen und werde hier ein kleines HowTo posten. Als ersten einmal die Ausgabe von lsusb -vvv: Bus 002 Device 012: ID 0a4d:0090 Evolution Electronics, Ltd Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 1.00 bDeviceClass 0 (Defined at Interface level) bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 64 idVendor 0x0a4d Evolution Electronics, Ltd idProduct 0x0090 bcdDevice 1.13 iManufacturer 1 Evolution Electronics Ltd. iProduct 2 USB Keystation 49e iSerial 0 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 101 bNumInterfaces 2 bConfigurationValue 1 iConfiguration 3 Audio Class bmAttributes 0xc0 Self Powered MaxPower 0mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 0 bInterfaceClass 1 Audio bInterfaceSubClass 1 Control Device bInterfaceProtocol 0 iInterface 0 AudioControl Interface Descriptor: bLength 9 bDescriptorType 36 bDescriptorSubtype 1 (HEADER) bcdADC 1.00 wTotalLength 9 bInCollection 1 baInterfaceNr( 0) 1 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 1 bAlternateSetting 0 bNumEndpoints 2 bInterfaceClass 1 Audio bInterfaceSubClass 3 MIDI Streaming bInterfaceProtocol 0 iInterface 0 MIDIStreaming Interface Descriptor: bLength 7 bDescriptorType 36 bDescriptorSubtype 1 (HEADER) bcdADC 1.00 wTotalLength 65 MIDIStreaming Interface Descriptor: bLength 6 bDescriptorType 36 bDescriptorSubtype 2 (MIDI_IN_JACK) bJackType 1 Embedded bJackID 1 iJack 0 MIDIStreaming Interface Descriptor: bLength 6 bDescriptorType 36 bDescriptorSubtype 2 (MIDI_IN_JACK) bJackType 2 External bJackID 2 iJack 0 MIDIStreaming Interface Descriptor: bLength 9 bDescriptorType 36 bDescriptorSubtype 3 (MIDI_OUT_JACK) bJackType 1 Embedded bJackID 3 bNrInputPins 1 baSourceID( 0) 2 BaSourcePin( 0) 1 iJack 0 MIDIStreaming Interface Descriptor: bLength 9 bDescriptorType 36 bDescriptorSubtype 3 (MIDI_OUT_JACK) bJackType 2 External bJackID 4 bNrInputPins 1 baSourceID( 0) 1 BaSourcePin( 0) 1 iJack 0 Endpoint Descriptor: bLength 9 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 bRefresh 0 bSynchAddress 0 MIDIStreaming Endpoint Descriptor: bLength 5 bDescriptorType 37 bDescriptorSubtype 1 (GENERAL) bNumEmbMIDIJack 1 baAssocJackID( 0) 3 Endpoint Descriptor: bLength 9 bDescriptorType 5 bEndpointAddress 0x02 EP 2 OUT bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 0 bRefresh 0 bSynchAddress 0 MIDIStreaming Endpoint Descriptor: bLength 5 bDescriptorType 37 bDescriptorSubtype 1 (GENERAL) bNumEmbMIDIJack 1 baAssocJackID( 0) 1 Device Status: 0x0000 (Bus Powered) ...
Nachdem ein neuer Stack meine alten USB-Stack, welcher im Google Summer of Code für RockBox erstellt wurde, durch einen wenig objektorientierten und nicht so generischen USB-Stack ersetzt wurde, habe ich in weniger als 20 Minuten einen serial Treiber geschrieben. Leider ist der neue Stack noch fertig und es fehlt eine wichtige Funktionalität: Umschalten zwischen verschieden device Treibern zur Laufzeit… bald ist ja Wochenende. Revision 15850 rockt 🙂 modprobe usbserial vendor=0x0781 product=0x7421 debug=1 picocom /dev/ttyUSB0
Für das Seminar “Konzepte konkreter und abstrakter Maschinen” habe ich einen kleinen EBNF-Parser geschrieben, der die Korrektheit der EBNF-Syntax prüft und die Regeln verdeutscht. Der Parser wurde in Java innerhalb von kapp 2 Stunden entwickelt… digit = ‘0’|’1’|’2′. hexdigit = digit|’A’|’B’|’C’|’D’|’E’|’F’. vorzeichen = ‘-‘|’+’. zahl = [vorzeichen] hexdigit {hexdigit}. Wird zu: digit = ‘0’ oder ‘1’ oder ‘2’ hexdigit = ‘digit’ oder ‘A’ oder ‘B’ oder ‘C’ oder ‘D’ oder ‘E’ oder ‘F’ vorzeichen = ‘-‘ oder ‘+’ zahl = entweder leer oder gleich ‘vorzeichen’ ‘hexdigit’ keinem, einem, oder mehreren ‘hexdigit’ EBNF check ok ...