X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/431db89b00408197976d653d89d15eeef8172e1b..a7aaa45ec4c3f415bf6073a5cc016635d5ecf77d:/LUFA/Drivers/USB/Class/Host/CDC.c diff --git a/LUFA/Drivers/USB/Class/Host/CDC.c b/LUFA/Drivers/USB/Class/Host/CDC.c index 8ad37de73..cc1ff8a0b 100644 --- a/LUFA/Drivers/USB/Class/Host/CDC.c +++ b/LUFA/Drivers/USB/Class/Host/CDC.c @@ -28,10 +28,12 @@ this software. */ +#define __INCLUDE_FROM_USB_DRIVER #include "../../HighLevel/USBMode.h" #if defined(USB_CAN_BE_HOST) -#define INCLUDE_FROM_CDC_CLASS_HOST_C +#define __INCLUDE_FROM_CDC_CLASS_HOST_C +#define __INCLUDE_FROM_CDC_DRIVER #include "CDC.h" uint8_t CDC_Host_ConfigurePipes(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo, uint16_t ConfigDescriptorSize, @@ -182,7 +184,8 @@ static uint8_t DComp_CDC_Host_NextCDCInterfaceEndpoint(void* const CurrentDescri uint8_t EndpointType = (CurrentEndpoint->Attributes & EP_TYPE_MASK); - if ((EndpointType == EP_TYPE_BULK) || (EndpointType == EP_TYPE_INTERRUPT)) + if (((EndpointType == EP_TYPE_BULK) || (EndpointType == EP_TYPE_INTERRUPT)) && + !(Pipe_IsEndpointBound(CurrentEndpoint->EndpointAddress))) { return DESCRIPTOR_SEARCH_Found; } @@ -309,13 +312,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)