X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/d1e52660368d34d693131f6aff3c8fd8584162e5..7366f590f5ab89e954a176eb7cc7fa713ce07d3e:/LUFA/Drivers/USB/LowLevel/Pipe.c diff --git a/LUFA/Drivers/USB/LowLevel/Pipe.c b/LUFA/Drivers/USB/LowLevel/Pipe.c index 720da1772..1376de495 100644 --- a/LUFA/Drivers/USB/LowLevel/Pipe.c +++ b/LUFA/Drivers/USB/LowLevel/Pipe.c @@ -45,9 +45,11 @@ bool Pipe_ConfigurePipe(const uint8_t Number, const uint8_t Type, const uint8_t UPCFG1X = 0; - UPCFG0X = ((Type << EPTYPE0) | Token | (EndpointNumber << PEPNUM0)); + UPCFG0X = ((Type << EPTYPE0) | Token | ((EndpointNumber & PIPE_EPNUM_MASK) << PEPNUM0)); UPCFG1X = ((1 << ALLOC) | Banks | Pipe_BytesToEPSizeMask(Size)); + Pipe_SetInfiniteINRequests(); + return Pipe_IsConfigured(); } @@ -94,9 +96,9 @@ uint8_t Pipe_WaitUntilReady(void) else if (!(USB_IsConnected)) return PIPE_READYWAIT_DeviceDisconnected; - if (FrameElapsed) + if (USB_INT_HasOccurred(USB_INT_HSOFI)) { - FrameElapsed = false; + USB_INT_Clear(USB_INT_HSOFI); if (!(TimeoutMSRem--)) return PIPE_READYWAIT_Timeout; @@ -113,6 +115,8 @@ uint8_t Pipe_Write_Stream_LE(const void* Data, uint16_t Length uint8_t* DataStream = (uint8_t*)Data; uint8_t ErrorCode; + Pipe_SetToken(PIPE_TOKEN_OUT); + if ((ErrorCode = Pipe_WaitUntilReady())) return ErrorCode; @@ -149,6 +153,8 @@ uint8_t Pipe_Write_Stream_BE(const void* Data, uint16_t Length uint8_t* DataStream = (uint8_t*)(Data + Length - 1); uint8_t ErrorCode; + Pipe_SetToken(PIPE_TOKEN_OUT); + if ((ErrorCode = Pipe_WaitUntilReady())) return ErrorCode; @@ -184,6 +190,8 @@ uint8_t Pipe_Discard_Stream(uint16_t Length { uint8_t ErrorCode; + Pipe_SetToken(PIPE_TOKEN_IN); + if ((ErrorCode = Pipe_WaitUntilReady())) return ErrorCode; @@ -220,6 +228,8 @@ uint8_t Pipe_Read_Stream_LE(void* Buffer, uint16_t Length uint8_t* DataStream = (uint8_t*)Buffer; uint8_t ErrorCode; + Pipe_SetToken(PIPE_TOKEN_IN); + if ((ErrorCode = Pipe_WaitUntilReady())) return ErrorCode; @@ -256,6 +266,8 @@ uint8_t Pipe_Read_Stream_BE(void* Buffer, uint16_t Length uint8_t* DataStream = (uint8_t*)(Buffer + Length - 1); uint8_t ErrorCode; + Pipe_SetToken(PIPE_TOKEN_IN); + if ((ErrorCode = Pipe_WaitUntilReady())) return ErrorCode;