X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/e72f424f6450cf67d3ef57d347a4f8d86ec5a119..7166c7ba3e27f3458b83360302c8af8a866f7a34:/LUFA/Drivers/USB/LowLevel/Endpoint.c diff --git a/LUFA/Drivers/USB/LowLevel/Endpoint.c b/LUFA/Drivers/USB/LowLevel/Endpoint.c index 742e61860..fc54e115a 100644 --- a/LUFA/Drivers/USB/LowLevel/Endpoint.c +++ b/LUFA/Drivers/USB/LowLevel/Endpoint.c @@ -43,45 +43,14 @@ bool Endpoint_ConfigureEndpoint_Prv(const uint8_t Number, const uint8_t UECFG0XData, const uint8_t UECFG1XData) { - uint8_t UECFG0XTemp[ENDPOINT_TOTAL_ENDPOINTS]; - uint8_t UECFG1XTemp[ENDPOINT_TOTAL_ENDPOINTS]; - - for (uint8_t EPNum = 0; EPNum < ENDPOINT_TOTAL_ENDPOINTS; EPNum++) - { - Endpoint_SelectEndpoint(EPNum); - UECFG0XTemp[EPNum] = UECFG0X; - UECFG1XTemp[EPNum] = UECFG1X; - } - - UECFG0XTemp[Number] = UECFG0XData; - UECFG1XTemp[Number] = UECFG1XData; - - for (uint8_t EPNum = 1; EPNum < ENDPOINT_TOTAL_ENDPOINTS; EPNum++) - { - Endpoint_SelectEndpoint(EPNum); - UEIENX = 0; - UEINTX = 0; - UECFG1X = 0; - Endpoint_DisableEndpoint(); - } + Endpoint_SelectEndpoint(Number); + Endpoint_EnableEndpoint(); - for (uint8_t EPNum = 0; EPNum < ENDPOINT_TOTAL_ENDPOINTS; EPNum++) - { - if (!(UECFG1XTemp[EPNum] & (1 << ALLOC))) - continue; - - Endpoint_SelectEndpoint(EPNum); - Endpoint_EnableEndpoint(); + UECFG1X = 0; + UECFG0X = UECFG0XData; + UECFG1X = UECFG1XData; - UECFG0X = UECFG0XTemp[EPNum]; - UECFG1X = UECFG1XTemp[EPNum]; - - if (!(Endpoint_IsConfigured())) - return false; - } - - Endpoint_SelectEndpoint(Number); - return true; + return Endpoint_IsConfigured(); } void Endpoint_ClearEndpoints(void) @@ -131,6 +100,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 +121,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;