X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/6e011f88d9c9fac534958ca83e3f460de7fa1497..7d83bd0dccfeed374f5e3954de4790cae58379b6:/LUFA/Drivers/USB/LowLevel/Pipe.c diff --git a/LUFA/Drivers/USB/LowLevel/Pipe.c b/LUFA/Drivers/USB/LowLevel/Pipe.c index 748ed0b56..fc50060be 100644 --- a/LUFA/Drivers/USB/LowLevel/Pipe.c +++ b/LUFA/Drivers/USB/LowLevel/Pipe.c @@ -1,21 +1,21 @@ /* LUFA Library Copyright (C) Dean Camera, 2010. - + dean [at] fourwalledcubicle [dot] com - www.fourwalledcubicle.com + www.lufa-lib.org */ /* Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) - Permission to use, copy, modify, distribute, and sell this + Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in + without fee, provided that the above copyright notice appear in all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the software without specific, written prior permission. The author disclaim all warranties with regard to this @@ -44,6 +44,19 @@ bool Pipe_ConfigurePipe(const uint8_t Number, const uint16_t Size, const uint8_t Banks) { +#if defined(ORDERED_EP_CONFIG) + Pipe_SelectPipe(Number); + Pipe_EnablePipe(); + + UPCFG1X = 0; + + UPCFG0X = ((Type << EPTYPE0) | Token | ((EndpointNumber & PIPE_EPNUM_MASK) << PEPNUM0)); + UPCFG1X = ((1 << ALLOC) | Banks | Pipe_BytesToEPSizeMask(Size)); + + Pipe_SetInfiniteINRequests(); + + return Pipe_IsConfigured(); +#else uint8_t UPCFG0XTemp[PIPE_TOTAL_PIPES]; uint8_t UPCFG1XTemp[PIPE_TOTAL_PIPES]; uint8_t UPCFG2XTemp[PIPE_TOTAL_PIPES]; @@ -99,6 +112,7 @@ bool Pipe_ConfigurePipe(const uint8_t Number, Pipe_SelectPipe(Number); return true; +#endif } void Pipe_ClearPipes(void) @@ -122,20 +136,20 @@ bool Pipe_IsEndpointBound(const uint8_t EndpointAddress) for (uint8_t PNum = 0; PNum < PIPE_TOTAL_PIPES; PNum++) { Pipe_SelectPipe(PNum); - + if (!(Pipe_IsConfigured())) continue; - + uint8_t PipeToken = Pipe_GetPipeToken(); bool PipeTokenCorrect = true; if (PipeToken != PIPE_TOKEN_SETUP) PipeTokenCorrect = (PipeToken == ((EndpointAddress & PIPE_EPDIR_MASK) ? PIPE_TOKEN_IN : PIPE_TOKEN_OUT)); - + if (PipeTokenCorrect && (Pipe_BoundEndpointNumber() == (EndpointAddress & PIPE_EPNUM_MASK))) return true; } - + Pipe_SelectPipe(PrevPipeNumber); return false; } @@ -143,13 +157,13 @@ bool Pipe_IsEndpointBound(const uint8_t EndpointAddress) uint8_t Pipe_WaitUntilReady(void) { #if (USB_STREAM_TIMEOUT_MS < 0xFF) - uint8_t TimeoutMSRem = USB_STREAM_TIMEOUT_MS; + uint8_t TimeoutMSRem = USB_STREAM_TIMEOUT_MS; #else uint16_t TimeoutMSRem = USB_STREAM_TIMEOUT_MS; #endif uint16_t PreviousFrameNumber = USB_Host_GetFrameNumber(); - + for (;;) { if (Pipe_GetPipeToken() == PIPE_TOKEN_IN) @@ -160,7 +174,7 @@ uint8_t Pipe_WaitUntilReady(void) else { if (Pipe_IsOUTReady()) - return PIPE_READYWAIT_NoError; + return PIPE_READYWAIT_NoError; } if (Pipe_IsStalled()) @@ -181,3 +195,4 @@ uint8_t Pipe_WaitUntilReady(void) } #endif +