Fixed broken AVR32 endpoint/pipe communications when ORDERED_EP_CONFIG compile time...
authorDean Camera <dean@fourwalledcubicle.com>
Tue, 22 Nov 2011 08:06:52 +0000 (08:06 +0000)
committerDean Camera <dean@fourwalledcubicle.com>
Tue, 22 Nov 2011 08:06:52 +0000 (08:06 +0000)
Fixed broken compilation for the AVR32 devices if the NO_SOF_EVENTS compile time option was not enabled (thanks to Matthias).

LUFA/DoxygenPages/ChangeLog.txt
LUFA/Drivers/USB/Core/UC3/Endpoint_UC3.c
LUFA/Drivers/USB/Core/UC3/Pipe_UC3.c
LUFA/Drivers/USB/Core/UC3/USBInterrupt_UC3.h

index 00aa13f..7737d9c 100644 (file)
@@ -9,8 +9,8 @@
   *  \section Sec_ChangeLogXXXXXX Version XXXXXX
   *  <b>New:</b>
   *  - Core:
   *  \section Sec_ChangeLogXXXXXX Version XXXXXX
   *  <b>New:</b>
   *  - Core:
-  *   - Added support for the XMEGA A3BU Xplained board.
-  *   - Added support for the new B series XMEGA devices.
+  *   - Added support for the XMEGA A3BU Xplained board
+  *   - Added support for the new B series XMEGA devices
   *  - Library Applications:
   *   - Added User Application APIs to the CDC and DFU class bootloaders
   *   - Added INVERTED_ISP_MISO compile time option to the AVRISP-MKII clone project (thanks to Chuck Rohs)
   *  - Library Applications:
   *   - Added User Application APIs to the CDC and DFU class bootloaders
   *   - Added INVERTED_ISP_MISO compile time option to the AVRISP-MKII clone project (thanks to Chuck Rohs)
@@ -29,6 +29,8 @@
   *   - Fixed CDC class drivers not saving and sending all 16-bits of the control line states (thanks to Matthew Swabey)
   *   - Fixed race conditions in the CDC, HID and Mass Storage class drivers when processing some control requests
   *   - Fixed misspelled HID_KEYBOARD_MODIFIER_* macros in the HID class driver (thanks to Laszlo Monda)
   *   - Fixed CDC class drivers not saving and sending all 16-bits of the control line states (thanks to Matthew Swabey)
   *   - Fixed race conditions in the CDC, HID and Mass Storage class drivers when processing some control requests
   *   - Fixed misspelled HID_KEYBOARD_MODIFIER_* macros in the HID class driver (thanks to Laszlo Monda)
+  *   - Fixed broken AVR32 endpoint/pipe communications when ORDERED_EP_CONFIG compile time option is not enabled (thanks to Matthias)
+  *   - Fixed broken compilation for the AVR32 devices if the NO_SOF_EVENTS compile time option was not enabled (thanks to Matthias)
   *  - Library Applications:
   *   - Added reliability patches to the AVRISP-MKII Clone project's PDI/TPI protocols (thanks to Justin Mattair)
   *   - Fixed AVRISP-MKII Clone compile warning on AVR8 U4 targets even when NO_VTARGET_DETECT is enabled
   *  - Library Applications:
   *   - Added reliability patches to the AVRISP-MKII Clone project's PDI/TPI protocols (thanks to Justin Mattair)
   *   - Fixed AVRISP-MKII Clone compile warning on AVR8 U4 targets even when NO_VTARGET_DETECT is enabled
