Fix board name redefinition in BoardTypes.h (thanks to Daniel Czigany).
[pub/USBasp.git] / LUFA / Drivers / USB / LowLevel / Host.c
index 37ad0ad..2b66e28 100644 (file)
@@ -144,10 +144,6 @@ void USB_Host_ProcessNextHostState(void)
                        HOST_TASK_NONBLOCK_WAIT(200, HOST_STATE_Default_PostReset);
                        break;
                case HOST_STATE_Default_PostReset:
-                       Pipe_DisablePipe();
-                       Pipe_DeallocateMemory();                
-                       Pipe_ResetPipe(PIPE_CONTROLPIPE);
-                       
                        Pipe_ConfigurePipe(PIPE_CONTROLPIPE, EP_TYPE_CONTROL,
                                           PIPE_TOKEN_SETUP, ENDPOINT_CONTROLEP,
                                           USB_ControlPipeSize, PIPE_BANK_SINGLE);
@@ -198,16 +194,19 @@ void USB_Host_ProcessNextHostState(void)
 
 uint8_t USB_Host_WaitMS(uint8_t MS)
 {
-       bool    BusSuspended = USB_Host_IsBusSuspended();
-       uint8_t ErrorCode    = HOST_WAITERROR_Successful;
+       bool     BusSuspended        = USB_Host_IsBusSuspended();
+       uint8_t  ErrorCode           = HOST_WAITERROR_Successful;
+       uint16_t PreviousFrameNumber = USB_Host_GetFrameNumber();
        
        USB_Host_ResumeBus();
 
        while (MS)
        {
-               if (USB_INT_HasOccurred(USB_INT_HSOFI))
+               uint16_t CurrentFrameNumber = USB_Host_GetFrameNumber();
+
+               if (CurrentFrameNumber != PreviousFrameNumber)
                {
-                       USB_INT_Clear(USB_INT_HSOFI);
+                       PreviousFrameNumber = CurrentFrameNumber;
                        MS--;
                }
                                        
@@ -249,11 +248,13 @@ static void USB_Host_ResetDevice(void)
        
        USB_Host_ResetBus();
        while (!(USB_Host_IsBusResetComplete()));
-
        USB_Host_ResumeBus();
 
-       USB_INT_Clear(USB_INT_HSOFI);
+       bool HSOFIEnabled = USB_INT_IsEnabled(USB_INT_HSOFI);
 
+       USB_INT_Disable(USB_INT_HSOFI);
+       USB_INT_Clear(USB_INT_HSOFI);
+       
        for (uint8_t MSRem = 10; MSRem != 0; MSRem--)
        {
                /* Workaround for powerless-pull-up devices. After a USB bus reset,
@@ -271,6 +272,9 @@ static void USB_Host_ResetDevice(void)
                _delay_ms(1);
        }
 
+       if (HSOFIEnabled)
+         USB_INT_Enable(USB_INT_HSOFI);
+
        if (BusSuspended)
          USB_Host_SuspendBus();
 
@@ -309,7 +313,9 @@ uint8_t USB_Host_GetDeviceDescriptor(void* const DeviceDescriptorPtr)
        return USB_Host_SendControlRequest(DeviceDescriptorPtr);
 }
 
-uint8_t USB_Host_GetDeviceStringDescriptor(const uint8_t Index, void* const Buffer, const uint8_t BufferLength)
+uint8_t USB_Host_GetDeviceStringDescriptor(const uint8_t Index,
+                                           void* const Buffer,
+                                           const uint8_t BufferLength)
 {
        USB_ControlRequest = (USB_Request_Header_t)
                {