From c5eeedd522c12c8b4996594f3c4167393d0af7ff Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Sun, 2 Aug 2009 11:33:00 +0000 Subject: [PATCH] Removed interrupt disable/enable from the Device mode control request processing routines, as they can cause problems with user code and can cause infinite spinlocks under some circumstances. Added new LUFA logo from EDIGMA.COM. --- LUFA/Drivers/USB/HighLevel/USBInterrupt.c | 2 +- LUFA/Drivers/USB/HighLevel/USBTask.c | 7 +------ LUFA/Drivers/USB/HighLevel/USBTask.h | 1 - LUFA/ManPages/ChangeLog.txt | 1 + LUFA/ManPages/LUFA.gif | Bin 5474 -> 6425 bytes LUFA/ManPages/MainPage.txt | 4 ++-- 6 files changed, 5 insertions(+), 10 deletions(-) diff --git a/LUFA/Drivers/USB/HighLevel/USBInterrupt.c b/LUFA/Drivers/USB/HighLevel/USBInterrupt.c index f0a59edb7..51a761ae7 100644 --- a/LUFA/Drivers/USB/HighLevel/USBInterrupt.c +++ b/LUFA/Drivers/USB/HighLevel/USBInterrupt.c @@ -252,7 +252,7 @@ ISR(USB_GEN_vect, ISR_BLOCK) } #if defined(INTERRUPT_CONTROL_ENDPOINT) -ISR(USB_COM_vect, ISR_BLOCK) +ISR(USB_COM_vect, ISR_NOBLOCK) { uint8_t PrevSelectedEndpoint = Endpoint_GetCurrentEndpoint(); diff --git a/LUFA/Drivers/USB/HighLevel/USBTask.c b/LUFA/Drivers/USB/HighLevel/USBTask.c index 5c7045792..c02a38bf6 100644 --- a/LUFA/Drivers/USB/HighLevel/USBTask.c +++ b/LUFA/Drivers/USB/HighLevel/USBTask.c @@ -68,12 +68,7 @@ static void USB_DeviceTask(void) Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP); if (Endpoint_IsSETUPReceived()) - { - ATOMIC_BLOCK(ATOMIC_RESTORESTATE) - { - USB_Device_ProcessControlPacket(); - } - } + USB_Device_ProcessControlPacket(); Endpoint_SelectEndpoint(PrevEndpoint); } diff --git a/LUFA/Drivers/USB/HighLevel/USBTask.h b/LUFA/Drivers/USB/HighLevel/USBTask.h index 960131563..9138e687f 100644 --- a/LUFA/Drivers/USB/HighLevel/USBTask.h +++ b/LUFA/Drivers/USB/HighLevel/USBTask.h @@ -34,7 +34,6 @@ /* Includes: */ #include #include - #include #include #include diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt index 7adb95fe0..abda442a3 100644 --- a/LUFA/ManPages/ChangeLog.txt +++ b/LUFA/ManPages/ChangeLog.txt @@ -56,6 +56,7 @@ * from oneanother using foreground colours * - Internal per-device preprocessing conditions changed to per-device series rather than per-controller group for finer-grain * internal control + * - Interrupts are no longer disabled during the processing of Control Requests on the default endpoint while in device mode * * Fixed: * - Changed bootloaders to use FLASHEND rather than the existence of RAMPZ to determine if far FLASH pointers are needed to fix diff --git a/LUFA/ManPages/LUFA.gif b/LUFA/ManPages/LUFA.gif index 885f5b00053263c9e4e28956a2eb0c8e4983a586..7a6aef2148799b37ada69b306bde7e5e71736a4b 100644 GIT binary patch literal 6425 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 literal 5474 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 design by Pavla Dlab + * Logo design by EDIGMA.COM */