Oops - with new changes to the way the device Configuration Descriptor is retrieved...
[pub/USBasp.git] / LUFA / Drivers / USB / Class / Device / MassStorage.c
index 073111e..04c63fc 100644 (file)
@@ -36,7 +36,7 @@
 \r
 static USB_ClassInfo_MS_Device_t* CallbackMSInterfaceInfo;\r
 \r
-void MS_Device_ProcessControlPacket(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)\r
+void MS_Device_ProcessControlRequest(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)\r
 {\r
        if (!(Endpoint_IsSETUPReceived()))\r
          return;\r
@@ -53,8 +53,7 @@ void MS_Device_ProcessControlPacket(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)
 \r
                                MSInterfaceInfo->State.IsMassStoreReset = true;                 \r
 \r
-                               while (!(Endpoint_IsINReady()));\r
-                               Endpoint_ClearIN();\r
+                               Endpoint_ClearStatusStage();\r
                        }\r
 \r
                        break;\r
@@ -63,20 +62,20 @@ void MS_Device_ProcessControlPacket(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)
                        {\r
                                Endpoint_ClearSETUP();\r
 \r
-                               Endpoint_Write_Byte(MSInterfaceInfo->Config.TotalLUNs - 1);\r
-                               \r
+                               Endpoint_Write_Byte(MSInterfaceInfo->Config.TotalLUNs - 1);                             \r
                                Endpoint_ClearIN();\r
                                \r
-                               while (!(Endpoint_IsOUTReceived()));\r
-                               Endpoint_ClearOUT();\r
+                               Endpoint_ClearStatusStage();\r
                        }\r
                        \r
                        break;\r
        }\r
 }\r
 \r
-bool MS_Device_ConfigureEndpoints(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)\r
+bool MS_Device_ConfigureEndpoints(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)\r
 {\r
+       memset(&MSInterfaceInfo->State, 0x00, sizeof(MSInterfaceInfo->State));\r
+\r
        if (!(Endpoint_ConfigureEndpoint(MSInterfaceInfo->Config.DataINEndpointNumber, EP_TYPE_BULK,\r
                                                                 ENDPOINT_DIR_IN, MSInterfaceInfo->Config.DataINEndpointSize,\r
                                                                 ENDPOINT_BANK_SINGLE)))\r
@@ -94,9 +93,9 @@ bool MS_Device_ConfigureEndpoints(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)
        return true;\r
 }\r
 \r
-void MS_Device_USBTask(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)\r
+void MS_Device_USBTask(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)\r
 {\r
-       if (!(USB_IsConnected))\r
+       if (USB_DeviceState != DEVICE_STATE_Configured)\r
          return;\r
 \r
        Endpoint_SelectEndpoint(MSInterfaceInfo->Config.DataOUTEndpointNumber);\r
@@ -138,17 +137,19 @@ void MS_Device_USBTask(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)
        MSInterfaceInfo->State.IsMassStoreReset = false;\r
 }\r
 \r
-static bool MS_Device_ReadInCommandBlock(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)\r
+static bool MS_Device_ReadInCommandBlock(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)\r
 {\r
        Endpoint_SelectEndpoint(MSInterfaceInfo->Config.DataOUTEndpointNumber);\r
 \r
        CallbackMSInterfaceInfo = MSInterfaceInfo;\r
        Endpoint_Read_Stream_LE(&MSInterfaceInfo->State.CommandBlock,\r
-                               (sizeof(CommandBlockWrapper_t) - 16),\r
+                               (sizeof(MS_CommandBlockWrapper_t) - 16),\r
                                StreamCallback_MS_Device_AbortOnMassStoreReset);\r
 \r
        if ((MSInterfaceInfo->State.CommandBlock.Signature         != MS_CBW_SIGNATURE)                  ||\r
            (MSInterfaceInfo->State.CommandBlock.LUN               >= MSInterfaceInfo->Config.TotalLUNs) ||\r
+               (MSInterfaceInfo->State.CommandBlock.Flags              & 0x1F)                              ||\r
+               (MSInterfaceInfo->State.CommandBlock.SCSICommandLength == 0)                                 ||\r
                (MSInterfaceInfo->State.CommandBlock.SCSICommandLength >  16))\r
        {\r
                Endpoint_StallTransaction();\r
@@ -171,7 +172,7 @@ static bool MS_Device_ReadInCommandBlock(USB_ClassInfo_MS_Device_t* MSInterfaceI
        return true;\r
 }\r
 \r
-static void MS_Device_ReturnCommandStatus(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)\r
+static void MS_Device_ReturnCommandStatus(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)\r
 {\r
        Endpoint_SelectEndpoint(MSInterfaceInfo->Config.DataOUTEndpointNumber);\r
 \r
@@ -194,7 +195,7 @@ static void MS_Device_ReturnCommandStatus(USB_ClassInfo_MS_Device_t* MSInterface
        }\r
        \r
        CallbackMSInterfaceInfo = MSInterfaceInfo;\r
-       Endpoint_Write_Stream_LE(&MSInterfaceInfo->State.CommandStatus, sizeof(CommandStatusWrapper_t),\r
+       Endpoint_Write_Stream_LE(&MSInterfaceInfo->State.CommandStatus, sizeof(MS_CommandStatusWrapper_t),\r
                                 StreamCallback_MS_Device_AbortOnMassStoreReset);\r
        \r
        Endpoint_ClearIN();\r