index 7cd7ccf..c8e3af7 100644 (file)
@@ -45,19 +45,20 @@ volatile uint8_t* USB_Endpoint_FIFOPos[ENDPOINT_TOTAL_ENDPOINTS];
 bool Endpoint_ConfigureEndpoint_Prv(const uint8_t Number,
                                     const uint32_t UECFG0Data)
 {
 bool Endpoint_ConfigureEndpoint_Prv(const uint8_t Number,
                                     const uint32_t UECFG0Data)
 {
+       USB_Endpoint_FIFOPos[Number] = &AVR32_USBB_SLAVE[Number * 0x10000];
+
 #if defined(CONTROL_ONLY_DEVICE) || defined(ORDERED_EP_CONFIG)
        Endpoint_SelectEndpoint(Number);
        Endpoint_EnableEndpoint();
 
        (&AVR32_USBB.uecfg0)[Number] = 0;
        (&AVR32_USBB.uecfg0)[Number] = UECFG0Data;
 #if defined(CONTROL_ONLY_DEVICE) || defined(ORDERED_EP_CONFIG)
        Endpoint_SelectEndpoint(Number);
        Endpoint_EnableEndpoint();
 
        (&AVR32_USBB.uecfg0)[Number] = 0;
        (&AVR32_USBB.uecfg0)[Number] = UECFG0Data;
-       USB_EndpointFIFOPos[Number]  = &AVR32_USBB_SLAVE[Number * 0x10000];
 
        return Endpoint_IsConfigured();
 #else
        for (uint8_t EPNum = Number; EPNum < ENDPOINT_TOTAL_ENDPOINTS; EPNum++)
        {
 
        return Endpoint_IsConfigured();
 #else
        for (uint8_t EPNum = Number; EPNum < ENDPOINT_TOTAL_ENDPOINTS; EPNum++)
        {
-               uint8_t UECFG0Temp;
+               uint32_t UECFG0Temp;
 
                Endpoint_SelectEndpoint(EPNum);
                
 
                Endpoint_SelectEndpoint(EPNum);
                
@@ -95,7 +96,7 @@ void Endpoint_ClearEndpoints(void)
                Endpoint_SelectEndpoint(EPNum);
                (&AVR32_USBB.uecfg0)[EPNum]    = 0;
                (&AVR32_USBB.uecon0clr)[EPNum] = -1;
                Endpoint_SelectEndpoint(EPNum);
                (&AVR32_USBB.uecfg0)[EPNum]    = 0;
                (&AVR32_USBB.uecon0clr)[EPNum] = -1;
-               USB_EndpointFIFOPos[EPNum]     = &AVR32_USBB_SLAVE[EPNum * 0x10000];
+               USB_Endpoint_FIFOPos[EPNum]    = &AVR32_USBB_SLAVE[EPNum * 0x10000];
                Endpoint_DisableEndpoint();
        }
 }
                Endpoint_DisableEndpoint();
        }
 }
index 5c9a44f..eca6cb8 100644 (file)
@@ -47,6 +47,8 @@ bool Pipe_ConfigurePipe(const uint8_t Number,
                         const uint16_t Size,
                         const uint8_t Banks)
 {
                         const uint16_t Size,
                         const uint8_t Banks)
 {
+       USB_Pipe_FIFOPos[Number]     = &AVR32_USBB_SLAVE[Number * 0x10000];
+
 #if defined(ORDERED_EP_CONFIG)
        Pipe_SelectPipe(Number);
        Pipe_EnablePipe();
 #if defined(ORDERED_EP_CONFIG)
        Pipe_SelectPipe(Number);
        Pipe_EnablePipe();
@@ -57,7 +59,6 @@ bool Pipe_ConfigurePipe(const uint8_t Number,
                                        ((uint32_t)Token << AVR32_USBB_PTOKEN_OFFSET) |
                                        ((uint32_t)Banks << AVR32_USBB_PBK_OFFSET)    |
                                        ((EndpointNumber & PIPE_EPNUM_MASK) << AVR32_USBB_PEPNUM_OFFSET));
                                        ((uint32_t)Token << AVR32_USBB_PTOKEN_OFFSET) |
                                        ((uint32_t)Banks << AVR32_USBB_PBK_OFFSET)    |
                                        ((EndpointNumber & PIPE_EPNUM_MASK) << AVR32_USBB_PEPNUM_OFFSET));
-       USB_PipeFIFOPos[Number]      = &AVR32_USBB_SLAVE[Number * 0x10000];
 
        Pipe_SetInfiniteINRequests();
 
 
        Pipe_SetInfiniteINRequests();
 
@@ -65,7 +66,7 @@ bool Pipe_ConfigurePipe(const uint8_t Number,
 #else
        for (uint8_t PNum = Number; PNum < PIPE_TOTAL_PIPES; PNum++)
        {
 #else
        for (uint8_t PNum = Number; PNum < PIPE_TOTAL_PIPES; PNum++)
        {
-               uint8_t UPCFG0Temp;
+               uint32_t UPCFG0Temp;
 
                Pipe_SelectPipe(PNum);
                
 
                Pipe_SelectPipe(PNum);
                
@@ -109,7 +110,7 @@ void Pipe_ClearPipes(void)
                Pipe_SelectPipe(PNum);
                (&AVR32_USBB.upcfg0)[PNum]    = 0;
                (&AVR32_USBB.upcon0clr)[PNum] = -1;
                Pipe_SelectPipe(PNum);
                (&AVR32_USBB.upcfg0)[PNum]    = 0;
                (&AVR32_USBB.upcon0clr)[PNum] = -1;
-               USB_PipeFIFOPos[PNum]         = &AVR32_USBB_SLAVE[PNum * 0x10000];
+               USB_Pipe_FIFOPos[PNum]        = &AVR32_USBB_SLAVE[PNum * 0x10000];
                Pipe_DisablePipe();
        }
 }
                Pipe_DisablePipe();
        }
 }
