Added PRNT_Host_SendByte() and PRNT_Host_Flush() functions to the Host mode Printer...
[pub/USBasp.git] / LUFA / Drivers / USB / LowLevel / Endpoint.c
index 4b2d1c0..d4f10db 100644 (file)
@@ -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];
 #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;
        
        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;
        }
        
        UECFG0XTemp[Number] = UECFG0XData;
        UECFG1XTemp[Number] = UECFG1XData;
+       UEIENXTemp[Number]  = 0;
        
        for (uint8_t EPNum = 1; EPNum < ENDPOINT_TOTAL_ENDPOINTS; EPNum++)
        {
        
        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];
 
                UECFG0X = UECFG0XTemp[EPNum];
                UECFG1X = UECFG1XTemp[EPNum];
+               UEIENX  = UEIENXTemp[EPNum];
                
                if (!(Endpoint_IsConfigured()))
                  return false;
                
                if (!(Endpoint_IsConfigured()))
                  return false;
@@ -142,6 +146,8 @@ uint8_t Endpoint_WaitUntilReady(void)
        uint16_t TimeoutMSRem = USB_STREAM_TIMEOUT_MS;
        #endif
 
        uint16_t TimeoutMSRem = USB_STREAM_TIMEOUT_MS;
        #endif
 
+       uint16_t PreviousFrameNumber = USB_Device_GetFrameNumber();
+
        for (;;)
        {
                if (Endpoint_GetEndpointDirection() == ENDPOINT_DIR_IN)
        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;
                  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;
 
                        if (!(TimeoutMSRem--))
                          return ENDPOINT_READYWAIT_Timeout;