From d26a9ed5fd6fc60a0dfa61d04f5ae2bd7163a85d Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Thu, 28 Jan 2010 06:37:26 +0000 Subject: Be doubly-certain that the incomming CDC class driver's endpoint/pipe is flushed only once when the bank is empty. --- LUFA/Drivers/USB/Class/Device/CDC.c | 13 ++++++++++--- LUFA/Drivers/USB/Class/Host/CDC.c | 23 ++++++++++++++++------- 2 files changed, 26 insertions(+), 10 deletions(-) (limited to 'LUFA/Drivers') diff --git a/LUFA/Drivers/USB/Class/Device/CDC.c b/LUFA/Drivers/USB/Class/Device/CDC.c index 16bc01549..b8a673f03 100644 --- a/LUFA/Drivers/USB/Class/Device/CDC.c +++ b/LUFA/Drivers/USB/Class/Device/CDC.c @@ -190,10 +190,17 @@ uint16_t CDC_Device_BytesReceived(USB_ClassInfo_CDC_Device_t* const CDCInterface Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataOUTEndpointNumber); - if (Endpoint_IsOUTReceived() && !(Endpoint_BytesInEndpoint())) - Endpoint_ClearOUT(); + if (Endpoint_IsOUTReceived()) + { + if (!(Endpoint_BytesInEndpoint())) + Endpoint_ClearOUT(); - return Endpoint_BytesInEndpoint(); + return Endpoint_BytesInEndpoint(); + } + else + { + return 0; + } } uint8_t CDC_Device_ReceiveByte(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo) diff --git a/LUFA/Drivers/USB/Class/Host/CDC.c b/LUFA/Drivers/USB/Class/Host/CDC.c index 8ad37de73..85864b05c 100644 --- a/LUFA/Drivers/USB/Class/Host/CDC.c +++ b/LUFA/Drivers/USB/Class/Host/CDC.c @@ -309,13 +309,22 @@ uint16_t CDC_Host_BytesReceived(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo Pipe_SetPipeToken(PIPE_TOKEN_IN); Pipe_Unfreeze(); - if (Pipe_IsINReceived() && !(Pipe_BytesInPipe())) - Pipe_ClearIN(); - - BytesInPipe = Pipe_BytesInPipe(); - Pipe_Freeze(); - - return BytesInPipe; + if (Pipe_IsINReceived()) + { + if (!(Pipe_BytesInPipe())) + Pipe_ClearIN(); + + BytesInPipe = Pipe_BytesInPipe(); + Pipe_Freeze(); + + return BytesInPipe; + } + else + { + Pipe_Freeze(); + + return 0; + } } uint8_t CDC_Host_ReceiveByte(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo) -- cgit v1.2.3