MassStorage.h 6.82 KB
 Dean Camera committed Jun 01, 2009 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 /* LUFA Library Copyright (C) Dean Camera, 2009. dean [at] fourwalledcubicle [dot] com www.fourwalledcubicle.com */ /* Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com) Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that the copyright notice and this permission notice and warranty disclaimer appear in supporting documentation, and that the name of the author not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. The author disclaim all warranties with regard to this software, including all implied warranties of merchantability and fitness. In no event shall the author be liable for any special, indirect or consequential damages or any damages whatsoever resulting from loss of use, data or profits, whether in an action of contract, negligence or other tortious action, arising out of or in connection with the use or performance of this software. */  Dean Camera committed Jun 14, 2009 31 32 /** \ingroup Group_USBClassMS * @defgroup Group_USBClassMSDevice Mass Storage Class Device Mode Driver  Dean Camera committed Jun 04, 2009 33 34  * * \section Module Description  Dean Camera committed Jun 14, 2009 35  * Device Mode USB Class driver framework interface, for the Mass Storage USB Class driver.  Dean Camera committed Jun 04, 2009 36 37 38 39  * * @{ */  Dean Camera committed Jun 14, 2009 40 41 #ifndef _MS_CLASS_DEVICE_H_ #define _MS_CLASS_DEVICE_H_  Dean Camera committed Jun 01, 2009 42 43 44  /* Includes: */ #include "../../USB.h"  Dean Camera committed Jun 14, 2009 45  #include "../Common/MassStorage.h"  Dean Camera committed Jun 01, 2009 46 47 48  #include  Dean Camera committed Jun 04, 2009 49 50 51 52 53  /* Enable C linkage for C++ Compilers: */ #if defined(__cplusplus) extern "C" { #endif  Dean Camera committed Jun 15, 2009 54  /* Public Interface - May be used in end-application: */  55  /* Type Defines: */  Dean Camera committed Jun 18, 2009 56 57 58 59 60 61  /** Class state structure. An instance of this structure should be made for each Mass Storage interface * within the user application, and passed to each of the Mass Storage class driver functions as the * MSInterfaceInfo parameter. This stores each Mass Storage interface's configuration and state information. */ typedef struct {  62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90  const struct { uint8_t InterfaceNumber; /**< Interface number of the Mass Storage interface within the device */ uint8_t DataINEndpointNumber; /**< Endpoint number of the Mass Storage interface's IN data endpoint */ uint16_t DataINEndpointSize; /**< Size in bytes of the Mass Storage interface's IN data endpoint */ uint8_t DataOUTEndpointNumber; /**< Endpoint number of the Mass Storage interface's OUT data endpoint */ uint16_t DataOUTEndpointSize; /**< Size in bytes of the Mass Storage interface's OUT data endpoint */ uint8_t TotalLUNs; /**< Total number of logical drives in the Mass Storage interface */ } Config; /**< Config data for the USB class interface within the device. All elements in this section * must be set or the interface will fail to enumerate and operate correctly. */ struct { MS_CommandBlockWrapper_t CommandBlock; /**< Mass Storage class command block structure, stores the received SCSI * command from the host which is to be processed */ MS_CommandStatusWrapper_t CommandStatus; /**< Mass Storage class command status structure, set elements to indicate * the issued command's success or failure to the host */ bool IsMassStoreReset; /**< Flag indicating that the host has requested that the Mass Storage interface be reset * and that all current Mass Storage operations should immediately abort */ } State; /**< State data for the USB class interface within the device. All elements in this section * may be set to initial values, but may also be ignored to default to sane values when * the interface is enumerated. */  Dean Camera committed Jun 18, 2009 91 92  } USB_ClassInfo_MS_Device_t;  Dean Camera committed Jun 15, 2009 93 94 95 96 97 98 99 100 101  /* Function Prototypes: */ /** Configures the endpoints of a given Mass Storage interface, ready for use. This should be linked to the library * \ref EVENT_USB_ConfigurationChanged() event so that the endpoints are configured when the configuration * containing the given Mass Storage interface is selected. * * \param MSInterfaceInfo Pointer to a structure containing a Mass Storage Class configuration and state. * * \return Boolean true if the endpoints were sucessfully configured, false otherwise */  Dean Camera committed Jun 18, 2009 102  bool MS_Device_ConfigureEndpoints(USB_ClassInfo_MS_Device_t* MSInterfaceInfo);  Dean Camera committed Jun 15, 2009 103 104 105 106 107 108  /** Processes incomming control requests from the host, that are directed to the given Mass Storage class interface. This should be * linked to the library \ref EVENT_USB_UnhandledControlPacket() event. * * \param MSInterfaceInfo Pointer to a structure containing a Mass Storage Class configuration and state. */  Dean Camera committed Jun 18, 2009 109  void MS_Device_ProcessControlPacket(USB_ClassInfo_MS_Device_t* MSInterfaceInfo);  Dean Camera committed Jun 08, 2009 110   Dean Camera committed Jun 15, 2009 111 112 113 114 115  /** General management task for a given Mass Storage class interface, required for the correct operation of the interface. This should * be called frequently in the main program loop, before the master USB management task \ref USB_USBTask(). * * \param MSInterfaceInfo Pointer to a structure containing a Mass Storage configuration and state. */  Dean Camera committed Jun 18, 2009 116  void MS_Device_USBTask(USB_ClassInfo_MS_Device_t* MSInterfaceInfo);  Dean Camera committed Jun 15, 2009 117 118 119 120 121 122 123 124 125 126  /** Mass Storage class driver callback for the user processing of a received SCSI command. This callback will fire each time the * host sends a SCSI command which requires processing by the user application. Inside this callback the user is responsible * for the processing of the received SCSI command from the host. The SCSI command is available in the CommandBlock structure * inside the Mass Storage class state structure passed as a parameter to the callback function. * * \param MSInterfaceInfo Pointer to a structure containing a Mass Storage Class configuration and state. * * \return Boolean true if the SCSI command was successfully processed, false otherwise */  Dean Camera committed Jun 18, 2009 127  bool CALLBACK_MS_Device_SCSICommandReceived(USB_ClassInfo_MS_Device_t* MSInterfaceInfo);  Dean Camera committed Jun 15, 2009 128 129 130 131 132  /* Private Interface - For use in library only: */ #if !defined(__DOXYGEN__) /* Function Prototypes: */ #if defined(INCLUDE_FROM_MS_CLASS_DEVICE_C)  Dean Camera committed Jun 18, 2009 133 134  static void MS_Device_ReturnCommandStatus(USB_ClassInfo_MS_Device_t* MSInterfaceInfo); static bool MS_Device_ReadInCommandBlock(USB_ClassInfo_MS_Device_t* MSInterfaceInfo);  Dean Camera committed Jun 15, 2009 135 136  static uint8_t StreamCallback_MS_Device_AbortOnMassStoreReset(void); #endif  Dean Camera committed Jun 01, 2009 137   Dean Camera committed Jun 15, 2009 138  #endif  Dean Camera committed Jun 01, 2009 139   Dean Camera committed Jun 04, 2009 140 141 142 143 144  /* Disable C linkage for C++ Compilers: */ #if defined(__cplusplus) } #endif  Dean Camera committed Jun 01, 2009 145 #endif  Dean Camera committed Jun 04, 2009 146 147  /** @} */