Add missing INTERRUPT_CONTROL_ENDPOINT compile time option to the Mass Storage device...
authorDean Camera <dean@fourwalledcubicle.com>
Mon, 26 Jul 2010 04:57:50 +0000 (04:57 +0000)
committerDean Camera <dean@fourwalledcubicle.com>
Mon, 26 Jul 2010 04:57:50 +0000 (04:57 +0000)
Alter Test and Measurement Class demo's request handlers to accept, process and correctly return the fields indicated in the specification.

Demos/Device/ClassDriver/MassStorage/makefile
Demos/Device/ClassDriver/MassStorageKeyboard/makefile
Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.c
Demos/Device/Incomplete/TestAndMeasurement/makefile
Demos/Device/LowLevel/MassStorage/makefile
Projects/TempDataLogger/makefile
Projects/Webserver/makefile

index a7c1bed..5c9fe05 100644 (file)
@@ -121,6 +121,7 @@ LUFA_OPTS += -D FIXED_CONTROL_ENDPOINT_SIZE=8
 LUFA_OPTS += -D FIXED_NUM_CONFIGURATIONS=1
 LUFA_OPTS += -D USE_FLASH_DESCRIPTORS
 LUFA_OPTS += -D USE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"
+LUFA_OPTS += -D INTERRUPT_CONTROL_ENDPOINT
 
 
 # Create the LUFA source path variables by including the LUFA root makefile
index 9450ee5..723dd91 100644 (file)
@@ -121,6 +121,7 @@ LUFA_OPTS += -D FIXED_CONTROL_ENDPOINT_SIZE=8
 LUFA_OPTS += -D FIXED_NUM_CONFIGURATIONS=1
 LUFA_OPTS += -D USE_FLASH_DESCRIPTORS
 LUFA_OPTS += -D USE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"
+LUFA_OPTS += -D INTERRUPT_CONTROL_ENDPOINT
 
 
 # Create the LUFA source path variables by including the LUFA root makefile
index c3e54ab..184e2e2 100644 (file)
@@ -61,6 +61,12 @@ bool IsTMCBulkINReset    = false;
 /** Stream callback abort flag for bulk OUT data */\r
 bool IsTMCBulkOUTReset   = false;\r
 \r
+/** Last used tag value for bulk IN transfers */\r
+uint8_t NextTransferINTag  = 0;\r
+\r
+/** Last used tag value for bulk IN transfers */\r
+uint8_t NextTransferOUTTag  = 0;\r
+\r
 \r
 /** Main program entry point. This routine contains the overall program flow, including initial\r
  *  setup of all components and the main program loop.\r
@@ -126,6 +132,8 @@ void EVENT_USB_Device_ConfigurationChanged(void)
 \r
 void EVENT_USB_Device_UnhandledControlRequest(void)\r
 {\r
+       uint8_t TMCRequestStatus = TMC_REQUEST_STATUS_SUCCESS;\r
+\r
        switch (USB_ControlRequest.bRequest)\r
        {\r
                case Req_InitiateAbortBulkOut:\r
@@ -133,10 +141,13 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
                        {\r
                                Endpoint_ClearSETUP();\r
                                \r
-                               /* Check to see if a split request is already being processed before starting a new one */\r
                                if (RequestInProgess != 0)\r
                                {\r
-                                       Endpoint_Write_Byte(TMC_REQUEST_STATUS_SPLIT_IN_PROGRESS);                              \r
+                                       TMCRequestStatus = TMC_REQUEST_STATUS_SPLIT_IN_PROGRESS;\r
+                               }\r
+                               else if (USB_ControlRequest.wValue != NextTransferOUTTag)\r
+                               {\r
+                                       TMCRequestStatus = TMC_REQUEST_STATUS_TRANSFER_NOT_IN_PROGRESS;\r
                                }\r
                                else\r
                                {\r
@@ -145,10 +156,11 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
                                        \r
                                        /* Save the split request for later checking when a new request is received */\r
                                        RequestInProgess = Req_InitiateAbortBulkOut;\r
-\r
-                                       Endpoint_Write_Byte(TMC_REQUEST_STATUS_SUCCESS);\r
                                }\r
                                \r
+                               /* Write the request response byte */\r
+                               Endpoint_Write_Byte(TMCRequestStatus);\r
+\r
                                Endpoint_ClearIN();\r
                                Endpoint_ClearStatusStage();\r
                        }\r