index 28dbabb..c4276d9 100644 (file)
@@ -43,7 +43,6 @@
 
        /* Includes: */
                #include "../../../../Common/Common.h"
 
        /* Includes: */
                #include "../../../../Common/Common.h"
-               #include "../Endpoint.h"
 
        /* Enable C linkage for C++ Compilers: */
                #if defined(__cplusplus)
 
        /* Enable C linkage for C++ Compilers: */
                #if defined(__cplusplus)
                #endif
 
        /* Private Interface - For use in library only: */
                #endif
 
        /* Private Interface - For use in library only: */
-       #if !defined(__DOXYGEN__)               
+       #if !defined(__DOXYGEN__)
+               /* External Variables: */
+                       extern volatile uint32_t USB_Endpoint_SelectedEndpoint;
+       
                /* Enums: */
                        enum USB_Interrupts_t
                        {
                /* Enums: */
                        enum USB_Interrupts_t
                        {
                                                AVR32_USBB.UDINTESET.sofes    = true;
                                                break;
                                        case USB_INT_RXSTPI:
                                                AVR32_USBB.UDINTESET.sofes    = true;
                                                break;
                                        case USB_INT_RXSTPI:
-                                               (&AVR32_USBB.UECON0SET)[USB_SelectedEndpoint].rxstpes = true;
+                                               (&AVR32_USBB.UECON0SET)[USB_Endpoint_SelectedEndpoint].rxstpes = true;
                                                break;
                                        #endif
                                        #if defined(USB_CAN_BE_HOST)
                                                break;
                                        #endif
                                        #if defined(USB_CAN_BE_HOST)
                                                AVR32_USBB.UDINTECLR.sofec    = true;
                                                break;
                                        case USB_INT_RXSTPI:
                                                AVR32_USBB.UDINTECLR.sofec    = true;
                                                break;
                                        case USB_INT_RXSTPI:
-                                               (&AVR32_USBB.UECON0CLR)[USB_SelectedEndpoint].rxstpec = true;
+                                               (&AVR32_USBB.UECON0CLR)[USB_Endpoint_SelectedEndpoint].rxstpec = true;
                                                break;
                                        #endif
                                        #if defined(USB_CAN_BE_HOST)
                                                break;
                                        #endif
                                        #if defined(USB_CAN_BE_HOST)
                                                (void)AVR32_USBB.UDINTCLR;
                                                break;
                                        case USB_INT_RXSTPI:
                                                (void)AVR32_USBB.UDINTCLR;
                                                break;
                                        case USB_INT_RXSTPI:
-                                               (&AVR32_USBB.UESTA0CLR)[USB_SelectedEndpoint].rxstpic = true;
+                                               (&AVR32_USBB.UESTA0CLR)[USB_Endpoint_SelectedEndpoint].rxstpic = true;
                                                break;
                                        #endif
                                        #if defined(USB_CAN_BE_HOST)
                                                break;
                                        #endif
                                        #if defined(USB_CAN_BE_HOST)
                                        case USB_INT_SOFI:
                                                return AVR32_USBB.UDINTE.sofe;
                                        case USB_INT_RXSTPI:
                                        case USB_INT_SOFI:
                                                return AVR32_USBB.UDINTE.sofe;
                                        case USB_INT_RXSTPI:
-                                               return (&AVR32_USBB.UECON0)[USB_SelectedEndpoint].rxstpe;
+                                               return (&AVR32_USBB.UECON0)[USB_Endpoint_SelectedEndpoint].rxstpe;
                                        #endif
                                        #if defined(USB_CAN_BE_HOST)                                    
                                        case USB_INT_HSOFI:
                                        #endif
                                        #if defined(USB_CAN_BE_HOST)                                    
                                        case USB_INT_HSOFI:
                                        case USB_INT_SOFI:
                                                return AVR32_USBB.UDINT.sof;
                                        case USB_INT_RXSTPI:
                                        case USB_INT_SOFI:
                                                return AVR32_USBB.UDINT.sof;
                                        case USB_INT_RXSTPI:
-                                               return (&AVR32_USBB.UESTA0)[USB_SelectedEndpoint].rxstpi;
+                                               return (&AVR32_USBB.UESTA0)[USB_Endpoint_SelectedEndpoint].rxstpi;
                                        #endif
                                        #if defined(USB_CAN_BE_HOST)
                                        case USB_INT_HSOFI:
                                        #endif
                                        #if defined(USB_CAN_BE_HOST)
                                        case USB_INT_HSOFI: