X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/e72f424f6450cf67d3ef57d347a4f8d86ec5a119..12fb68ea1fd3b87c748de5d22c816a086b41cff9:/LUFA/Drivers/USB/LowLevel/Endpoint.c diff --git a/LUFA/Drivers/USB/LowLevel/Endpoint.c b/LUFA/Drivers/USB/LowLevel/Endpoint.c index 742e61860..d4f10db04 100644 --- a/LUFA/Drivers/USB/LowLevel/Endpoint.c +++ b/LUFA/Drivers/USB/LowLevel/Endpoint.c @@ -43,18 +43,31 @@ bool Endpoint_ConfigureEndpoint_Prv(const uint8_t Number, const uint8_t UECFG0XData, const uint8_t UECFG1XData) { +#if defined(CONTROL_ONLY_DEVICE) + Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP); + Endpoint_EnableEndpoint(); + + UECFG1X = 0; + UECFG0X = UECFG0XData; + UECFG1X = UECFG1XData; + + return Endpoint_IsConfigured(); +#else uint8_t UECFG0XTemp[ENDPOINT_TOTAL_ENDPOINTS]; uint8_t UECFG1XTemp[ENDPOINT_TOTAL_ENDPOINTS]; + uint8_t UEIENXTemp[ENDPOINT_TOTAL_ENDPOINTS]; for (uint8_t EPNum = 0; EPNum < ENDPOINT_TOTAL_ENDPOINTS; EPNum++) { Endpoint_SelectEndpoint(EPNum); UECFG0XTemp[EPNum] = UECFG0X; UECFG1XTemp[EPNum] = UECFG1X; + UEIENXTemp[EPNum] = UEIENX; } UECFG0XTemp[Number] = UECFG0XData; UECFG1XTemp[Number] = UECFG1XData; + UEIENXTemp[Number] = 0; for (uint8_t EPNum = 1; EPNum < ENDPOINT_TOTAL_ENDPOINTS; EPNum++) { @@ -75,6 +88,7 @@ bool Endpoint_ConfigureEndpoint_Prv(const uint8_t Number, UECFG0X = UECFG0XTemp[EPNum]; UECFG1X = UECFG1XTemp[EPNum]; + UEIENX = UEIENXTemp[EPNum]; if (!(Endpoint_IsConfigured())) return false; @@ -82,6 +96,7 @@ bool Endpoint_ConfigureEndpoint_Prv(const uint8_t Number, Endpoint_SelectEndpoint(Number); return true; +#endif } void Endpoint_ClearEndpoints(void) @@ -131,6 +146,8 @@ uint8_t Endpoint_WaitUntilReady(void) uint16_t TimeoutMSRem = USB_STREAM_TIMEOUT_MS; #endif + uint16_t PreviousFrameNumber = USB_Device_GetFrameNumber(); + for (;;) { if (Endpoint_GetEndpointDirection() == ENDPOINT_DIR_IN) @@ -150,10 +167,12 @@ uint8_t Endpoint_WaitUntilReady(void) return ENDPOINT_READYWAIT_BusSuspended; else if (Endpoint_IsStalled()) return ENDPOINT_READYWAIT_EndpointStalled; - - if (USB_INT_HasOccurred(USB_INT_SOFI)) + + uint16_t CurrentFrameNumber = USB_Device_GetFrameNumber(); + + if (CurrentFrameNumber != PreviousFrameNumber) { - USB_INT_Clear(USB_INT_SOFI); + PreviousFrameNumber = CurrentFrameNumber; if (!(TimeoutMSRem--)) return ENDPOINT_READYWAIT_Timeout;