@@ -159,21 +171,18 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
                        {\r
                                Endpoint_ClearSETUP();\r
                                \r
-                               /* Check to see the correct split request is in progress before the status can be retrieved */\r
                                if (RequestInProgess != Req_InitiateAbortBulkOut)\r
-                               {\r
-                                       Endpoint_Write_Byte(TMC_REQUEST_STATUS_SPLIT_NOT_IN_PROGRESS);                          \r
-                               }\r
+                                 TMCRequestStatus = TMC_REQUEST_STATUS_SPLIT_NOT_IN_PROGRESS;                          \r
+                               else if (IsTMCBulkOUTReset)\r
+                                 TMCRequestStatus = TMC_REQUEST_STATUS_PENDING;\r
                                else\r
-                               {\r
-                                       // TODO: CLEAR BULK OUT\r
+                                 RequestInProgess = 0;                 \r
                                \r
-                                       /* Clear the pending split request value so that a new request can be made */\r
-                                       RequestInProgess = 0;\r
+                               /* Write the request response bytes */\r
+                               Endpoint_Write_Byte(TMCRequestStatus);\r
+                               Endpoint_Write_Word_LE(0);\r
+                               Endpoint_Write_DWord_LE(0); // TODO - Last transfer length\r
 \r
-                                       Endpoint_Write_Byte(TMC_REQUEST_STATUS_SUCCESS);\r
-                               }\r
-                               \r
                                Endpoint_ClearIN();\r
                                Endpoint_ClearStatusStage();                            \r
                        }\r
@@ -184,10 +193,13 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
                        {\r
                                Endpoint_ClearSETUP();\r
                                \r
-                               /* Check to see if a split request is already being processed before starting a new one */\r
                                if (RequestInProgess != 0)\r
                                {\r
-                                       Endpoint_Write_Byte(TMC_REQUEST_STATUS_SPLIT_IN_PROGRESS);                              \r
+                                       TMCRequestStatus = TMC_REQUEST_STATUS_SPLIT_IN_PROGRESS;                                \r
+                               }\r
+                               else if (USB_ControlRequest.wValue != NextTransferINTag)\r
+                               {\r
+                                       TMCRequestStatus = TMC_REQUEST_STATUS_TRANSFER_NOT_IN_PROGRESS;\r
                                }\r
                                else\r
                                {\r
@@ -196,10 +208,12 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
                                        \r
                                        /* Save the split request for later checking when a new request is received */\r
                                        RequestInProgess = Req_InitiateAbortBulkIn;\r
-\r
-                                       Endpoint_Write_Byte(TMC_REQUEST_STATUS_SUCCESS);\r
                                }\r
                                \r
+                               /* Write the request response bytes */\r
+                               Endpoint_Write_Byte(TMCRequestStatus);\r
+                               Endpoint_Write_Byte(NextTransferINTag);\r
+\r
                                Endpoint_ClearIN();\r
                                Endpoint_ClearStatusStage();\r
                        }\r
@@ -210,23 +224,20 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
                        {\r
                                Endpoint_ClearSETUP();\r
                                \r
-                               /* Check to see the correct split request is in progress before the status can be retrieved */\r
                                if (RequestInProgess != Req_InitiateAbortBulkIn)\r
-                               {\r
-                                       Endpoint_Write_Byte(TMC_REQUEST_STATUS_SPLIT_NOT_IN_PROGRESS);                          \r
-                               }\r
+                                 TMCRequestStatus = TMC_REQUEST_STATUS_SPLIT_NOT_IN_PROGRESS;\r
+                               else if (IsTMCBulkINReset)\r
+                                 TMCRequestStatus = TMC_REQUEST_STATUS_PENDING;\r
                                else\r
-                               {\r
-                                       // TODO: CLEAR BULK IN\r
+                                 RequestInProgess = 0;\r
                                \r
-                                       /* Clear the pending split request value so that a new request can be made */\r
-                                       RequestInProgess = 0;\r
+                               /* Write the request response bytes */\r
+                               Endpoint_Write_Byte(TMCRequestStatus);\r
+                               Endpoint_Write_Word_LE(0);\r
+                               Endpoint_Write_DWord_LE(0); // TODO - Last transfer length\r
 \r
-                                       Endpoint_Write_Byte(TMC_REQUEST_STATUS_SUCCESS);\r
-                               }\r
-                               \r
                                Endpoint_ClearIN();\r
-                               Endpoint_ClearStatusStage();                            \r
+                               Endpoint_ClearStatusStage();\r
                        }\r
                        \r
                        break;\r
