diff options
Diffstat (limited to 'Demos')
-rw-r--r-- | Demos/Device/ClassDriver/MIDI/MIDI.c | 11 | ||||
-rw-r--r-- | Demos/Device/LowLevel/MIDI/MIDI.c | 23 |
2 files changed, 29 insertions, 5 deletions
diff --git a/Demos/Device/ClassDriver/MIDI/MIDI.c b/Demos/Device/ClassDriver/MIDI/MIDI.c index f1a0d9afc..d50a254a2 100644 --- a/Demos/Device/ClassDriver/MIDI/MIDI.c +++ b/Demos/Device/ClassDriver/MIDI/MIDI.c @@ -67,9 +67,14 @@ int main(void) {
CheckJoystickMovement();
- /* Must acknowedge MIDI packets from the host even though they aren't used, or the host locks up */
- MIDI_EventPacket_t DummyMIDIEvent;
- MIDI_Device_ReceiveEventPacket(&Keyboard_MIDI_Interface, &DummyMIDIEvent);
+ MIDI_EventPacket_t ReceivedMIDIEvent;
+ if (MIDI_Device_ReceiveEventPacket(&Keyboard_MIDI_Interface, &ReceivedMIDIEvent))
+ {
+ if (ReceivedMIDIEvent.Command == (MIDI_COMMAND_NOTE_ON >> 4))
+ LEDs_SetAllLEDs(ReceivedMIDIEvent.Data2 > 64 ? LEDS_LED1 : LEDS_LED2);
+ else
+ LEDs_SetAllLEDs(LEDS_NO_LEDS);
+ }
MIDI_Device_USBTask(&Keyboard_MIDI_Interface);
USB_USBTask();
diff --git a/Demos/Device/LowLevel/MIDI/MIDI.c b/Demos/Device/LowLevel/MIDI/MIDI.c index 4dfb9b7e6..c4ec8941f 100644 --- a/Demos/Device/LowLevel/MIDI/MIDI.c +++ b/Demos/Device/LowLevel/MIDI/MIDI.c @@ -190,7 +190,26 @@ void MIDI_Task(void) /* Select the MIDI OUT stream */
Endpoint_SelectEndpoint(MIDI_STREAM_OUT_EPNUM);
- /* Check if endpoint is ready to be read from, if so discard its (unused) data */
+ /* Check if a MIDI command has been received */
if (Endpoint_IsOUTReceived())
- Endpoint_ClearOUT();
+ {
+ USB_MIDI_EventPacket_t MIDIEvent;
+
+ /* Read the MIDI event packet from the endpoint */
+ Endpoint_Read_Stream_LE(&MIDIEvent, sizeof(MIDIEvent));
+
+ if (MIDIEvent.Command == (MIDI_COMMAND_NOTE_ON >> 4))
+ {
+ /* Change LEDs depending on the pitch of the sent note */
+ LEDs_SetAllLEDs(MIDIEvent.Data2 > 64 ? LEDS_LED1 : LEDS_LED2);
+ }
+ else
+ {
+ /* Turn off all LEDs in response to non-Note On messages */
+ LEDs_SetAllLEDs(LEDS_NO_LEDS);
+ }
+
+ /* Clear the endpoint ready for new packet */
+ Endpoint_ClearOUT();
+ }
}
|