Add double banking property to LUFA powered projects in the Projects directory. Add...
authorDean Camera <dean@fourwalledcubicle.com>
Fri, 6 Nov 2009 14:32:01 +0000 (14:32 +0000)
committerDean Camera <dean@fourwalledcubicle.com>
Fri, 6 Nov 2009 14:32:01 +0000 (14:32 +0000)
13 files changed:
Demos/Host/ClassDriver/CDCHost/CDCHost.c
LUFA/Drivers/Peripheral/Serial.h
LUFA/Drivers/USB/Class/Device/HID.c
LUFA/Drivers/USB/Class/Host/CDC.c
LUFA/Drivers/USB/HighLevel/ConfigDescriptor.h
LUFA/Drivers/USB/LowLevel/Endpoint.h
LUFA/Drivers/USB/LowLevel/Host.h
LUFA/Drivers/USB/LowLevel/OTG.h
LUFA/Drivers/USB/LowLevel/Pipe.h
Projects/AVRISP/AVRISP.c
Projects/Benito/Benito.c
Projects/Magstripe/Magstripe.c
Projects/USBtoSerial/USBtoSerial.c

index 99c0c81..ded3e4c 100644 (file)
@@ -44,9 +44,14 @@ USB_ClassInfo_CDC_Host_t VirtualSerial_CDC_Interface =
        {\r
                .Config =\r
                        {\r
-                               .DataINPipeNumber       = 1,\r
-                               .DataOUTPipeNumber      = 2,\r
-                               .NotificationPipeNumber = 3,\r
+                               .DataINPipeNumber           = 1,\r
+                               .DataINPipeDoubleBank       = false,\r
+\r
+                               .DataOUTPipeNumber          = 2,\r
+                               .DataOUTPipeDoubleBank      = false,\r
+\r
+                               .NotificationPipeNumber     = 3,\r
+                               .NotificationPipeDoubleBank = false,\r
                        },\r
        };\r
 \r
index bde1449..4009331 100644 (file)
                        /** Macro for calculating the baud value from a given baud rate when the U2X (double speed) bit is\r
                         *  not set.\r
                         */\r
-                       #define SERIAL_UBBRVAL(baud)    (((F_CPU / 16) / baud) - 1)\r
+                       #define SERIAL_UBBRVAL(baud)    (((F_CPU / 16) / (baud)) - 1)\r
 \r
                        /** Macro for calculating the baud value from a given baud rate when the U2X (double speed) bit is\r
                         *  set.\r
                         */\r
-                       #define SERIAL_2X_UBBRVAL(baud) (((F_CPU / 8) / baud) - 1)\r
+                       #define SERIAL_2X_UBBRVAL(baud) (((F_CPU / 8) / (baud)) - 1)\r
 \r
                /* Pseudo-Function Macros: */\r
                        #if defined(__DOXYGEN__)\r
