Fixed possible device lockup when INTERRUPT_CONTROL_ENDPOINT is enabled and the contr...
authorDean Camera <dean@fourwalledcubicle.com>
Thu, 13 May 2010 07:43:18 +0000 (07:43 +0000)
committerDean Camera <dean@fourwalledcubicle.com>
Thu, 13 May 2010 07:43:18 +0000 (07:43 +0000)
LUFA/Drivers/USB/LowLevel/USBInterrupt.c
LUFA/Drivers/USB/LowLevel/USBInterrupt.h
LUFA/ManPages/ChangeLog.txt

index 43df5f6..1c6d6ca 100644 (file)
@@ -237,10 +237,13 @@ ISR(USB_COM_vect, ISR_BLOCK)
 
        Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP);
        USB_INT_Disable(USB_INT_RXSTPI);
-       sei();
 
-       USB_USBTask();
+       NONATOMIC_BLOCK(NONATOMIC_FORCEOFF)
+       {
+               USB_Device_ProcessControlRequest();
+       }
 
+       Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP);
        USB_INT_Enable(USB_INT_RXSTPI);
        Endpoint_SelectEndpoint(PrevSelectedEndpoint);
 }
index a191a29..6f8bf7c 100644 (file)
@@ -44,6 +44,7 @@
        /* Includes: */
                #include <avr/io.h>
                #include <avr/interrupt.h>
+               #include <util/atomic.h>
                #include <stdbool.h>
                
                #include "../../../Common/Common.h"
index 16925c0..09a168d 100644 (file)
@@ -15,6 +15,8 @@
   *    LIBUSB_DRIVER_COMPAT, as it applies to all software on all platforms using the libUSB driver
   *
   *  <b>Fixed:</b>
+  *  - Fixed possible device lockup when INTERRUPT_CONTROL_ENDPOINT is enabled and the control endpoint is not properly
+  *    selected when the ISR completes
   *
   *  \section Sec_ChangeLog100512 Version 100512
   *