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.

pull/1469/head
Dean Camera 14 years ago
parent 85cf202737
commit 99a9e415ef

@ -71,7 +71,7 @@ int main(void)
CheckJoystickMovement(); CheckJoystickMovement();
MIDI_EventPacket_t ReceivedMIDIEvent; 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)) if ((ReceivedMIDIEvent.Command == (MIDI_COMMAND_NOTE_ON >> 4)) && (ReceivedMIDIEvent.Data3 > 0))
LEDs_SetAllLEDs(ReceivedMIDIEvent.Data2 > 64 ? LEDS_LED1 : LEDS_LED2); LEDs_SetAllLEDs(ReceivedMIDIEvent.Data2 > 64 ? LEDS_LED1 : LEDS_LED2);

@ -204,8 +204,12 @@ void MIDI_Task(void)
LEDs_SetAllLEDs(LEDS_NO_LEDS); LEDs_SetAllLEDs(LEDS_NO_LEDS);
} }
/* Clear the endpoint ready for new packet */ /* If the endpoint is now empty, clear the bank */
Endpoint_ClearOUT(); if (!(Endpoint_BytesInEndpoint()))
{
/* Clear the endpoint ready for new packet */
Endpoint_ClearOUT();
}
} }
} }

@ -109,7 +109,7 @@ int main(void)
CheckJoystickMovement(); CheckJoystickMovement();
MIDI_EventPacket_t MIDIEvent; 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 NoteOnEvent = ((MIDIEvent.Command & 0x0F) == (MIDI_COMMAND_NOTE_ON >> 4));
bool NoteOffEvent = ((MIDIEvent.Command & 0x0F) == (MIDI_COMMAND_NOTE_OFF >> 4)); bool NoteOffEvent = ((MIDIEvent.Command & 0x0F) == (MIDI_COMMAND_NOTE_OFF >> 4));

@ -193,18 +193,18 @@ void MIDI_Host_Task(void)
MIDIEvent.Data2, MIDIEvent.Data3); MIDIEvent.Data2, MIDIEvent.Data3);
} }
Pipe_ClearIN(); if (!(Pipe_BytesInPipe()))
Pipe_ClearIN();
} }
Pipe_SelectPipe(MIDI_DATA_OUT_PIPE); Pipe_SelectPipe(MIDI_DATA_OUT_PIPE);
static uint8_t PrevJoystickStatus;
if (Pipe_IsOUTReady()) if (Pipe_IsOUTReady())
{ {
uint8_t MIDICommand = 0; uint8_t MIDICommand = 0;
uint8_t MIDIPitch; uint8_t MIDIPitch;
static uint8_t PrevJoystickStatus;
uint8_t JoystickStatus = Joystick_GetStatus(); uint8_t JoystickStatus = Joystick_GetStatus();
uint8_t JoystickChanges = (JoystickStatus ^ PrevJoystickStatus); uint8_t JoystickChanges = (JoystickStatus ^ PrevJoystickStatus);

Loading…
Cancel
Save