projects
/
pub
/
USBasp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Move new Class Driver powered demos to a new ClassDriver subdirectory, re-add old...
[pub/USBasp.git]
/
LUFA
/
Drivers
/
USB
/
LowLevel
/
Pipe.c
diff --git
a/LUFA/Drivers/USB/LowLevel/Pipe.c
b/LUFA/Drivers/USB/LowLevel/Pipe.c
index
496df33
..
720da17
100644
(file)
--- a/
LUFA/Drivers/USB/LowLevel/Pipe.c
+++ b/
LUFA/Drivers/USB/LowLevel/Pipe.c
@@
-27,7
+27,9
@@
arising out of or in connection with the use or performance of
\r
this software.
\r
*/
\r
arising out of or in connection with the use or performance of
\r
this software.
\r
*/
\r
-#include "USBMode.h"
\r
+
\r
+#include "../HighLevel/USBMode.h"
\r
+
\r
#if defined(USB_CAN_BE_HOST)
\r
\r
#define INCLUDE_FROM_PIPE_C
\r
#if defined(USB_CAN_BE_HOST)
\r
\r
#define INCLUDE_FROM_PIPE_C
\r
@@
-35,7
+37,7
@@
\r
uint8_t USB_ControlPipeSize = PIPE_CONTROLPIPE_DEFAULT_SIZE;
\r
\r
\r
uint8_t USB_ControlPipeSize = PIPE_CONTROLPIPE_DEFAULT_SIZE;
\r
\r
-bool Pipe_ConfigurePipe(const uint8_t
Number, const uint8_t Type, const uint8_t Token, const uint8_t EndpointNumber,
\r
+bool Pipe_ConfigurePipe(const uint8_t Number, const uint8_t Type, const uint8_t Token, const uint8_t EndpointNumber,
\r
const uint16_t Size, const uint8_t Banks)
\r
{
\r
Pipe_SelectPipe(Number);
\r
const uint16_t Size, const uint8_t Banks)
\r
{
\r
Pipe_SelectPipe(Number);
\r
@@
-68,32
+70,43
@@
void Pipe_ClearPipes(void)
\r
uint8_t Pipe_WaitUntilReady(void)
\r
{
\r
\r
uint8_t Pipe_WaitUntilReady(void)
\r
{
\r
+ #if (USB_STREAM_TIMEOUT_MS < 0xFF)
\r
+ uint8_t TimeoutMSRem = USB_STREAM_TIMEOUT_MS;
\r
+ #else
\r
uint16_t TimeoutMSRem = USB_STREAM_TIMEOUT_MS;
\r
uint16_t TimeoutMSRem = USB_STREAM_TIMEOUT_MS;
\r
+ #endif
\r
\r
\r
- USB_INT_Clear(USB_INT_HSOFI);
\r
-
\r
- while (!(Pipe_ReadWriteAllowed()))
\r
+ for (;;)
\r
{
\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
return PIPE_READYWAIT_DeviceDisconnected;
\r
\r
if (Pipe_IsStalled())
\r
return PIPE_READYWAIT_PipeStalled;
\r
else if (!(USB_IsConnected))
\r
return PIPE_READYWAIT_DeviceDisconnected;
\r
\r
- if (
USB_INT_HasOccurred(USB_INT_HSOFI)
)
\r
+ if (
FrameElapsed
)
\r
{
\r
{
\r
-
USB_INT_Clear(USB_INT_HSOFI)
;
\r
+
FrameElapsed = false
;
\r
\r
if (!(TimeoutMSRem--))
\r
return PIPE_READYWAIT_Timeout;
\r
}
\r
}
\r
\r
if (!(TimeoutMSRem--))
\r
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
#if !defined(NO_STREAM_CALLBACKS)
\r
}
\r
\r
uint8_t Pipe_Write_Stream_LE(const void* Data, uint16_t Length
\r
#if !defined(NO_STREAM_CALLBACKS)
\r
- ,
uint8_t (* const Callback)(void)
\r
+ ,
StreamCallbackPtr_t Callback
\r
#endif
\r
)
\r
{
\r
#endif
\r
)
\r
{
\r
@@
-103,30
+116,33
@@
uint8_t Pipe_Write_Stream_LE(const void* Data, uint16_t Length
if ((ErrorCode = Pipe_WaitUntilReady()))
\r
return ErrorCode;
\r
\r
if ((ErrorCode = Pipe_WaitUntilReady()))
\r
return ErrorCode;
\r
\r
- while (Length
--
)
\r
+ while (Length)
\r
{
\r
{
\r
- if (!(Pipe_ReadWriteAllowed()))
\r
+ if (!(Pipe_
Is
ReadWriteAllowed()))
\r
{
\r
{
\r
- Pipe_Clear
CurrentBank
();
\r
+ Pipe_Clear
OUT
();
\r
\r
#if !defined(NO_STREAM_CALLBACKS)
\r
if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort))
\r
\r
#if !defined(NO_STREAM_CALLBACKS)
\r
if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort))
\r
- return PIPE_RWSTREAM_
ERROR_
CallbackAborted;
\r
+ return PIPE_RWSTREAM_CallbackAborted;
\r
#endif
\r
\r
if ((ErrorCode = Pipe_WaitUntilReady()))
\r
return ErrorCode;
\r
}
\r
#endif
\r
\r
if ((ErrorCode = Pipe_WaitUntilReady()))
\r
return ErrorCode;
\r
}
\r
-
\r
- Pipe_Write_Byte(*(DataStream++));
\r
+ else
\r
+ {
\r
+ Pipe_Write_Byte(*(DataStream++));
\r
+ Length--;
\r
+ }
\r
}
\r
\r
}
\r
\r
- return PIPE_RWSTREAM_
ERROR_
NoError;
\r
+ return PIPE_RWSTREAM_NoError;
\r
}
\r
\r
uint8_t Pipe_Write_Stream_BE(const void* Data, uint16_t Length
\r
#if !defined(NO_STREAM_CALLBACKS)
\r
}
\r
\r
uint8_t Pipe_Write_Stream_BE(const void* Data, uint16_t Length
\r
#if !defined(NO_STREAM_CALLBACKS)
\r
- ,
uint8_t (* const Callback)(void)
\r
+ ,
StreamCallbackPtr_t Callback
\r
#endif
\r
)
\r
{
\r
#endif
\r
)
\r
{
\r
@@
-136,30
+152,33
@@
uint8_t Pipe_Write_Stream_BE(const void* Data, uint16_t Length
if ((ErrorCode = Pipe_WaitUntilReady()))
\r
return ErrorCode;
\r
\r
if ((ErrorCode = Pipe_WaitUntilReady()))
\r
return ErrorCode;
\r
\r
- while (Length
--
)
\r
+ while (Length)
\r
{
\r
{
\r
- if (!(Pipe_ReadWriteAllowed()))
\r
+ if (!(Pipe_
Is
ReadWriteAllowed()))
\r
{
\r
{
\r
- Pipe_Clear
CurrentBank
();
\r
+ Pipe_Clear
OUT
();
\r
\r
#if !defined(NO_STREAM_CALLBACKS)
\r
if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort))
\r
\r
#if !defined(NO_STREAM_CALLBACKS)
\r
if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort))
\r
- return PIPE_RWSTREAM_
ERROR_
CallbackAborted;
\r
+ return PIPE_RWSTREAM_CallbackAborted;
\r
#endif
\r
\r
if ((ErrorCode = Pipe_WaitUntilReady()))
\r
return ErrorCode;
\r
}
\r
#endif
\r
\r
if ((ErrorCode = Pipe_WaitUntilReady()))
\r
return ErrorCode;
\r
}
\r
-
\r
- Pipe_Write_Byte(*(DataStream--));
\r
+ else
\r
+ {
\r
+ Pipe_Write_Byte(*(DataStream--));
\r
+ Length--;
\r
+ }
\r
}
\r
\r
}
\r
\r
- return PIPE_RWSTREAM_
ERROR_
NoError;
\r
+ return PIPE_RWSTREAM_NoError;
\r
}
\r
\r
uint8_t Pipe_Discard_Stream(uint16_t Length
\r
#if !defined(NO_STREAM_CALLBACKS)
\r
}
\r
\r
uint8_t Pipe_Discard_Stream(uint16_t Length
\r
#if !defined(NO_STREAM_CALLBACKS)
\r
- ,
uint8_t (* const Callback)(void)
\r
+ ,
StreamCallbackPtr_t Callback
\r
#endif
\r
)
\r
{
\r
#endif
\r
)
\r
{
\r
@@
-168,30
+187,33
@@
uint8_t Pipe_Discard_Stream(uint16_t Length
if ((ErrorCode = Pipe_WaitUntilReady()))
\r
return ErrorCode;
\r
\r
if ((ErrorCode = Pipe_WaitUntilReady()))
\r
return ErrorCode;
\r
\r
- while (Length
--
)
\r
+ while (Length)
\r
{
\r
{
\r
- if (!(Pipe_ReadWriteAllowed()))
\r
+ if (!(Pipe_
Is
ReadWriteAllowed()))
\r
{
\r
{
\r
- Pipe_Clear
CurrentBank
();
\r
+ Pipe_Clear
IN
();
\r
\r
#if !defined(NO_STREAM_CALLBACKS)
\r
if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort))
\r
\r
#if !defined(NO_STREAM_CALLBACKS)
\r
if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort))
\r
- return PIPE_RWSTREAM_
ERROR_
CallbackAborted;
\r
+ return PIPE_RWSTREAM_CallbackAborted;
\r
#endif
\r
\r
if ((ErrorCode = Pipe_WaitUntilReady()))
\r
return ErrorCode;
\r
}
\r
#endif
\r
\r
if ((ErrorCode = Pipe_WaitUntilReady()))
\r
return ErrorCode;
\r
}
\r
-
\r
- Pipe_Discard_Byte();
\r
+ else
\r
+ {
\r
+ Pipe_Discard_Byte();
\r
+ Length--;
\r
+ }
\r
}
\r
\r
}
\r
\r
- return PIPE_RWSTREAM_
ERROR_
NoError;
\r
+ return PIPE_RWSTREAM_NoError;
\r
}
\r
\r
uint8_t Pipe_Read_Stream_LE(void* Buffer, uint16_t Length
\r
}
\r
\r
uint8_t Pipe_Read_Stream_LE(void* Buffer, uint16_t Length
\r
-
#if !defined(NO_STREAM_CALLBACKS)
\r
- ,
uint8_t (* const Callback)(void)
\r
+#if !defined(NO_STREAM_CALLBACKS)
\r
+ ,
StreamCallbackPtr_t Callback
\r
#endif
\r
)
\r
{
\r
#endif
\r
)
\r
{
\r
@@
-201,30
+223,33
@@
uint8_t Pipe_Read_Stream_LE(void* Buffer, uint16_t Length
if ((ErrorCode = Pipe_WaitUntilReady()))
\r
return ErrorCode;
\r
\r
if ((ErrorCode = Pipe_WaitUntilReady()))
\r
return ErrorCode;
\r
\r
- while (Length
--
)
\r
+ while (Length)
\r
{
\r
{
\r
- if (!(Pipe_ReadWriteAllowed()))
\r
+ if (!(Pipe_
Is
ReadWriteAllowed()))
\r
{
\r
{
\r
- Pipe_Clear
CurrentBank
();
\r
+ Pipe_Clear
IN
();
\r
\r
#if !defined(NO_STREAM_CALLBACKS)
\r
if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort))
\r
\r
#if !defined(NO_STREAM_CALLBACKS)
\r
if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort))
\r
- return PIPE_RWSTREAM_
ERROR_
CallbackAborted;
\r
+ return PIPE_RWSTREAM_CallbackAborted;
\r
#endif
\r
\r
if ((ErrorCode = Pipe_WaitUntilReady()))
\r
return ErrorCode;
\r
}
\r
#endif
\r
\r
if ((ErrorCode = Pipe_WaitUntilReady()))
\r
return ErrorCode;
\r
}
\r
-
\r
- *(DataStream++) = Pipe_Read_Byte();
\r
+ else
\r
+ {
\r
+ *(DataStream++) = Pipe_Read_Byte();
\r
+ Length--;
\r
+ }
\r
}
\r
\r
}
\r
\r
- return PIPE_RWSTREAM_
ERROR_
NoError;
\r
+ return PIPE_RWSTREAM_NoError;
\r
}
\r
\r
uint8_t Pipe_Read_Stream_BE(void* Buffer, uint16_t Length
\r
}
\r
\r
uint8_t Pipe_Read_Stream_BE(void* Buffer, uint16_t Length
\r
-
#if !defined(NO_STREAM_CALLBACKS)
\r
- ,
uint8_t (* const Callback)(void)
\r
+#if !defined(NO_STREAM_CALLBACKS)
\r
+ ,
StreamCallbackPtr_t Callback
\r
#endif
\r
)
\r
{
\r
#endif
\r
)
\r
{
\r
@@
-234,25
+259,28
@@
uint8_t Pipe_Read_Stream_BE(void* Buffer, uint16_t Length
if ((ErrorCode = Pipe_WaitUntilReady()))
\r
return ErrorCode;
\r
\r
if ((ErrorCode = Pipe_WaitUntilReady()))
\r
return ErrorCode;
\r
\r
- while (Length
--
)
\r
+ while (Length)
\r
{
\r
{
\r
- if (!(Pipe_ReadWriteAllowed()))
\r
+ if (!(Pipe_
Is
ReadWriteAllowed()))
\r
{
\r
{
\r
- Pipe_Clear
CurrentBank
();
\r
+ Pipe_Clear
IN
();
\r
\r
#if !defined(NO_STREAM_CALLBACKS)
\r
if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort))
\r
\r
#if !defined(NO_STREAM_CALLBACKS)
\r
if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort))
\r
- return PIPE_RWSTREAM_
ERROR_
CallbackAborted;
\r
+ return PIPE_RWSTREAM_CallbackAborted;
\r
#endif
\r
\r
if ((ErrorCode = Pipe_WaitUntilReady()))
\r
return ErrorCode;
\r
}
\r
#endif
\r
\r
if ((ErrorCode = Pipe_WaitUntilReady()))
\r
return ErrorCode;
\r
}
\r
-
\r
- *(DataStream--) = Pipe_Read_Byte();
\r
+ else
\r
+ {
\r
+ *(DataStream--) = Pipe_Read_Byte();
\r
+ Length--;
\r
+ }
\r
}
\r
\r
}
\r
\r
- return PIPE_RWSTREAM_
ERROR_
NoError;
\r
+ return PIPE_RWSTREAM_NoError;
\r
}
\r
\r
#endif
\r
}
\r
\r
#endif
\r