X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/7d4cccc22d60125fac111819df48af1873d11018..ba7cd3f22e0ec8c2fc7fd5dae3620aa75d926fd3:/LUFA/Drivers/USB/LowLevel/Pipe.c diff --git a/LUFA/Drivers/USB/LowLevel/Pipe.c b/LUFA/Drivers/USB/LowLevel/Pipe.c index 1218d2f24..5850fcf7c 100644 --- a/LUFA/Drivers/USB/LowLevel/Pipe.c +++ b/LUFA/Drivers/USB/LowLevel/Pipe.c @@ -74,8 +74,19 @@ uint8_t Pipe_WaitUntilReady(void) USB_INT_Clear(USB_INT_HSOFI); - while (!(Pipe_ReadWriteAllowed())) + for (;;) { + if (Pipe_GetPipeToken() == PIPE_TOKEN_IN) + { + if (Pipe_IsINReceived()) + return PIPE_READYWAIT_NoError; + } + else + { + if (Pipe_IsOUTReady()) + return PIPE_READYWAIT_NoError; + } + if (Pipe_IsStalled()) return PIPE_READYWAIT_PipeStalled; else if (!(USB_IsConnected)) @@ -89,8 +100,6 @@ uint8_t Pipe_WaitUntilReady(void) return PIPE_READYWAIT_Timeout; } } - - return PIPE_READYWAIT_NoError; } uint8_t Pipe_Write_Stream_LE(const void* Data, uint16_t Length @@ -107,9 +116,9 @@ uint8_t Pipe_Write_Stream_LE(const void* Data, uint16_t Length while (Length--) { - if (!(Pipe_ReadWriteAllowed())) + if (!(Pipe_IsReadWriteAllowed())) { - Pipe_ClearCurrentBank(); + Pipe_ClearOUT(); #if !defined(NO_STREAM_CALLBACKS) if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort)) @@ -119,8 +128,10 @@ uint8_t Pipe_Write_Stream_LE(const void* Data, uint16_t Length if ((ErrorCode = Pipe_WaitUntilReady())) return ErrorCode; } - - Pipe_Write_Byte(*(DataStream++)); + else + { + Pipe_Write_Byte(*(DataStream++)); + } } return PIPE_RWSTREAM_ERROR_NoError; @@ -140,9 +151,9 @@ uint8_t Pipe_Write_Stream_BE(const void* Data, uint16_t Length while (Length--) { - if (!(Pipe_ReadWriteAllowed())) + if (!(Pipe_IsReadWriteAllowed())) { - Pipe_ClearCurrentBank(); + Pipe_ClearOUT(); #if !defined(NO_STREAM_CALLBACKS) if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort)) @@ -152,8 +163,10 @@ uint8_t Pipe_Write_Stream_BE(const void* Data, uint16_t Length if ((ErrorCode = Pipe_WaitUntilReady())) return ErrorCode; } - - Pipe_Write_Byte(*(DataStream--)); + else + { + Pipe_Write_Byte(*(DataStream--)); + } } return PIPE_RWSTREAM_ERROR_NoError; @@ -172,9 +185,9 @@ uint8_t Pipe_Discard_Stream(uint16_t Length while (Length--) { - if (!(Pipe_ReadWriteAllowed())) + if (!(Pipe_IsReadWriteAllowed())) { - Pipe_ClearCurrentBank(); + Pipe_ClearIN(); #if !defined(NO_STREAM_CALLBACKS) if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort)) @@ -184,8 +197,10 @@ uint8_t Pipe_Discard_Stream(uint16_t Length if ((ErrorCode = Pipe_WaitUntilReady())) return ErrorCode; } - - Pipe_Discard_Byte(); + else + { + Pipe_Discard_Byte(); + } } return PIPE_RWSTREAM_ERROR_NoError; @@ -205,9 +220,9 @@ uint8_t Pipe_Read_Stream_LE(void* Buffer, uint16_t Length while (Length--) { - if (!(Pipe_ReadWriteAllowed())) + if (!(Pipe_IsReadWriteAllowed())) { - Pipe_ClearCurrentBank(); + Pipe_ClearIN(); #if !defined(NO_STREAM_CALLBACKS) if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort)) @@ -217,8 +232,10 @@ uint8_t Pipe_Read_Stream_LE(void* Buffer, uint16_t Length if ((ErrorCode = Pipe_WaitUntilReady())) return ErrorCode; } - - *(DataStream++) = Pipe_Read_Byte(); + else + { + *(DataStream++) = Pipe_Read_Byte(); + } } return PIPE_RWSTREAM_ERROR_NoError; @@ -238,9 +255,9 @@ uint8_t Pipe_Read_Stream_BE(void* Buffer, uint16_t Length while (Length--) { - if (!(Pipe_ReadWriteAllowed())) + if (!(Pipe_IsReadWriteAllowed())) { - Pipe_ClearCurrentBank(); + Pipe_ClearIN(); #if !defined(NO_STREAM_CALLBACKS) if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort)) @@ -250,8 +267,10 @@ uint8_t Pipe_Read_Stream_BE(void* Buffer, uint16_t Length if ((ErrorCode = Pipe_WaitUntilReady())) return ErrorCode; } - - *(DataStream--) = Pipe_Read_Byte(); + else + { + *(DataStream--) = Pipe_Read_Byte(); + } } return PIPE_RWSTREAM_ERROR_NoError;