\r
static USB_ClassInfo_MS_Device_t* CallbackMSInterfaceInfo;\r
\r
-void MS_Device_ProcessControlPacket(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)\r
+void MS_Device_ProcessControlRequest(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)\r
{\r
if (!(Endpoint_IsSETUPReceived()))\r
return;\r
\r
MSInterfaceInfo->State.IsMassStoreReset = true; \r
\r
- while (!(Endpoint_IsINReady()));\r
- Endpoint_ClearIN();\r
+ Endpoint_ClearStatusStage();\r
}\r
\r
break;\r
{\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
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
+ MSInterfaceInfo->Config.DataINEndpointDoubleBank ? ENDPOINT_BANK_DOUBLE : ENDPOINT_BANK_SINGLE)))\r
{\r
return false;\r
}\r
\r
if (!(Endpoint_ConfigureEndpoint(MSInterfaceInfo->Config.DataOUTEndpointNumber, EP_TYPE_BULK,\r
ENDPOINT_DIR_OUT, MSInterfaceInfo->Config.DataOUTEndpointSize,\r
- ENDPOINT_BANK_SINGLE)))\r
+ MSInterfaceInfo->Config.DataOUTEndpointDoubleBank ? ENDPOINT_BANK_DOUBLE : ENDPOINT_BANK_SINGLE)))\r
{\r
return false;\r
}\r
\r
void MS_Device_USBTask(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)\r
{\r
- if (!(USB_IsConnected) || !(USB_ConfigurationNumber))\r
+ if (USB_DeviceState != DEVICE_STATE_Configured)\r
return;\r
\r
Endpoint_SelectEndpoint(MSInterfaceInfo->Config.DataOUTEndpointNumber);\r
}\r
\r
MS_Device_ReturnCommandStatus(MSInterfaceInfo);\r
- \r
- if (MSInterfaceInfo->State.IsMassStoreReset)\r
- {\r
- Endpoint_ResetFIFO(MSInterfaceInfo->Config.DataOUTEndpointNumber);\r
- Endpoint_ResetFIFO(MSInterfaceInfo->Config.DataINEndpointNumber);\r
- \r
- Endpoint_SelectEndpoint(MSInterfaceInfo->Config.DataOUTEndpointNumber);\r
- Endpoint_ClearStall();\r
- Endpoint_SelectEndpoint(MSInterfaceInfo->Config.DataINEndpointNumber);\r
- Endpoint_ClearStall();\r
- }\r
}\r
}\r
\r
- MSInterfaceInfo->State.IsMassStoreReset = false;\r
+ if (MSInterfaceInfo->State.IsMassStoreReset)\r
+ {\r
+ Endpoint_ResetFIFO(MSInterfaceInfo->Config.DataOUTEndpointNumber);\r
+ Endpoint_ResetFIFO(MSInterfaceInfo->Config.DataINEndpointNumber);\r
+ \r
+ Endpoint_SelectEndpoint(MSInterfaceInfo->Config.DataOUTEndpointNumber);\r
+ Endpoint_ClearStall();\r
+ Endpoint_SelectEndpoint(MSInterfaceInfo->Config.DataINEndpointNumber);\r
+ Endpoint_ClearStall();\r
+\r
+ MSInterfaceInfo->State.IsMassStoreReset = false;\r
+ }\r
}\r
\r
static bool MS_Device_ReadInCommandBlock(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)\r
StreamCallback_MS_Device_AbortOnMassStoreReset);\r
\r
Endpoint_ClearOUT();\r
- \r
- if (MSInterfaceInfo->State.IsMassStoreReset)\r
- return false;\r
-\r
- return true;\r
+ \r
+ return !(MSInterfaceInfo->State.IsMassStoreReset);\r
}\r
\r
static void MS_Device_ReturnCommandStatus(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)\r