index 0bf1f70..a9f1c9c 100644 (file)
@@ -95,7 +95,7 @@ void HID_Device_ProcessControlRequest(USB_ClassInfo_HID_Device_t* const HIDInter
                        {\r
                                Endpoint_ClearSETUP();\r
 \r
-                               HIDInterfaceInfo->State.UsingReportProtocol = (USB_ControlRequest.wValue != 0x0000);\r
+                               HIDInterfaceInfo->State.UsingReportProtocol = ((USB_ControlRequest.wValue & 0xFF) != 0x00);\r
                                \r
                                Endpoint_ClearStatusStage();\r
                        }\r
index 88d4156..aac0931 100644 (file)
@@ -97,7 +97,8 @@ uint8_t CDC_Host_ConfigurePipes(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo
                        if (EndpointData->EndpointAddress & ENDPOINT_DESCRIPTOR_DIR_IN)\r
                        {                                                          \r
                                Pipe_ConfigurePipe(CDCInterfaceInfo->Config.NotificationPipeNumber, EP_TYPE_INTERRUPT, PIPE_TOKEN_IN,\r
-                                                                  EndpointData->EndpointAddress, EndpointData->EndpointSize, PIPE_BANK_SINGLE);\r
+                                                                  EndpointData->EndpointAddress, EndpointData->EndpointSize,\r
+                                                                  CDCInterfaceInfo->Config.NotificationPipeDoubleBank ? PIPE_BANK_DOUBLE : PIPE_BANK_SINGLE);\r
                                CDCInterfaceInfo->State.NotificationPipeSize = EndpointData->EndpointSize;\r
 \r
                                Pipe_SetInterruptPeriod(EndpointData->PollingIntervalMS);\r
@@ -110,7 +111,8 @@ uint8_t CDC_Host_ConfigurePipes(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo
                        if (EndpointData->EndpointAddress & ENDPOINT_DESCRIPTOR_DIR_IN)\r
                        {\r
                                Pipe_ConfigurePipe(CDCInterfaceInfo->Config.DataINPipeNumber, EP_TYPE_BULK, PIPE_TOKEN_IN,\r
-                                                                  EndpointData->EndpointAddress, EndpointData->EndpointSize, PIPE_BANK_SINGLE);\r
+                                                                  EndpointData->EndpointAddress, EndpointData->EndpointSize, \r
+                                                                  CDCInterfaceInfo->Config.DataINPipeDoubleBank ? PIPE_BANK_DOUBLE : PIPE_BANK_SINGLE);\r
                                CDCInterfaceInfo->State.DataINPipeSize = EndpointData->EndpointSize;\r
 \r
                                FoundEndpoints |= CDC_FOUND_DATAPIPE_IN;\r
@@ -118,7 +120,8 @@ uint8_t CDC_Host_ConfigurePipes(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo
                        else\r
                        {\r
                                Pipe_ConfigurePipe(CDCInterfaceInfo->Config.DataOUTPipeNumber, EP_TYPE_BULK, PIPE_TOKEN_OUT,\r
-                                                                  EndpointData->EndpointAddress, EndpointData->EndpointSize, PIPE_BANK_SINGLE);\r
+                                                                  EndpointData->EndpointAddress, EndpointData->EndpointSize, \r
+                                                                  CDCInterfaceInfo->Config.DataOUTPipeDoubleBank ? PIPE_BANK_DOUBLE : PIPE_BANK_SINGLE);\r
                                CDCInterfaceInfo->State.DataOUTPipeSize = EndpointData->EndpointSize;\r
                                \r
                                FoundEndpoints |= CDC_FOUND_DATAPIPE_OUT;\r
index c0ebe09..9af0f60 100644 (file)
@@ -78,7 +78,7 @@
                         *  // Can now access elements of the configuration header struct using the -> indirection operator\r
                         *  \endcode\r
                         */\r
-                       #define DESCRIPTOR_PCAST(DescriptorPtr, Type) ((Type*)DescriptorPtr)\r
+                       #define DESCRIPTOR_PCAST(DescriptorPtr, Type) ((Type*)(DescriptorPtr))\r
 \r
                        /** Casts a pointer to a descriptor inside the configuration descriptor into the given descriptor\r
                         *  type (as an actual struct instance rather than a pointer to a struct).\r
index 4dfa1ef..5bbbb87 100644 (file)
                                #endif\r
                                \r
                                #if !defined(CONTROL_ONLY_DEVICE)\r
-                                       #define Endpoint_SelectEndpoint(epnum)    MACROS{ UENUM = epnum; }MACROE\r
+                                       #define Endpoint_SelectEndpoint(epnum)    MACROS{ UENUM = (epnum); }MACROE\r
                                #else\r
                                        #define Endpoint_SelectEndpoint(epnum)    (void)epnum\r
                                #endif\r
 \r
-                               #define Endpoint_ResetFIFO(epnum)             MACROS{ UERST = (1 << epnum); UERST = 0; }MACROE\r
+                               #define Endpoint_ResetFIFO(epnum)             MACROS{ UERST = (1 << (epnum)); UERST = 0; }MACROE\r
 \r
                                #define Endpoint_EnableEndpoint()             MACROS{ UECONX |= (1 << EPEN); }MACROE\r
 \r
 \r
                                #define Endpoint_GetEndpointInterrupts()      UEINT\r
 \r
-                               #define Endpoint_HasEndpointInterrupted(n)    ((UEINT & (1 << n)) ? true : false)\r
+                               #define Endpoint_HasEndpointInterrupted(n)    ((UEINT & (1 << (n))) ? true : false)\r
                                \r
                                #define Endpoint_IsINReady()                  ((UEINTX & (1 << TXINI))  ? true : false)\r
                                \r
                                \r
                                #define Endpoint_GetEndpointDirection()       (UECFG0X & ENDPOINT_DIR_IN)\r
                                \r
-                               #define Endpoint_SetEndpointDirection(dir)    MACROS{ UECFG0X = ((UECFG0X & ~ENDPOINT_DIR_IN) | dir); }MACROE\r
+                               #define Endpoint_SetEndpointDirection(dir)    MACROS{ UECFG0X = ((UECFG0X & ~ENDPOINT_DIR_IN) | (dir)); }MACROE\r
                        #endif\r
 \r
                /* Enums: */\r
                        #endif\r
 \r
                        #define Endpoint_ConfigureEndpoint(Number, Type, Direction, Size, Banks)            \\r
-                                                           Endpoint_ConfigureEndpoint_Prv(Number,          \\r
-                                                                     ((Type << EPTYPE0) | Direction),      \\r
-                                                                     ((1 << ALLOC) | Banks |               \\r
+                                                           Endpoint_ConfigureEndpoint_Prv((Number),        \\r
+                                                                     (((Type) << EPTYPE0) | (Direction)),  \\r
+                                                                     ((1 << ALLOC) | (Banks) |             \\r
                                                                        (__builtin_constant_p(Size) ?       \\r
-                                                                        Endpoint_BytesToEPSizeMask(Size) :  \\r
+                                                                        Endpoint_BytesToEPSizeMask(Size) : \\r
                                                                         Endpoint_BytesToEPSizeMaskDynamic(Size))))\r
                                                                                                        \r
                /* Function Prototypes: */\r
index 50912ad..8cf1fe0 100644 (file)
                        #define USB_Host_VBUS_Auto_Off()        MACROS{ OTGCON |=  (1 << VBUSRQC);        }MACROE\r
                        #define USB_Host_VBUS_Manual_Off()      MACROS{ PORTE  &= ~(1 << 7);              }MACROE\r
 \r
-                       #define USB_Host_SetDeviceAddress(addr) MACROS{ UHADDR  =  (addr & 0x7F);         }MACROE\r
+                       #define USB_Host_SetDeviceAddress(addr) MACROS{ UHADDR  =  ((addr) & 0x7F);       }MACROE\r
 \r
                /* Enums: */\r
                        enum USB_Host_WaitMSErrorCodes_t\r
index d95488e..a5ad6ba 100644 (file)
                                \r
                                #define USB_OTG_Host_IsHNPReceived()              ((OTGCON &   (1 << HNPREQ)) ? true : false)\r
                                \r
-                               #define USB_OTG_Device_InitiateSRP(type)    MACROS{ OTGCON = ((OTGCON & ~(1 << SRPSEL)) | (type | (1 << SRPREQ))); }MACROE\r
+                               #define USB_OTG_Device_InitiateSRP(type)    MACROS{ OTGCON = ((OTGCON & ~(1 << SRPSEL)) | ((type) | (1 << SRPREQ))); }MACROE\r
                        #endif\r
        \r
 #endif\r
index 4b7b900..6e64377 100644 (file)
 \r
                                #define Pipe_GetCurrentPipe()          (UPNUM & PIPE_PIPENUM_MASK)\r
 \r
-                               #define Pipe_SelectPipe(pipenum)       MACROS{ UPNUM = pipenum; }MACROE\r
+                               #define Pipe_SelectPipe(pipenum)       MACROS{ UPNUM = (pipenum); }MACROE\r
                                \r
-                               #define Pipe_ResetPipe(pipenum)        MACROS{ UPRST = (1 << pipenum); UPRST = 0; }MACROE\r
+                               #define Pipe_ResetPipe(pipenum)        MACROS{ UPRST = (1 << (pipenum)); UPRST = 0; }MACROE\r
 \r
                                #define Pipe_EnablePipe()              MACROS{ UPCONX |= (1 << PEN); }MACROE\r
 \r
 \r
                                #define Pipe_GetPipeToken()            (UPCFG0X & PIPE_TOKEN_MASK)\r
 \r
-                               #define Pipe_SetToken(token)           MACROS{ UPCFG0X = ((UPCFG0X & ~PIPE_TOKEN_MASK) | token); }MACROE\r
+                               #define Pipe_SetToken(token)           MACROS{ UPCFG0X = ((UPCFG0X & ~PIPE_TOKEN_MASK) | (token)); }MACROE\r
                                \r
                                #define Pipe_SetInfiniteINRequests()   MACROS{ UPCONX |= (1 << INMODE); }MACROE\r
 \r
-                               #define Pipe_SetFiniteINRequests(n)    MACROS{ UPCONX &= ~(1 << INMODE); UPINRQX = n; }MACROE\r
+                               #define Pipe_SetFiniteINRequests(n)    MACROS{ UPCONX &= ~(1 << INMODE); UPINRQX = (n); }MACROE\r
 \r
                                #define Pipe_IsConfigured()            ((UPSTAX  & (1 << CFGOK)) ? true : false)\r
 \r
                                #define Pipe_BoundEndpointNumber()     ((UPCFG0X >> PEPNUM0) & PIPE_EPNUM_MASK)\r
                                \r
-                               #define Pipe_SetInterruptPeriod(ms)    MACROS{ UPCFG2X = ms; }MACROE\r
+                               #define Pipe_SetInterruptPeriod(ms)    MACROS{ UPCFG2X = (ms); }MACROE\r
 \r
                                #define Pipe_GetPipeInterrupts()       UPINT\r
 \r
-                               #define Pipe_HasPipeInterrupted(n)     ((UPINT & (1 << n)) ? true : false)\r
+                               #define Pipe_HasPipeInterrupted(n)     ((UPINT & (1 << (n))) ? true : false)\r
 \r
                                #define Pipe_Unfreeze()                MACROS{ UPCONX &= ~(1 << PFREEZE); }MACROE\r
 \r
index 016d74c..44b8356 100644 (file)
@@ -34,9 +34,6 @@
  *  the project and is responsible for the initial application hardware configuration.\r
  */\r
 \r
-// TODO: Add in software SPI for lower programming speeds below 125KHz\r
-// TODO: Add reversed/shorted target connector checks\r
-\r
 #include "AVRISP.h"\r
 \r
 /** Main program entry point. This routine contains the overall program flow, including initial\r
index 2ee24da..5b81a54 100644 (file)
@@ -56,16 +56,19 @@ USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface =
        {\r
                .Config = \r
                        {\r
-                               .ControlInterfaceNumber     = 0,\r
+                               .ControlInterfaceNumber         = 0,\r
 \r
-                               .DataINEndpointNumber       = CDC_TX_EPNUM,\r
-                               .DataINEndpointSize         = CDC_TXRX_EPSIZE,\r
+                               .DataINEndpointNumber           = CDC_TX_EPNUM,\r
+                               .DataINEndpointSize             = CDC_TXRX_EPSIZE,\r
+                               .DataINEndpointDoubleBank       = false,\r
 \r
-                               .DataOUTEndpointNumber      = CDC_RX_EPNUM,\r
-                               .DataOUTEndpointSize        = CDC_TXRX_EPSIZE,\r
+                               .DataOUTEndpointNumber          = CDC_RX_EPNUM,\r
+                               .DataOUTEndpointSize            = CDC_TXRX_EPSIZE,\r
+                               .DataOUTEndpointDoubleBank      = false,\r
 \r
-                               .NotificationEndpointNumber = CDC_NOTIFICATION_EPNUM,\r
-                               .NotificationEndpointSize   = CDC_NOTIFICATION_EPSIZE,\r
+                               .NotificationEndpointNumber     = CDC_NOTIFICATION_EPNUM,\r
+                               .NotificationEndpointSize       = CDC_NOTIFICATION_EPSIZE,\r
+                               .NotificationEndpointDoubleBank = false,\r
                        },\r
        };\r
 \r
index 7b3f0be..69f17c7 100644 (file)
@@ -56,13 +56,14 @@ USB_ClassInfo_HID_Device_t Keyboard_HID_Interface =
        {\r
                .Config =\r
                        {\r
-                               .InterfaceNumber         = 0,\r
+                               .InterfaceNumber            = 0,\r
 \r
-                               .ReportINEndpointNumber  = KEYBOARD_EPNUM,\r
-                               .ReportINEndpointSize    = KEYBOARD_EPSIZE,\r
+                               .ReportINEndpointNumber     = KEYBOARD_EPNUM,\r
+                               .ReportINEndpointSize       = KEYBOARD_EPSIZE,\r
+                               .ReportINEndpointDoubleBank = KEYBOARD_EPSIZE,\r
 \r
-                               .PrevReportINBuffer      = PrevKeyboardHIDReportBuffer,\r
-                               .PrevReportINBufferSize  = sizeof(PrevKeyboardHIDReportBuffer),\r
+                               .PrevReportINBuffer         = PrevKeyboardHIDReportBuffer,\r
+                               .PrevReportINBufferSize     = sizeof(PrevKeyboardHIDReportBuffer),\r
                        },\r
        };\r
 \r
index a4a4625..747e027 100644 (file)
@@ -50,16 +50,19 @@ USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface =
        {\r
                .Config = \r
                        {\r
-                               .ControlInterfaceNumber     = 0,\r
+                               .ControlInterfaceNumber         = 0,\r
 \r
-                               .DataINEndpointNumber       = CDC_TX_EPNUM,\r
-                               .DataINEndpointSize         = CDC_TXRX_EPSIZE,\r
+                               .DataINEndpointNumber           = CDC_TX_EPNUM,\r
+                               .DataINEndpointSize             = CDC_TXRX_EPSIZE,\r
+                               .DataINEndpointDoubleBank       = false,\r
 \r
-                               .DataOUTEndpointNumber      = CDC_RX_EPNUM,\r
-                               .DataOUTEndpointSize        = CDC_TXRX_EPSIZE,\r
+                               .DataOUTEndpointNumber          = CDC_RX_EPNUM,\r
+                               .DataOUTEndpointSize            = CDC_TXRX_EPSIZE,\r
+                               .DataOUTEndpointDoubleBank      = false,\r
 \r
-                               .NotificationEndpointNumber = CDC_NOTIFICATION_EPNUM,\r
-                               .NotificationEndpointSize   = CDC_NOTIFICATION_EPSIZE,\r
+                               .NotificationEndpointNumber     = CDC_NOTIFICATION_EPNUM,\r
+                               .NotificationEndpointSize       = CDC_NOTIFICATION_EPSIZE,\r
+                               .NotificationEndpointDoubleBank = false,\r
                        },\r
        };\r
 \r