+ uint8_t DataINEndpointNumber; /**< Endpoint number of the Mass Storage interface's IN data endpoint */\r
+ uint16_t DataINEndpointSize; /**< Size in bytes of the Mass Storage interface's IN data endpoint */\r
+ bool DataINEndpointDoubleBank; /** Indicates if the Mass Storage interface's IN data endpoint should use double banking */\r
+\r
+ uint8_t DataOUTEndpointNumber; /**< Endpoint number of the Mass Storage interface's OUT data endpoint */\r
+ uint16_t DataOUTEndpointSize; /**< Size in bytes of the Mass Storage interface's OUT data endpoint */\r
+ bool DataOUTEndpointDoubleBank; /** Indicates if the Mass Storage interface's OUT data endpoint should use double banking */\r
+\r
+ uint8_t TotalLUNs; /**< Total number of logical drives in the Mass Storage interface */\r
+ } Config; /**< Config data for the USB class interface within the device. All elements in this section\r
+ * <b>must</b> be set or the interface will fail to enumerate and operate correctly.\r
+ */\r
+ struct\r
+ {\r
+ MS_CommandBlockWrapper_t CommandBlock; /**< Mass Storage class command block structure, stores the received SCSI\r
+ * command from the host which is to be processed\r
+ */\r
+ MS_CommandStatusWrapper_t CommandStatus; /**< Mass Storage class command status structure, set elements to indicate\r
+ * the issued command's success or failure to the host\r
+ */\r
+ volatile bool IsMassStoreReset; /**< Flag indicating that the host has requested that the Mass Storage interface be reset\r
+ * and that all current Mass Storage operations should immediately abort\r
+ */\r
+ } State; /**< State data for the USB class interface within the device. All elements in this section\r
+ * are reset to their defaults when the interface is enumerated.\r
+ */\r
+ } USB_ClassInfo_MS_Device_t;\r
+\r
+ /* Function Prototypes: */\r
+ /** Configures the endpoints of a given Mass Storage interface, ready for use. This should be linked to the library\r
+ * \ref EVENT_USB_Device_ConfigurationChanged() event so that the endpoints are configured when the configuration\r
+ * containing the given Mass Storage interface is selected.\r
+ *\r
+ * \param[in,out] MSInterfaceInfo Pointer to a structure containing a Mass Storage Class configuration and state\r
+ *\r
+ * \return Boolean true if the endpoints were successfully configured, false otherwise\r
+ */\r
+ bool MS_Device_ConfigureEndpoints(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);\r
+ \r
+ /** Processes incoming control requests from the host, that are directed to the given Mass Storage class interface. This should be\r
+ * linked to the library \ref EVENT_USB_Device_UnhandledControlRequest() event.\r
+ *\r
+ * \param[in,out] MSInterfaceInfo Pointer to a structure containing a Mass Storage Class configuration and state\r
+ */ \r
+ void MS_Device_ProcessControlRequest(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);\r
+\r
+ /** General management task for a given Mass Storage class interface, required for the correct operation of the interface. This should\r
+ * be called frequently in the main program loop, before the master USB management task \ref USB_USBTask().\r
+ *\r
+ * \param[in,out] MSInterfaceInfo Pointer to a structure containing a Mass Storage configuration and state\r
+ */\r
+ void MS_Device_USBTask(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);\r
+ \r
+ /** Mass Storage class driver callback for the user processing of a received SCSI command. This callback will fire each time the\r
+ * host sends a SCSI command which requires processing by the user application. Inside this callback the user is responsible\r
+ * for the processing of the received SCSI command from the host. The SCSI command is available in the CommandBlock structure\r
+ * inside the Mass Storage class state structure passed as a parameter to the callback function.\r
+ *\r
+ * \param[in,out] MSInterfaceInfo Pointer to a structure containing a Mass Storage Class configuration and state\r
+ *\r
+ * \return Boolean true if the SCSI command was successfully processed, false otherwise\r
+ */\r
+ bool CALLBACK_MS_Device_SCSICommandReceived(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);\r
+ \r
+ /* Private Interface - For use in library only: */\r
+ #if !defined(__DOXYGEN__)\r
+ /* Function Prototypes: */\r
+ #if defined(INCLUDE_FROM_MS_CLASS_DEVICE_C)\r
+ static void MS_Device_ReturnCommandStatus(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);\r
+ static bool MS_Device_ReadInCommandBlock(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);\r
+ static uint8_t StreamCallback_MS_Device_AbortOnMassStoreReset(void);\r
+ #endif\r