#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
{\r
Endpoint_ClearSETUP();\r
\r
- MSInterfaceInfo->IsMassStoreReset = true; \r
+ MSInterfaceInfo->State.IsMassStoreReset = true; \r
\r
while (!(Endpoint_IsINReady()));\r
Endpoint_ClearIN();\r
{\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
}\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
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
{\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