X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/74b6993d66d70c323beb4d7eccf5b8f45bf6d31f..d03d6513d0d24cf63225c8d3dfa07675d9107f40:/LUFA/Drivers/USB/Class/Host/RNDIS.c diff --git a/LUFA/Drivers/USB/Class/Host/RNDIS.c b/LUFA/Drivers/USB/Class/Host/RNDIS.c index fac569e9c..b81c6af58 100644 --- a/LUFA/Drivers/USB/Class/Host/RNDIS.c +++ b/LUFA/Drivers/USB/Class/Host/RNDIS.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_RNDIS_CLASS_HOST_C +#define __INCLUDE_FROM_RNDIS_CLASS_HOST_C +#define __INCLUDE_FROM_RNDIS_DRIVER #include "RNDIS.h" uint8_t RNDIS_Host_ConfigurePipes(USB_ClassInfo_RNDIS_Host_t* const RNDISInterfaceInfo, uint16_t ConfigDescriptorSize, @@ -110,12 +112,6 @@ uint8_t RNDIS_Host_ConfigurePipes(USB_ClassInfo_RNDIS_Host_t* const RNDISInterfa { if (EndpointData->EndpointAddress & ENDPOINT_DESCRIPTOR_DIR_IN) { - if (Pipe_IsEndpointBound(EndpointData->EndpointAddress)) - { - RNDISInterfaceInfo->State.BidirectionalDataEndpoints = true; - Pipe_DisablePipe(); - } - Pipe_ConfigurePipe(RNDISInterfaceInfo->Config.DataINPipeNumber, EP_TYPE_BULK, PIPE_TOKEN_IN, EndpointData->EndpointAddress, EndpointData->EndpointSize, RNDISInterfaceInfo->Config.DataINPipeDoubleBank ? PIPE_BANK_DOUBLE : PIPE_BANK_SINGLE); @@ -125,17 +121,9 @@ uint8_t RNDIS_Host_ConfigurePipes(USB_ClassInfo_RNDIS_Host_t* const RNDISInterfa } else { - if (Pipe_IsEndpointBound(EndpointData->EndpointAddress)) - { - RNDISInterfaceInfo->State.BidirectionalDataEndpoints = true; - } - else - { - Pipe_ConfigurePipe(RNDISInterfaceInfo->Config.DataOUTPipeNumber, EP_TYPE_BULK, PIPE_TOKEN_OUT, - EndpointData->EndpointAddress, EndpointData->EndpointSize, - RNDISInterfaceInfo->Config.DataOUTPipeDoubleBank ? PIPE_BANK_DOUBLE : PIPE_BANK_SINGLE); - } - + Pipe_ConfigurePipe(RNDISInterfaceInfo->Config.DataOUTPipeNumber, EP_TYPE_BULK, PIPE_TOKEN_OUT, + EndpointData->EndpointAddress, EndpointData->EndpointSize, + RNDISInterfaceInfo->Config.DataOUTPipeDoubleBank ? PIPE_BANK_DOUBLE : PIPE_BANK_SINGLE); RNDISInterfaceInfo->State.DataOUTPipeSize = EndpointData->EndpointSize; FoundEndpoints |= RNDIS_FOUND_DATAPIPE_OUT; @@ -192,7 +180,8 @@ static uint8_t DComp_RNDIS_Host_NextRNDISInterfaceEndpoint(void* const CurrentDe 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; } @@ -392,7 +381,7 @@ bool RNDIS_Host_IsPacketReceived(USB_ClassInfo_RNDIS_Host_t* const RNDISInterfac Pipe_Unfreeze(); - PacketWaiting = (Pipe_IsINReceived() && Pipe_BytesInPipe()); + PacketWaiting = Pipe_IsINReceived(); Pipe_Freeze(); @@ -422,27 +411,11 @@ uint8_t RNDIS_Host_ReadPacket(USB_ClassInfo_RNDIS_Host_t* const RNDISInterfaceIn RNDIS_Packet_Message_t DeviceMessage; - if (Pipe_BytesInPipe() < sizeof(RNDIS_Packet_Message_t)) - { - printf("*SIZE YARG: %d*\r\n", Pipe_BytesInPipe()); - *PacketLength = 0; - Pipe_ClearIN(); - return RNDIS_COMMAND_FAILED; - } - if ((ErrorCode = Pipe_Read_Stream_LE(&DeviceMessage, sizeof(RNDIS_Packet_Message_t), NO_STREAM_CALLBACK)) != PIPE_RWSTREAM_NoError) { return ErrorCode; } - - if (DeviceMessage.MessageType != REMOTE_NDIS_PACKET_MSG) - { - printf("****YARG****\r\n"); - *PacketLength = 0; - Pipe_ClearIN(); - return RNDIS_COMMAND_FAILED; - } *PacketLength = (uint16_t)DeviceMessage.DataLength; @@ -466,16 +439,6 @@ uint8_t RNDIS_Host_SendPacket(USB_ClassInfo_RNDIS_Host_t* const RNDISInterfaceIn if ((USB_HostState != HOST_STATE_Configured) || !(RNDISInterfaceInfo->State.IsActive)) return PIPE_READYWAIT_DeviceDisconnected; - if (RNDISInterfaceInfo->State.BidirectionalDataEndpoints) - { - Pipe_SelectPipe(RNDISInterfaceInfo->Config.DataINPipeNumber); - Pipe_SetPipeToken(PIPE_TOKEN_OUT); - } - else - { - Pipe_SelectPipe(RNDISInterfaceInfo->Config.DataOUTPipeNumber); - } - RNDIS_Packet_Message_t DeviceMessage; memset(&DeviceMessage, 0, sizeof(RNDIS_Packet_Message_t)); @@ -484,14 +447,12 @@ uint8_t RNDIS_Host_SendPacket(USB_ClassInfo_RNDIS_Host_t* const RNDISInterfaceIn DeviceMessage.DataOffset = (sizeof(RNDIS_Packet_Message_t) - sizeof(RNDIS_Message_Header_t)); DeviceMessage.DataLength = PacketLength; + Pipe_SelectPipe(RNDISInterfaceInfo->Config.DataOUTPipeNumber); Pipe_Unfreeze(); if ((ErrorCode = Pipe_Write_Stream_LE(&DeviceMessage, sizeof(RNDIS_Packet_Message_t), NO_STREAM_CALLBACK)) != PIPE_RWSTREAM_NoError) { - if (RNDISInterfaceInfo->State.BidirectionalDataEndpoints) - Pipe_SetPipeToken(PIPE_TOKEN_IN); - return ErrorCode; } @@ -500,9 +461,6 @@ uint8_t RNDIS_Host_SendPacket(USB_ClassInfo_RNDIS_Host_t* const RNDISInterfaceIn Pipe_Freeze(); - if (RNDISInterfaceInfo->State.BidirectionalDataEndpoints) - Pipe_SetPipeToken(PIPE_TOKEN_IN); - return PIPE_RWSTREAM_NoError; }