aboutsummaryrefslogtreecommitdiffstats
path: root/LUFA/Drivers/USB/LowLevel/Pipe.c
diff options
context:
space:
mode:
Diffstat (limited to 'LUFA/Drivers/USB/LowLevel/Pipe.c')
-rw-r--r--LUFA/Drivers/USB/LowLevel/Pipe.c65
1 files changed, 42 insertions, 23 deletions
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;