X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/f6e1eaba7548bce84ae25718d7c37479c4bb0065..12fb68ea1fd3b87c748de5d22c816a086b41cff9:/LUFA/Drivers/USB/LowLevel/Endpoint.c diff --git a/LUFA/Drivers/USB/LowLevel/Endpoint.c b/LUFA/Drivers/USB/LowLevel/Endpoint.c index 4b2d1c059..d4f10db04 100644 --- a/LUFA/Drivers/USB/LowLevel/Endpoint.c +++ b/LUFA/Drivers/USB/LowLevel/Endpoint.c @@ -55,16 +55,19 @@ bool Endpoint_ConfigureEndpoint_Prv(const uint8_t Number, #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++) { @@ -85,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; @@ -142,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) @@ -161,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;