Break device mode class driver interfaces into seperate config and state structs...
[pub/USBasp.git] / LUFA / Drivers / USB / Class / Device / MassStorage.c
index 1dc6d60..a70ed68 100644 (file)
 #define  INCLUDE_FROM_MS_CLASS_DEVICE_C\r
 #include "MassStorage.h"\r
 \r
-static USB_ClassInfo_MS_t* CallbackMSInterfaceInfo;\r
+static USB_ClassInfo_MS_Device_t* CallbackMSInterfaceInfo;\r
 \r
-void MS_Device_ProcessControlPacket(USB_ClassInfo_MS_t* MSInterfaceInfo)\r
+void MS_Device_ProcessControlPacket(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)\r
 {\r
        if (!(Endpoint_IsSETUPReceived()))\r
          return;\r
          \r
-       if (USB_ControlRequest.wIndex != MSInterfaceInfo->InterfaceNumber)\r
+       if (USB_ControlRequest.wIndex != MSInterfaceInfo->Config.InterfaceNumber)\r
          return;\r
 \r
        switch (USB_ControlRequest.bRequest)\r
@@ -51,7 +51,7 @@ void MS_Device_ProcessControlPacket(USB_ClassInfo_MS_t* MSInterfaceInfo)
                        {\r
                                Endpoint_ClearSETUP();\r
 \r
-                               MSInterfaceInfo->IsMassStoreReset = true;                       \r
+                               MSInterfaceInfo->State.IsMassStoreReset = true;                 \r
 \r
                                while (!(Endpoint_IsINReady()));\r
                                Endpoint_ClearIN();\r
@@ -63,7 +63,7 @@ void MS_Device_ProcessControlPacket(USB_ClassInfo_MS_t* MSInterfaceInfo)
                        {\r
                                Endpoint_ClearSETUP();\r
 \r
-                               Endpoint_Write_Byte(MSInterfaceInfo->TotalLUNs - 1);\r
+                               Endpoint_Write_Byte(MSInterfaceInfo->Config.TotalLUNs - 1);\r
                                \r
                                Endpoint_ClearIN();\r
                                \r
@@ -75,17 +75,17 @@ void MS_Device_ProcessControlPacket(USB_ClassInfo_MS_t* MSInterfaceInfo)
        }\r
 }\r
 \r
-bool MS_Device_ConfigureEndpoints(USB_ClassInfo_MS_t* MSInterfaceInfo)\r
+bool MS_Device_ConfigureEndpoints(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)\r
 {\r
-       if (!(Endpoint_ConfigureEndpoint(MSInterfaceInfo->DataINEndpointNumber, EP_TYPE_BULK,\r
-                                                                ENDPOINT_DIR_IN, MSInterfaceInfo->DataINEndpointSize,\r
+       if (!(Endpoint_ConfigureEndpoint(MSInterfaceInfo->Config.DataINEndpointNumber, EP_TYPE_BULK,\r
+                                                                ENDPOINT_DIR_IN, MSInterfaceInfo->Config.DataINEndpointSize,\r
                                                                 ENDPOINT_BANK_SINGLE)))\r
        {\r
                return false;\r
        }\r
 \r
-       if (!(Endpoint_ConfigureEndpoint(MSInterfaceInfo->DataOUTEndpointNumber, EP_TYPE_BULK,\r
-                                        ENDPOINT_DIR_OUT, MSInterfaceInfo->DataOUTEndpointSize,\r
+       if (!(Endpoint_ConfigureEndpoint(MSInterfaceInfo->Config.DataOUTEndpointNumber, EP_TYPE_BULK,\r
+                                        ENDPOINT_DIR_OUT, MSInterfaceInfo->Config.DataOUTEndpointSize,\r
                                         ENDPOINT_BANK_SINGLE)))\r
        {\r
                return false;\r
@@ -94,109 +94,112 @@ bool MS_Device_ConfigureEndpoints(USB_ClassInfo_MS_t* MSInterfaceInfo)
        return true;\r
 }\r
 \r
-void MS_Device_USBTask(USB_ClassInfo_MS_t* MSInterfaceInfo)\r
+void MS_Device_USBTask(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)\r
 {\r
        if (!(USB_IsConnected))\r
          return;\r
 \r
-       Endpoint_SelectEndpoint(MSInterfaceInfo->DataOUTEndpointNumber);\r
+       Endpoint_SelectEndpoint(MSInterfaceInfo->Config.DataOUTEndpointNumber);\r
                \r
        if (Endpoint_IsReadWriteAllowed())\r
        {\r
                if (MS_Device_ReadInCommandBlock(MSInterfaceInfo))\r
                {\r
-                       if (MSInterfaceInfo->CommandBlock.Flags & MS_COMMAND_DIR_DATA_IN)\r
-                         Endpoint_SelectEndpoint(MSInterfaceInfo->DataINEndpointNumber);\r
+                       if (MSInterfaceInfo->State.CommandBlock.Flags & MS_COMMAND_DIR_DATA_IN)\r
+                         Endpoint_SelectEndpoint(MSInterfaceInfo->Config.DataINEndpointNumber);\r
                          \r
-                       MSInterfaceInfo->CommandStatus.Status              = CALLBACK_MS_Device_SCSICommandReceived(MSInterfaceInfo) ?\r
-                                                                             SCSI_Command_Pass : SCSI_Command_Fail;\r
-                       MSInterfaceInfo->CommandStatus.Signature           = MS_CSW_SIGNATURE;\r
-                       MSInterfaceInfo->CommandStatus.Tag                 = MSInterfaceInfo->CommandBlock.Tag;\r
-                       MSInterfaceInfo->CommandStatus.DataTransferResidue = MSInterfaceInfo->CommandBlock.DataTransferLength;\r
-\r
-                       if ((MSInterfaceInfo->CommandStatus.Status == SCSI_Command_Fail) && (MSInterfaceInfo->CommandStatus.DataTransferResidue))\r
-                         Endpoint_StallTransaction();\r
+                       MSInterfaceInfo->State.CommandStatus.Status = CALLBACK_MS_Device_SCSICommandReceived(MSInterfaceInfo) ?\r
+                                                                                        SCSI_Command_Pass : SCSI_Command_Fail;\r
+                       MSInterfaceInfo->State.CommandStatus.Signature           = MS_CSW_SIGNATURE;\r
+                       MSInterfaceInfo->State.CommandStatus.Tag                 = MSInterfaceInfo->State.CommandBlock.Tag;\r
+                       MSInterfaceInfo->State.CommandStatus.DataTransferResidue = MSInterfaceInfo->State.CommandBlock.DataTransferLength;\r
+\r
+                       if ((MSInterfaceInfo->State.CommandStatus.Status == SCSI_Command_Fail) &&\r
+                           (MSInterfaceInfo->State.CommandStatus.DataTransferResidue))\r
+                       {\r
+                               Endpoint_StallTransaction();\r
+                       }\r
                        \r
                        MS_Device_ReturnCommandStatus(MSInterfaceInfo);\r
                        \r
-                       if (MSInterfaceInfo->IsMassStoreReset)\r
+                       if (MSInterfaceInfo->State.IsMassStoreReset)\r
                        {\r
-                               Endpoint_ResetFIFO(MSInterfaceInfo->DataOUTEndpointNumber);\r
-                               Endpoint_ResetFIFO(MSInterfaceInfo->DataINEndpointNumber);\r
+                               Endpoint_ResetFIFO(MSInterfaceInfo->Config.DataOUTEndpointNumber);\r
+                               Endpoint_ResetFIFO(MSInterfaceInfo->Config.DataINEndpointNumber);\r
                                \r
-                               Endpoint_SelectEndpoint(MSInterfaceInfo->DataOUTEndpointNumber);\r
+                               Endpoint_SelectEndpoint(MSInterfaceInfo->Config.DataOUTEndpointNumber);\r
                                Endpoint_ClearStall();\r
-                               Endpoint_SelectEndpoint(MSInterfaceInfo->DataINEndpointNumber);\r
+                               Endpoint_SelectEndpoint(MSInterfaceInfo->Config.DataINEndpointNumber);\r
                                Endpoint_ClearStall();\r
 \r
-                               MSInterfaceInfo->IsMassStoreReset = false;\r
+                               MSInterfaceInfo->State.IsMassStoreReset = false;\r
                        }\r
                }\r
        }\r
 }\r
 \r
-static bool MS_Device_ReadInCommandBlock(USB_ClassInfo_MS_t* MSInterfaceInfo)\r
+static bool MS_Device_ReadInCommandBlock(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)\r
 {\r
-       Endpoint_SelectEndpoint(MSInterfaceInfo->DataOUTEndpointNumber);\r
+       Endpoint_SelectEndpoint(MSInterfaceInfo->Config.DataOUTEndpointNumber);\r
 \r
        CallbackMSInterfaceInfo = MSInterfaceInfo;\r
-       Endpoint_Read_Stream_LE(&MSInterfaceInfo->CommandBlock,\r
+       Endpoint_Read_Stream_LE(&MSInterfaceInfo->State.CommandBlock,\r
                                (sizeof(CommandBlockWrapper_t) - 16),\r
                                StreamCallback_MS_Device_AbortOnMassStoreReset);\r
 \r
-       if ((MSInterfaceInfo->CommandBlock.Signature         != MS_CBW_SIGNATURE)           ||\r
-           (MSInterfaceInfo->CommandBlock.LUN               >= MSInterfaceInfo->TotalLUNs) ||\r
-               (MSInterfaceInfo->CommandBlock.SCSICommandLength >  16))\r
+       if ((MSInterfaceInfo->State.CommandBlock.Signature         != MS_CBW_SIGNATURE)                  ||\r
+           (MSInterfaceInfo->State.CommandBlock.LUN               >= MSInterfaceInfo->Config.TotalLUNs) ||\r
+               (MSInterfaceInfo->State.CommandBlock.SCSICommandLength >  16))\r
        {\r
                Endpoint_StallTransaction();\r
-               Endpoint_SelectEndpoint(MSInterfaceInfo->DataINEndpointNumber);\r
+               Endpoint_SelectEndpoint(MSInterfaceInfo->Config.DataINEndpointNumber);\r
                Endpoint_StallTransaction();\r
                \r
                return false;\r
        }\r
 \r
        CallbackMSInterfaceInfo = MSInterfaceInfo;\r
-       Endpoint_Read_Stream_LE(&MSInterfaceInfo->CommandBlock.SCSICommandData,\r
-                               MSInterfaceInfo->CommandBlock.SCSICommandLength,\r
+       Endpoint_Read_Stream_LE(&MSInterfaceInfo->State.CommandBlock.SCSICommandData,\r
+                               MSInterfaceInfo->State.CommandBlock.SCSICommandLength,\r
                                StreamCallback_MS_Device_AbortOnMassStoreReset);\r
                                                        \r
        Endpoint_ClearOUT();\r
          \r
-       if (MSInterfaceInfo->IsMassStoreReset)\r
+       if (MSInterfaceInfo->State.IsMassStoreReset)\r
          return false;\r
 \r
        return true;\r
 }\r
 \r
-static void MS_Device_ReturnCommandStatus(USB_ClassInfo_MS_t* MSInterfaceInfo)\r
+static void MS_Device_ReturnCommandStatus(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)\r
 {\r
-       Endpoint_SelectEndpoint(MSInterfaceInfo->DataOUTEndpointNumber);\r
+       Endpoint_SelectEndpoint(MSInterfaceInfo->Config.DataOUTEndpointNumber);\r
 \r
        while (Endpoint_IsStalled())\r
        {\r
                USB_USBTask();\r
 \r
-               if (MSInterfaceInfo->IsMassStoreReset)\r
+               if (MSInterfaceInfo->State.IsMassStoreReset)\r
                  return;\r
        }\r
 \r
-       Endpoint_SelectEndpoint(MSInterfaceInfo->DataINEndpointNumber);\r
+       Endpoint_SelectEndpoint(MSInterfaceInfo->Config.DataINEndpointNumber);\r
 \r
        while (Endpoint_IsStalled())\r
        {\r
                USB_USBTask();\r
 \r
-               if (MSInterfaceInfo->IsMassStoreReset)\r
+               if (MSInterfaceInfo->State.IsMassStoreReset)\r
                  return;\r
        }\r
        \r
        CallbackMSInterfaceInfo = MSInterfaceInfo;\r
-       Endpoint_Write_Stream_LE(&MSInterfaceInfo->CommandStatus, sizeof(CommandStatusWrapper_t),\r
+       Endpoint_Write_Stream_LE(&MSInterfaceInfo->State.CommandStatus, sizeof(CommandStatusWrapper_t),\r
                                 StreamCallback_MS_Device_AbortOnMassStoreReset);\r
        \r
        Endpoint_ClearIN();\r
 \r
-       if (MSInterfaceInfo->IsMassStoreReset)\r
+       if (MSInterfaceInfo->State.IsMassStoreReset)\r
          return;\r
 }\r
 \r
@@ -204,7 +207,7 @@ static uint8_t StreamCallback_MS_Device_AbortOnMassStoreReset(void)
 {\r
        MS_Device_USBTask(CallbackMSInterfaceInfo);\r
 \r
-       if (CallbackMSInterfaceInfo->IsMassStoreReset)\r
+       if (CallbackMSInterfaceInfo->State.IsMassStoreReset)\r
          return STREAMCALLBACK_Abort;\r
        else\r
          return STREAMCALLBACK_Continue;\r