Fixed GenericHIDHost demo report write routine incorrect for control type requests...
[pub/USBasp.git] / LUFA / Drivers / USB / LowLevel / Pipe.c
index 1218d2f..5850fcf 100644 (file)
@@ -74,8 +74,19 @@ uint8_t Pipe_WaitUntilReady(void)
 \r
        USB_INT_Clear(USB_INT_HSOFI);\r
 \r
-       while (!(Pipe_ReadWriteAllowed()))\r
+       for (;;)\r
        {\r
+               if (Pipe_GetPipeToken() == PIPE_TOKEN_IN)\r
+               {\r
+                       if (Pipe_IsINReceived())\r
+                         return PIPE_READYWAIT_NoError;\r
+               }\r
+               else\r
+               {\r
+                       if (Pipe_IsOUTReady())\r
+                         return PIPE_READYWAIT_NoError;                \r
+               }\r
+\r
                if (Pipe_IsStalled())\r
                  return PIPE_READYWAIT_PipeStalled;\r
                else if (!(USB_IsConnected))\r
@@ -89,8 +100,6 @@ uint8_t Pipe_WaitUntilReady(void)
                          return PIPE_READYWAIT_Timeout;\r
                }\r
        }\r
-       \r
-       return PIPE_READYWAIT_NoError;\r
 }\r
 \r
 uint8_t Pipe_Write_Stream_LE(const void* Data, uint16_t Length\r
@@ -107,9 +116,9 @@ uint8_t Pipe_Write_Stream_LE(const void* Data, uint16_t Length
 \r
        while (Length--)\r
        {\r
-               if (!(Pipe_ReadWriteAllowed()))\r
+               if (!(Pipe_IsReadWriteAllowed()))\r
                {\r
-                       Pipe_ClearCurrentBank();\r
+                       Pipe_ClearOUT();\r
                                \r
                        #if !defined(NO_STREAM_CALLBACKS)\r
                        if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort))\r
@@ -119,8 +128,10 @@ uint8_t Pipe_Write_Stream_LE(const void* Data, uint16_t Length
                        if ((ErrorCode = Pipe_WaitUntilReady()))\r
                          return ErrorCode;\r
                }\r
-\r
-               Pipe_Write_Byte(*(DataStream++));\r
+               else\r
+               {\r
+                       Pipe_Write_Byte(*(DataStream++));\r
+               }\r
        }\r
 \r
        return PIPE_RWSTREAM_ERROR_NoError;\r
@@ -140,9 +151,9 @@ uint8_t Pipe_Write_Stream_BE(const void* Data, uint16_t Length
 \r
        while (Length--)\r
        {\r
-               if (!(Pipe_ReadWriteAllowed()))\r
+               if (!(Pipe_IsReadWriteAllowed()))\r
                {\r
-                       Pipe_ClearCurrentBank();\r
+                       Pipe_ClearOUT();\r
                                \r
                        #if !defined(NO_STREAM_CALLBACKS)\r
                        if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort))\r
@@ -152,8 +163,10 @@ uint8_t Pipe_Write_Stream_BE(const void* Data, uint16_t Length
                        if ((ErrorCode = Pipe_WaitUntilReady()))\r
                          return ErrorCode;\r
                }\r
-\r
-               Pipe_Write_Byte(*(DataStream--));\r
+               else\r
+               {\r
+                       Pipe_Write_Byte(*(DataStream--));\r
+               }\r
        }\r
 \r
        return PIPE_RWSTREAM_ERROR_NoError;\r
@@ -172,9 +185,9 @@ uint8_t Pipe_Discard_Stream(uint16_t Length
 \r
        while (Length--)\r
        {\r
-               if (!(Pipe_ReadWriteAllowed()))\r
+               if (!(Pipe_IsReadWriteAllowed()))\r
                {\r
-                       Pipe_ClearCurrentBank();\r
+                       Pipe_ClearIN();\r
                                \r
                        #if !defined(NO_STREAM_CALLBACKS)\r
                        if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort))\r
@@ -184,8 +197,10 @@ uint8_t Pipe_Discard_Stream(uint16_t Length
                        if ((ErrorCode = Pipe_WaitUntilReady()))\r
                          return ErrorCode;\r
                }\r
-\r
-               Pipe_Discard_Byte();\r
+               else\r
+               {\r
+                       Pipe_Discard_Byte();\r
+               }\r
        }\r
 \r
        return PIPE_RWSTREAM_ERROR_NoError;\r
@@ -205,9 +220,9 @@ uint8_t Pipe_Read_Stream_LE(void* Buffer, uint16_t Length
 \r
        while (Length--)\r
        {\r
-               if (!(Pipe_ReadWriteAllowed()))\r
+               if (!(Pipe_IsReadWriteAllowed()))\r
                {\r
-                       Pipe_ClearCurrentBank();\r
+                       Pipe_ClearIN();\r
                                \r
                        #if !defined(NO_STREAM_CALLBACKS)\r
                        if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort))\r
@@ -217,8 +232,10 @@ uint8_t Pipe_Read_Stream_LE(void* Buffer, uint16_t Length
                        if ((ErrorCode = Pipe_WaitUntilReady()))\r
                          return ErrorCode;\r
                }\r
-               \r
-               *(DataStream++) = Pipe_Read_Byte();\r
+               else\r
+               {\r
+                       *(DataStream++) = Pipe_Read_Byte();\r
+               }\r
        }\r
 \r
        return PIPE_RWSTREAM_ERROR_NoError;\r
@@ -238,9 +255,9 @@ uint8_t Pipe_Read_Stream_BE(void* Buffer, uint16_t Length
 \r
        while (Length--)\r
        {\r
-               if (!(Pipe_ReadWriteAllowed()))\r
+               if (!(Pipe_IsReadWriteAllowed()))\r
                {\r
-                       Pipe_ClearCurrentBank();\r
+                       Pipe_ClearIN();\r
                                \r
                        #if !defined(NO_STREAM_CALLBACKS)\r
                        if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort))\r
@@ -250,8 +267,10 @@ uint8_t Pipe_Read_Stream_BE(void* Buffer, uint16_t Length
                        if ((ErrorCode = Pipe_WaitUntilReady()))\r
                          return ErrorCode;\r
                }\r
-\r
-               *(DataStream--) = Pipe_Read_Byte();\r
+               else\r
+               {\r
+                       *(DataStream--) = Pipe_Read_Byte();\r
+               }\r
        }\r
        \r
        return PIPE_RWSTREAM_ERROR_NoError;\r