From 99a9e415efd1e27d902427ccd1aa6e4a9f9d4d05 Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Fri, 5 Nov 2010 03:43:11 +0000 Subject: [PATCH] Loop in the ClassDriver MIDI device/host demos until there are no more incomming events to process. Only clear the endpoint/pipe bank in the LowLevel MIDI device/host demos when the endpoint is empty after an event read. --- Demos/Device/ClassDriver/MIDI/MIDI.c | 2 +- Demos/Device/LowLevel/MIDI/MIDI.c | 8 ++++++-- Demos/Host/ClassDriver/MIDIHost/MIDIHost.c | 2 +- Demos/Host/LowLevel/MIDIHost/MIDIHost.c | 8 ++++---- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/Demos/Device/ClassDriver/MIDI/MIDI.c b/Demos/Device/ClassDriver/MIDI/MIDI.c index 217a3a4bd7..95a2ddd0e0 100644 --- a/Demos/Device/ClassDriver/MIDI/MIDI.c +++ b/Demos/Device/ClassDriver/MIDI/MIDI.c @@ -71,7 +71,7 @@ int main(void) CheckJoystickMovement(); MIDI_EventPacket_t ReceivedMIDIEvent; - if (MIDI_Device_ReceiveEventPacket(&Keyboard_MIDI_Interface, &ReceivedMIDIEvent)) + while (MIDI_Device_ReceiveEventPacket(&Keyboard_MIDI_Interface, &ReceivedMIDIEvent)) { if ((ReceivedMIDIEvent.Command == (MIDI_COMMAND_NOTE_ON >> 4)) && (ReceivedMIDIEvent.Data3 > 0)) LEDs_SetAllLEDs(ReceivedMIDIEvent.Data2 > 64 ? LEDS_LED1 : LEDS_LED2); diff --git a/Demos/Device/LowLevel/MIDI/MIDI.c b/Demos/Device/LowLevel/MIDI/MIDI.c index e436455857..bfe90b0d15 100644 --- a/Demos/Device/LowLevel/MIDI/MIDI.c +++ b/Demos/Device/LowLevel/MIDI/MIDI.c @@ -204,8 +204,12 @@ void MIDI_Task(void) LEDs_SetAllLEDs(LEDS_NO_LEDS); } - /* Clear the endpoint ready for new packet */ - Endpoint_ClearOUT(); + /* If the endpoint is now empty, clear the bank */ + if (!(Endpoint_BytesInEndpoint())) + { + /* Clear the endpoint ready for new packet */ + Endpoint_ClearOUT(); + } } } diff --git a/Demos/Host/ClassDriver/MIDIHost/MIDIHost.c b/Demos/Host/ClassDriver/MIDIHost/MIDIHost.c index 56daf125ca..eda8272571 100644 --- a/Demos/Host/ClassDriver/MIDIHost/MIDIHost.c +++ b/Demos/Host/ClassDriver/MIDIHost/MIDIHost.c @@ -109,7 +109,7 @@ int main(void) CheckJoystickMovement(); MIDI_EventPacket_t MIDIEvent; - if (MIDI_Host_ReceiveEventPacket(&Keyboard_MIDI_Interface, &MIDIEvent)) + while (MIDI_Host_ReceiveEventPacket(&Keyboard_MIDI_Interface, &MIDIEvent)) { bool NoteOnEvent = ((MIDIEvent.Command & 0x0F) == (MIDI_COMMAND_NOTE_ON >> 4)); bool NoteOffEvent = ((MIDIEvent.Command & 0x0F) == (MIDI_COMMAND_NOTE_OFF >> 4)); diff --git a/Demos/Host/LowLevel/MIDIHost/MIDIHost.c b/Demos/Host/LowLevel/MIDIHost/MIDIHost.c index b616b679f5..5ff3baa399 100644 --- a/Demos/Host/LowLevel/MIDIHost/MIDIHost.c +++ b/Demos/Host/LowLevel/MIDIHost/MIDIHost.c @@ -192,19 +192,19 @@ void MIDI_Host_Task(void) ((MIDIEvent.Data1 & 0x0F) + 1), MIDIEvent.Data2, MIDIEvent.Data3); } - - Pipe_ClearIN(); + + if (!(Pipe_BytesInPipe())) + Pipe_ClearIN(); } Pipe_SelectPipe(MIDI_DATA_OUT_PIPE); - static uint8_t PrevJoystickStatus; - if (Pipe_IsOUTReady()) { uint8_t MIDICommand = 0; uint8_t MIDIPitch; + static uint8_t PrevJoystickStatus; uint8_t JoystickStatus = Joystick_GetStatus(); uint8_t JoystickChanges = (JoystickStatus ^ PrevJoystickStatus);