diff --git a/Demos/Host/LowLevel/MIDIHost/MIDIHost.c b/Demos/Host/LowLevel/MIDIHost/MIDIHost.c index f4a52accd4..f6b607a973 100644 --- a/Demos/Host/LowLevel/MIDIHost/MIDIHost.c +++ b/Demos/Host/LowLevel/MIDIHost/MIDIHost.c @@ -167,6 +167,7 @@ void MIDIHost_Task(void) return; Pipe_SelectPipe(MIDI_DATA_IN_PIPE); + Pipe_Unfreeze(); if (Pipe_IsINReceived()) { @@ -187,8 +188,11 @@ void MIDIHost_Task(void) MIDIEvent.Data2, MIDIEvent.Data3); } } + + Pipe_Freeze(); Pipe_SelectPipe(MIDI_DATA_OUT_PIPE); + Pipe_Unfreeze(); if (Pipe_IsOUTReady()) { @@ -251,6 +255,8 @@ void MIDIHost_Task(void) Pipe_ClearOUT(); } + Pipe_Freeze(); + /* Save previous joystick value for next joystick change detection */ PrevJoystickStatus = JoystickStatus; } diff --git a/LUFA/Drivers/USB/Class/Host/MIDIClassHost.c b/LUFA/Drivers/USB/Class/Host/MIDIClassHost.c index 1300577fc6..b1abb68d79 100644 --- a/LUFA/Drivers/USB/Class/Host/MIDIClassHost.c +++ b/LUFA/Drivers/USB/Class/Host/MIDIClassHost.c @@ -156,15 +156,21 @@ uint8_t MIDI_Host_Flush(USB_ClassInfo_MIDI_Host_t* const MIDIInterfaceInfo) uint8_t ErrorCode; Pipe_SelectPipe(MIDIInterfaceInfo->Config.DataOUTPipe.Address); - + Pipe_Unfreeze(); + if (Pipe_BytesInPipe()) { Pipe_ClearOUT(); if ((ErrorCode = Pipe_WaitUntilReady()) != PIPE_READYWAIT_NoError) - return ErrorCode; + { + Pipe_Freeze(); + return ErrorCode; + } } + Pipe_Freeze(); + return PIPE_READYWAIT_NoError; } @@ -177,13 +183,19 @@ uint8_t MIDI_Host_SendEventPacket(USB_ClassInfo_MIDI_Host_t* const MIDIInterface uint8_t ErrorCode; Pipe_SelectPipe(MIDIInterfaceInfo->Config.DataOUTPipe.Address); - + Pipe_Unfreeze(); + if ((ErrorCode = Pipe_Write_Stream_LE(Event, sizeof(MIDI_EventPacket_t), NULL)) != PIPE_RWSTREAM_NoError) - return ErrorCode; + { + Pipe_Freeze(); + return ErrorCode; + } if (!(Pipe_IsReadWriteAllowed())) Pipe_ClearOUT(); + Pipe_Freeze(); + return PIPE_RWSTREAM_NoError; }