Remove incomplete MIDIToneGenerator project.
[pub/USBasp.git] / LUFA / Drivers / USB / LowLevel / Pipe.c
index a8eb50f..748ed0b 100644 (file)
@@ -46,16 +46,28 @@ bool Pipe_ConfigurePipe(const uint8_t Number,
 {
        uint8_t UPCFG0XTemp[PIPE_TOTAL_PIPES];
        uint8_t UPCFG1XTemp[PIPE_TOTAL_PIPES];
 {
        uint8_t UPCFG0XTemp[PIPE_TOTAL_PIPES];
        uint8_t UPCFG1XTemp[PIPE_TOTAL_PIPES];
+       uint8_t UPCFG2XTemp[PIPE_TOTAL_PIPES];
+       uint8_t UPCONXTemp[PIPE_TOTAL_PIPES];
+       uint8_t UPINRQXTemp[PIPE_TOTAL_PIPES];
+       uint8_t UPIENXTemp[PIPE_TOTAL_PIPES];
        
        for (uint8_t PNum = 0; PNum < PIPE_TOTAL_PIPES; PNum++)
        {
                Pipe_SelectPipe(PNum);
                UPCFG0XTemp[PNum] = UPCFG0X;
                UPCFG1XTemp[PNum] = UPCFG1X;
        
        for (uint8_t PNum = 0; PNum < PIPE_TOTAL_PIPES; PNum++)
        {
                Pipe_SelectPipe(PNum);
                UPCFG0XTemp[PNum] = UPCFG0X;
                UPCFG1XTemp[PNum] = UPCFG1X;
+               UPCFG2XTemp[PNum] = UPCFG2X;
+               UPCONXTemp[PNum]  = UPCONX;
+               UPINRQXTemp[PNum] = UPINRQX;
+               UPIENXTemp[PNum]  = UPIENX;
        }
        
        UPCFG0XTemp[Number] = ((Type << EPTYPE0) | Token | ((EndpointNumber & PIPE_EPNUM_MASK) << PEPNUM0));
        UPCFG1XTemp[Number] = ((1 << ALLOC) | Banks | Pipe_BytesToEPSizeMask(Size));
        }
        
        UPCFG0XTemp[Number] = ((Type << EPTYPE0) | Token | ((EndpointNumber & PIPE_EPNUM_MASK) << PEPNUM0));
        UPCFG1XTemp[Number] = ((1 << ALLOC) | Banks | Pipe_BytesToEPSizeMask(Size));
+       UPCFG2XTemp[Number] = 0;
+       UPCONXTemp[Number]  = (1 << INMODE);
+       UPINRQXTemp[Number] = 0;
+       UPIENXTemp[Number]  = 0;
        
        for (uint8_t PNum = 0; PNum < PIPE_TOTAL_PIPES; PNum++)
        {
        
        for (uint8_t PNum = 0; PNum < PIPE_TOTAL_PIPES; PNum++)
        {
@@ -74,16 +86,18 @@ bool Pipe_ConfigurePipe(const uint8_t Number,
                Pipe_SelectPipe(PNum);          
                Pipe_EnablePipe();
 
                Pipe_SelectPipe(PNum);          
                Pipe_EnablePipe();
 
-               UPCFG0X = UPCFG0XTemp[PNum];
-               UPCFG1X = UPCFG1XTemp[PNum];
-               
+               UPCFG0X  = UPCFG0XTemp[PNum];
+               UPCFG1X  = UPCFG1XTemp[PNum];
+               UPCFG2X  = UPCFG2XTemp[PNum];
+               UPCONX  |= UPCONXTemp[PNum];
+               UPINRQX  = UPINRQXTemp[PNum];
+               UPIENX   = UPIENXTemp[PNum];
+
                if (!(Pipe_IsConfigured()))
                  return false;
        }
                if (!(Pipe_IsConfigured()))
                  return false;
        }
-       
-       Pipe_SelectPipe(Number);
-       Pipe_SetInfiniteINRequests();
-       
+               
+       Pipe_SelectPipe(Number);        
        return true;
 }
 
        return true;
 }
 
@@ -133,6 +147,8 @@ uint8_t Pipe_WaitUntilReady(void)
        #else
        uint16_t TimeoutMSRem = USB_STREAM_TIMEOUT_MS;
        #endif
        #else
        uint16_t TimeoutMSRem = USB_STREAM_TIMEOUT_MS;
        #endif
+
+       uint16_t PreviousFrameNumber = USB_Host_GetFrameNumber();
        
        for (;;)
        {
        
        for (;;)
        {
@@ -151,10 +167,12 @@ uint8_t Pipe_WaitUntilReady(void)
                  return PIPE_READYWAIT_PipeStalled;
                else if (USB_HostState == HOST_STATE_Unattached)
                  return PIPE_READYWAIT_DeviceDisconnected;
                  return PIPE_READYWAIT_PipeStalled;
                else if (USB_HostState == HOST_STATE_Unattached)
                  return PIPE_READYWAIT_DeviceDisconnected;
-                         
-               if (USB_INT_HasOccurred(USB_INT_HSOFI))
+
+               uint16_t CurrentFrameNumber = USB_Host_GetFrameNumber();
+
+               if (CurrentFrameNumber != PreviousFrameNumber)
                {
                {
-                       USB_INT_Clear(USB_INT_HSOFI);
+                       PreviousFrameNumber = CurrentFrameNumber;
 
                        if (!(TimeoutMSRem--))
                          return PIPE_READYWAIT_Timeout;
 
                        if (!(TimeoutMSRem--))
                          return PIPE_READYWAIT_Timeout;