@@ -235,7 +246,6 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
                        {\r
                                Endpoint_ClearSETUP();\r
                                \r
-                               /* Check to see if a split request is already being processed before starting a new one */\r
                                if (RequestInProgess != 0)\r
                                {\r
                                        Endpoint_Write_Byte(TMC_REQUEST_STATUS_SPLIT_IN_PROGRESS);                              \r
@@ -248,10 +258,11 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
                                        \r
                                        /* Save the split request for later checking when a new request is received */\r
                                        RequestInProgess = Req_InitiateClear;\r
-\r
-                                       Endpoint_Write_Byte(TMC_REQUEST_STATUS_SUCCESS);\r
                                }\r
                                \r
+                               /* Write the request response byte */\r
+                               Endpoint_Write_Byte(TMCRequestStatus);\r
+\r
                                Endpoint_ClearIN();\r
                                Endpoint_ClearStatusStage();\r
                        }\r
@@ -262,20 +273,16 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
                        {\r
                                Endpoint_ClearSETUP();\r
                                \r
-                               /* Check to see the correct split request is in progress before the status can be retrieved */\r
                                if (RequestInProgess != Req_InitiateClear)\r
-                               {\r
-                                       Endpoint_Write_Byte(TMC_REQUEST_STATUS_SPLIT_NOT_IN_PROGRESS);                          \r
-                               }\r
+                                 TMCRequestStatus = TMC_REQUEST_STATUS_SPLIT_NOT_IN_PROGRESS;                          \r
+                               else if (IsTMCBulkINReset || IsTMCBulkOUTReset)\r
+                                 TMCRequestStatus = TMC_REQUEST_STATUS_PENDING;\r
                                else\r
-                               {\r
-                                       // TODO: CLEAR STATUS\r
+                                 RequestInProgess = 0;\r
                                \r
-                                       /* Clear the pending split request value so that a new request can be made */\r
-                                       RequestInProgess = 0;\r
-\r
-                                       Endpoint_Write_Byte(TMC_REQUEST_STATUS_SUCCESS);\r
-                               }\r
+                               /* Write the request response bytes */\r
+                               Endpoint_Write_Byte(TMCRequestStatus);\r
+                               Endpoint_Write_Byte(0);\r
                                \r
                                Endpoint_ClearIN();\r
                                Endpoint_ClearStatusStage();                            \r
@@ -313,6 +320,10 @@ void TMC_Task(void)
                LEDs_SetAllLEDs(LEDS_ALL_LEDS);\r
                Endpoint_ClearOUT();\r
        }\r
+       \r
+       /* All pending data has been processed - reset the data abort flags */\r
+       IsTMCBulkINReset  = false;\r
+       IsTMCBulkOUTReset = false;\r
 }\r
 \r
 /** Stream callback function for the Endpoint stream write functions. This callback will abort the current stream transfer\r
index 43f8b8f..856fc2b 100644 (file)
@@ -121,6 +121,7 @@ LUFA_OPTS += -D FIXED_CONTROL_ENDPOINT_SIZE=8
 LUFA_OPTS += -D FIXED_NUM_CONFIGURATIONS=1
 LUFA_OPTS += -D USE_FLASH_DESCRIPTORS
 LUFA_OPTS += -D USE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"
+LUFA_OPTS += -D INTERRUPT_CONTROL_ENDPOINT
 
 
 # Create the LUFA source path variables by including the LUFA root makefile
index 4ae0040..e1447ce 100644 (file)
@@ -121,6 +121,7 @@ LUFA_OPTS += -D FIXED_CONTROL_ENDPOINT_SIZE=8
 LUFA_OPTS += -D FIXED_NUM_CONFIGURATIONS=1
 LUFA_OPTS += -D USE_FLASH_DESCRIPTORS
 LUFA_OPTS += -D USE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"
+LUFA_OPTS += -D INTERRUPT_CONTROL_ENDPOINT
 
 
 # Create the LUFA source path variables by including the LUFA root makefile
index de751dd..06f0954 100644 (file)
@@ -121,6 +121,7 @@ LUFA_OPTS += -D FIXED_CONTROL_ENDPOINT_SIZE=8
 LUFA_OPTS += -D FIXED_NUM_CONFIGURATIONS=1
 LUFA_OPTS += -D USE_FLASH_DESCRIPTORS
 LUFA_OPTS += -D USE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"
+LUFA_OPTS += -D INTERRUPT_CONTROL_ENDPOINT
 
 #LUFA_OPTS += -D DUMMY_RTC
 
index 093246e..877b926 100644 (file)
@@ -121,6 +121,7 @@ LUFA_OPTS += -D FIXED_NUM_CONFIGURATIONS=1
 LUFA_OPTS += -D USE_FLASH_DESCRIPTORS
 LUFA_OPTS += -D FAST_STREAM_TRANSFERS
 LUFA_OPTS += -D USE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"
+LUFA_OPTS += -D INTERRUPT_CONTROL_ENDPOINT
 
 LUFA_OPTS += -D ENABLE_DHCP_CLIENT
 LUFA_OPTS += -D ENABLE_TELNET_SERVER