Fix to previous patch (make CDCHost demo deallocate pipes when an invalid CDC interfa...
[pub/USBasp.git] / Demos / Device / MassStorage / MassStorage.c
index 56bc19a..c50ca3d 100644 (file)
 #define  INCLUDE_FROM_MASSSTORAGE_C\r
 #include "MassStorage.h"\r
 \r
-/* Project Tags, for reading out using the ButtLoad project */\r
-BUTTLOADTAG(ProjName,    "LUFA MassStore App");\r
-BUTTLOADTAG(BuildTime,   __TIME__);\r
-BUTTLOADTAG(BuildDate,   __DATE__);\r
-BUTTLOADTAG(LUFAVersion, "LUFA V" LUFA_VERSION_STRING);\r
-\r
 /* Scheduler Task List */\r
 TASK_LIST\r
 {\r
-       { Task: USB_MassStorage      , TaskStatus: TASK_STOP },\r
+       { .Task = USB_MassStorage      , .TaskStatus = TASK_STOP },\r
 };\r
 \r
 /* Global Variables */\r
@@ -54,7 +48,7 @@ TASK_LIST
 CommandBlockWrapper_t  CommandBlock;\r
 \r
 /** Structure to hold the latest Command Status Wrapper to return to the host, containing the status of the last issued command. */\r
-CommandStatusWrapper_t CommandStatus = { Signature: CSW_SIGNATURE };\r
+CommandStatusWrapper_t CommandStatus = { .Signature = CSW_SIGNATURE };\r
 \r
 /** Flag to asynchronously abort any in-progress data transfers upon the reception of a mass storage reset command. */\r
 volatile bool          IsMassStoreReset = false;\r
@@ -91,19 +85,6 @@ int main(void)
        Scheduler_Start();\r
 }\r
 \r
-/** Event handler for the USB_Reset event. This fires when the USB interface is reset by the USB host, before the\r
- *  enumeration process begins, and enables the control endpoint interrupt so that control requests can be handled\r
- *  asynchronously when they arrive rather than when the control endpoint is polled manually.\r
- */\r
-EVENT_HANDLER(USB_Reset)\r
-{\r
-       /* Select the control endpoint */\r
-       Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP);\r
-\r
-       /* Enable the endpoint SETUP interrupt ISR for the control endpoint */\r
-       USB_INT_Enable(ENDPOINT_INT_SETUP);\r
-}\r
-\r
 /** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs. */\r
 EVENT_HANDLER(USB_Connect)\r
 {\r
@@ -154,35 +135,35 @@ EVENT_HANDLER(USB_ConfigurationChanged)
 EVENT_HANDLER(USB_UnhandledControlPacket)\r
 {\r
        /* Process UFI specific control requests */\r
-       switch (bRequest)\r
+       switch (USB_ControlRequest.bRequest)\r
        {\r
                case REQ_MassStorageReset:\r
-                       if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))\r
+                       if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))\r
                        {\r
-                               Endpoint_ClearSetupReceived();\r
+                               Endpoint_ClearSETUP();\r
 \r
                                /* Indicate that the current transfer should be aborted */\r
                                IsMassStoreReset = true;                        \r
 \r
                                /* Acknowledge status stage */\r
-                               while (!(Endpoint_IsSetupINReady()));\r
-                               Endpoint_ClearSetupIN();\r
+                               while (!(Endpoint_IsINReady()));\r
+                               Endpoint_ClearIN();\r
                        }\r
 \r
                        break;\r
                case REQ_GetMaxLUN:\r
-                       if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))\r
+                       if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))\r
                        {\r
-                               /* Indicate to the host the number of supported LUNs (virtual disks) on the device */\r
-                               Endpoint_ClearSetupReceived();\r
+                               Endpoint_ClearSETUP();\r
 \r
+                               /* Indicate to the host the number of supported LUNs (virtual disks) on the device */\r
                                Endpoint_Write_Byte(TOTAL_LUNS - 1);\r
                                \r
-                               Endpoint_ClearSetupIN();\r
+                               Endpoint_ClearIN();\r
                                \r
                                /* Acknowledge status stage */\r
-                               while (!(Endpoint_IsSetupOUTReceived()));\r
-                               Endpoint_ClearSetupOUT();\r
+                               while (!(Endpoint_IsOUTReceived()));\r
+                               Endpoint_ClearOUT();\r
                        }\r
                        \r
                        break;\r
@@ -234,7 +215,7 @@ TASK(USB_MassStorage)
                Endpoint_SelectEndpoint(MASS_STORAGE_OUT_EPNUM);\r
                \r
                /* Check to see if a command from the host has been issued */\r
-               if (Endpoint_ReadWriteAllowed())\r
+               if (Endpoint_IsReadWriteAllowed())\r
                {       \r
                        /* Indicate busy */\r
                        UpdateStatus(Status_ProcessingCommandBlock);\r
@@ -326,7 +307,7 @@ static bool ReadInCommandBlock(void)
          return false;\r
 \r
        /* Finalize the stream transfer to send the last packet */\r
-       Endpoint_ClearCurrentBank();\r
+       Endpoint_ClearOUT();\r
        \r
        return true;\r
 }\r
@@ -367,7 +348,7 @@ static void ReturnCommandStatus(void)
          return;\r
 \r
        /* Finalize the stream transfer to send the last packet */\r
-       Endpoint_ClearCurrentBank();\r
+       Endpoint_ClearIN();\r
 }\r
 \r
 /** Stream callback function for the Endpoint stream read and write functions. This callback will abort the current stream transfer\r
@@ -382,24 +363,3 @@ STREAM_CALLBACK(AbortOnMassStoreReset)
        /* Continue with the current stream operation */\r
        return STREAMCALLBACK_Continue;\r
 }\r
-\r
-/** ISR for the general Pipe/Endpoint interrupt vector. This ISR fires when a control request has been issued to the control endpoint,\r
- *  so that the request can be processed. As several elements of the Mass Storage implementation require asynchronous control requests\r
- *  (such as endpoint stall clearing and Mass Storage Reset requests during data transfers) this is done via interrupts rather than\r
- *  polling so that they can be processed regardless of the rest of the application's state.\r
- */\r
-ISR(ENDPOINT_PIPE_vect, ISR_BLOCK)\r
-{\r
-       /* Check if the control endpoint has received a request */\r
-       if (Endpoint_HasEndpointInterrupted(ENDPOINT_CONTROLEP))\r
-       {\r
-               /* Clear the endpoint interrupt */\r
-               Endpoint_ClearEndpointInterrupt(ENDPOINT_CONTROLEP);\r
-\r
-               /* Process the control request */\r
-               USB_USBTask();\r
-\r
-               /* Handshake the endpoint setup interrupt - must be after the call to USB_USBTask() */\r
-               USB_INT_Clear(ENDPOINT_INT_SETUP);\r
-       }\r
-}\r