Fix up the incomplete Webserver project so that it integrates with the uIP stack...
[pub/USBasp.git] / LUFA / Drivers / USB / LowLevel / HostChapter9.c
index dfc3f44..ff7ed86 100644 (file)
@@ -1,21 +1,21 @@
 /*\r
              LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
+     Copyright (C) Dean Camera, 2010.\r
               \r
   dean [at] fourwalledcubicle [dot] com\r
       www.fourwalledcubicle.com\r
 */\r
 \r
 /*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
+  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, distribute, and sell this \r
+  software and its documentation for any purpose is hereby granted\r
+  without fee, provided that the above copyright notice appear in \r
+  all copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting \r
+  documentation, and that the name of the author not be used in \r
+  advertising or publicity pertaining to distribution of the \r
   software without specific, written prior permission.\r
 \r
   The author disclaim all warranties with regard to this\r
 #define  INCLUDE_FROM_HOSTCHAPTER9_C\r
 #include "HostChapter9.h"\r
 \r
-USB_Host_Request_Header_t USB_HostRequest;\r
-\r
 uint8_t USB_Host_SendControlRequest(void* BufferPtr)\r
 {\r
-       uint8_t* HeaderStream   = (uint8_t*)&USB_HostRequest;\r
+       uint8_t* HeaderStream   = (uint8_t*)&USB_ControlRequest;\r
        uint8_t* DataStream     = (uint8_t*)BufferPtr;\r
        bool     BusSuspended   = USB_Host_IsBusSuspended();\r
        uint8_t  ReturnStatus   = HOST_SENDCONTROL_Successful;\r
-       uint16_t DataLen        = USB_HostRequest.wLength;\r
+       uint16_t DataLen        = USB_ControlRequest.wLength;\r
 \r
        USB_Host_ResumeBus();\r
        \r
        if ((ReturnStatus = USB_Host_WaitMS(1)) != HOST_WAITERROR_Successful)\r
-         return ReturnStatus;\r
+         goto End_Of_Control_Send;\r
 \r
-       Pipe_SetToken(PIPE_TOKEN_SETUP);\r
+       Pipe_SetPipeToken(PIPE_TOKEN_SETUP);\r
        Pipe_ClearErrorFlags();\r
 \r
        Pipe_Unfreeze();\r
 \r
-       for (uint8_t HeaderByte = 0; HeaderByte < sizeof(USB_Host_Request_Header_t); HeaderByte++)\r
+       for (uint8_t HeaderByte = 0; HeaderByte < sizeof(USB_Request_Header_t); HeaderByte++)\r
          Pipe_Write_Byte(*(HeaderStream++));\r
 \r
        Pipe_ClearSETUP();\r
        \r
-       if ((ReturnStatus = USB_Host_Wait_For_Setup_IOS(USB_HOST_WAITFOR_SetupSent)))\r
+       if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_SetupSent)) != HOST_SENDCONTROL_Successful)\r
          goto End_Of_Control_Send;\r
 \r
        Pipe_Freeze();\r
@@ -68,9 +66,9 @@ uint8_t USB_Host_SendControlRequest(void* BufferPtr)
        if ((ReturnStatus = USB_Host_WaitMS(1)) != HOST_WAITERROR_Successful)\r
          goto End_Of_Control_Send;\r
 \r
-       if ((USB_HostRequest.bmRequestType & CONTROL_REQTYPE_DIRECTION) == REQDIR_DEVICETOHOST)\r
+       if ((USB_ControlRequest.bmRequestType & CONTROL_REQTYPE_DIRECTION) == REQDIR_DEVICETOHOST)\r
        {\r
-               Pipe_SetToken(PIPE_TOKEN_IN);\r
+               Pipe_SetPipeToken(PIPE_TOKEN_IN);\r
                \r
                if (DataStream != NULL)\r
                {\r
@@ -78,7 +76,7 @@ uint8_t USB_Host_SendControlRequest(void* BufferPtr)
                        {\r
                                Pipe_Unfreeze();\r
 \r
-                               if ((ReturnStatus = USB_Host_Wait_For_Setup_IOS(USB_HOST_WAITFOR_InReceived)))\r
+                               if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_InReceived)) != HOST_SENDCONTROL_Successful)\r
                                  goto End_Of_Control_Send;\r
                                                        \r
                                if (!(Pipe_BytesInPipe()))\r
@@ -95,27 +93,27 @@ uint8_t USB_Host_SendControlRequest(void* BufferPtr)
                        }\r
                }\r
 \r
-               Pipe_SetToken(PIPE_TOKEN_OUT);\r
+               Pipe_SetPipeToken(PIPE_TOKEN_OUT);\r
                Pipe_Unfreeze();\r
                \r
-               if ((ReturnStatus = USB_Host_Wait_For_Setup_IOS(USB_HOST_WAITFOR_OutReady)))\r
+               if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)) != HOST_SENDCONTROL_Successful)\r
                  goto End_Of_Control_Send;\r
 \r
                Pipe_ClearOUT();\r
 \r
-               if ((ReturnStatus = USB_Host_Wait_For_Setup_IOS(USB_HOST_WAITFOR_OutReady)))\r
+               if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)) != HOST_SENDCONTROL_Successful)\r
                  goto End_Of_Control_Send;\r
        }\r
        else\r
        {\r
                if (DataStream != NULL)\r
                {\r
-                       Pipe_SetToken(PIPE_TOKEN_OUT);\r
+                       Pipe_SetPipeToken(PIPE_TOKEN_OUT);\r
                        Pipe_Unfreeze();        \r
 \r
                        while (DataLen)\r
                        {\r
-                               if ((ReturnStatus = USB_Host_Wait_For_Setup_IOS(USB_HOST_WAITFOR_OutReady)))\r
+                               if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)) != HOST_SENDCONTROL_Successful)\r
                                  goto End_Of_Control_Send;\r
 \r
                                while (DataLen && (Pipe_BytesInPipe() < USB_ControlPipeSize))\r
@@ -127,16 +125,16 @@ uint8_t USB_Host_SendControlRequest(void* BufferPtr)
                                Pipe_ClearOUT();\r
                        }\r
 \r
-                       if ((ReturnStatus = USB_Host_Wait_For_Setup_IOS(USB_HOST_WAITFOR_OutReady)))\r
+                       if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)) != HOST_SENDCONTROL_Successful)\r
                          goto End_Of_Control_Send;\r
 \r
                        Pipe_Freeze();\r
                }\r
                \r
-               Pipe_SetToken(PIPE_TOKEN_IN);\r
+               Pipe_SetPipeToken(PIPE_TOKEN_IN);\r
                Pipe_Unfreeze();\r
 \r
-               if ((ReturnStatus = USB_Host_Wait_For_Setup_IOS(USB_HOST_WAITFOR_InReceived)))\r
+               if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_InReceived)) != HOST_SENDCONTROL_Successful)\r
                  goto End_Of_Control_Send;\r
 \r
                Pipe_ClearIN();\r
@@ -153,11 +151,15 @@ End_Of_Control_Send:
        return ReturnStatus;\r
 }\r
 \r
-static uint8_t USB_Host_Wait_For_Setup_IOS(const uint8_t WaitType)\r
+static uint8_t USB_Host_WaitForIOS(const uint8_t WaitType)\r
 {\r
+       #if (USB_HOST_TIMEOUT_MS < 0xFF)\r
+       uint8_t  TimeoutCounter = USB_HOST_TIMEOUT_MS;  \r
+       #else\r
        uint16_t TimeoutCounter = USB_HOST_TIMEOUT_MS;\r
+       #endif\r
        \r
-       while (!(((WaitType == USB_HOST_WAITFOR_SetupSent)  && Pipe_IsSETUPSent())       ||\r
+       while (!(((WaitType == USB_HOST_WAITFOR_SetupSent)  && Pipe_IsSETUPSent())  ||\r
                 ((WaitType == USB_HOST_WAITFOR_InReceived) && Pipe_IsINReceived()) ||\r
                 ((WaitType == USB_HOST_WAITFOR_OutReady)   && Pipe_IsOUTReady())))\r
        {\r