Add FatFS library to the Webserver project, extend the HTTP server so that it now...
[pub/USBasp.git] / LUFA / Drivers / USB / Class / Host / RNDIS.c
index 46aeb98..5966ed8 100644 (file)
@@ -110,12 +110,6 @@ uint8_t RNDIS_Host_ConfigurePipes(USB_ClassInfo_RNDIS_Host_t* const RNDISInterfa
                {\r
                        if (EndpointData->EndpointAddress & ENDPOINT_DESCRIPTOR_DIR_IN)\r
                        {\r
-                               if (Pipe_IsEndpointBound(EndpointData->EndpointAddress))\r
-                               {\r
-                                       RNDISInterfaceInfo->State.BidirectionalDataEndpoints = true;\r
-                                       Pipe_DisablePipe();\r
-                               }\r
-\r
                                Pipe_ConfigurePipe(RNDISInterfaceInfo->Config.DataINPipeNumber, EP_TYPE_BULK, PIPE_TOKEN_IN,\r
                                                   EndpointData->EndpointAddress, EndpointData->EndpointSize, \r
                                                   RNDISInterfaceInfo->Config.DataINPipeDoubleBank ? PIPE_BANK_DOUBLE : PIPE_BANK_SINGLE);\r
@@ -125,17 +119,10 @@ uint8_t RNDIS_Host_ConfigurePipes(USB_ClassInfo_RNDIS_Host_t* const RNDISInterfa
                        }\r
                        else\r
                        {\r
-                               if (Pipe_IsEndpointBound(EndpointData->EndpointAddress))\r
-                               {\r
-                                       RNDISInterfaceInfo->State.BidirectionalDataEndpoints = true;\r
-                               }\r
-                               else\r
-                               {\r
-                                       Pipe_ConfigurePipe(RNDISInterfaceInfo->Config.DataOUTPipeNumber, EP_TYPE_BULK, PIPE_TOKEN_OUT,\r
-                                                          EndpointData->EndpointAddress, EndpointData->EndpointSize, \r
-                                                          RNDISInterfaceInfo->Config.DataOUTPipeDoubleBank ? PIPE_BANK_DOUBLE : PIPE_BANK_SINGLE);\r
-                               }\r
-                               \r
+                               Pipe_ConfigurePipe(RNDISInterfaceInfo->Config.DataOUTPipeNumber, EP_TYPE_BULK, PIPE_TOKEN_OUT,\r
+                                                  EndpointData->EndpointAddress, EndpointData->EndpointSize, \r
+                                                  RNDISInterfaceInfo->Config.DataOUTPipeDoubleBank ? PIPE_BANK_DOUBLE : PIPE_BANK_SINGLE);\r
+\r
                                RNDISInterfaceInfo->State.DataOUTPipeSize = EndpointData->EndpointSize;\r
                                \r
                                FoundEndpoints |= RNDIS_FOUND_DATAPIPE_OUT;\r
@@ -392,7 +379,7 @@ bool RNDIS_Host_IsPacketReceived(USB_ClassInfo_RNDIS_Host_t* const RNDISInterfac
        \r
        Pipe_Unfreeze();\r
 \r
-       PacketWaiting = Pipe_IsINReceived();\r
+       PacketWaiting = (Pipe_IsINReceived() && Pipe_BytesInPipe());\r
        \r
        Pipe_Freeze();\r
        \r
@@ -412,6 +399,9 @@ uint8_t RNDIS_Host_ReadPacket(USB_ClassInfo_RNDIS_Host_t* const RNDISInterfaceIn
        \r
        if (!(Pipe_IsReadWriteAllowed()))\r
        {\r
+               if (Pipe_IsINReceived())\r
+                 Pipe_ClearIN();\r
+       \r
                *PacketLength = 0;\r
                Pipe_Freeze();\r
                return PIPE_RWSTREAM_NoError;\r
@@ -431,7 +421,9 @@ uint8_t RNDIS_Host_ReadPacket(USB_ClassInfo_RNDIS_Host_t* const RNDISInterfaceIn
                            NO_STREAM_CALLBACK);\r
                                                \r
        Pipe_Read_Stream_LE(Buffer, *PacketLength, NO_STREAM_CALLBACK);\r
-       Pipe_ClearIN();\r
+       \r
+       if (!(Pipe_BytesInPipe()))\r
+         Pipe_ClearIN();\r
 \r
        Pipe_Freeze();\r
        \r
@@ -445,39 +437,28 @@ uint8_t RNDIS_Host_SendPacket(USB_ClassInfo_RNDIS_Host_t* const RNDISInterfaceIn
        if ((USB_HostState != HOST_STATE_Configured) || !(RNDISInterfaceInfo->State.IsActive))\r
          return PIPE_READYWAIT_DeviceDisconnected;\r
 \r
-       if (RNDISInterfaceInfo->State.BidirectionalDataEndpoints)\r
-       {\r
-               Pipe_SelectPipe(RNDISInterfaceInfo->Config.DataINPipeNumber);\r
-               Pipe_SetPipeToken(PIPE_TOKEN_OUT);\r
-       }\r
-       else\r
-       {\r
-               Pipe_SelectPipe(RNDISInterfaceInfo->Config.DataOUTPipeNumber);  \r
-       }\r
-\r
-       Pipe_Unfreeze();\r
-\r
        RNDIS_Packet_Message_t DeviceMessage;\r
-       \r
-       DeviceMessage.MessageType = REMOTE_NDIS_PACKET_MSG;\r
+\r
+       memset(&DeviceMessage, 0, sizeof(RNDIS_Packet_Message_t));\r
+       DeviceMessage.MessageType   = REMOTE_NDIS_PACKET_MSG;\r
        DeviceMessage.MessageLength = (sizeof(RNDIS_Packet_Message_t) + PacketLength);\r
-       DeviceMessage.DataOffset = (sizeof(RNDIS_Packet_Message_t) - sizeof(RNDIS_Message_Header_t));\r
-       DeviceMessage.DataLength = PacketLength;\r
+       DeviceMessage.DataOffset    = (sizeof(RNDIS_Packet_Message_t) - sizeof(RNDIS_Message_Header_t));\r
+       DeviceMessage.DataLength    = PacketLength;\r
        \r
+       Pipe_SelectPipe(RNDISInterfaceInfo->Config.DataOUTPipeNumber);\r
+       Pipe_Unfreeze();\r
+\r
        if ((ErrorCode = Pipe_Write_Stream_LE(&DeviceMessage, sizeof(RNDIS_Packet_Message_t),\r
                                              NO_STREAM_CALLBACK)) != PIPE_RWSTREAM_NoError)\r
        {\r
                return ErrorCode;\r
        }\r
-       \r
+\r
        Pipe_Write_Stream_LE(Buffer, PacketLength, NO_STREAM_CALLBACK);\r
        Pipe_ClearOUT();\r
 \r
        Pipe_Freeze();\r
        \r
-       if (RNDISInterfaceInfo->State.BidirectionalDataEndpoints)\r
-         Pipe_SetPipeToken(PIPE_TOKEN_IN);\r
-       \r
        return PIPE_RWSTREAM_NoError;\r
 }\r
 \r