Added PRNT_Host_SendByte() and PRNT_Host_Flush() functions to the Host mode Printer...
[pub/USBasp.git] / LUFA / Drivers / USB / LowLevel / Endpoint.c
index 742e618..d4f10db 100644 (file)
@@ -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;