SAMV71 Xplained Ultra Software Package 1.5

HIDMSDDriver.h

Go to the documentation of this file.
00001 /* ---------------------------------------------------------------------------- */
00002 /*                  Atmel Microcontroller Software Support                      */
00003 /*                       SAM Software Package License                           */
00004 /* ---------------------------------------------------------------------------- */
00005 /* Copyright (c) 2015, Atmel Corporation                                        */
00006 /*                                                                              */
00007 /* All rights reserved.                                                         */
00008 /*                                                                              */
00009 /* Redistribution and use in source and binary forms, with or without           */
00010 /* modification, are permitted provided that the following condition is met:    */
00011 /*                                                                              */
00012 /* - Redistributions of source code must retain the above copyright notice,     */
00013 /* this list of conditions and the disclaimer below.                            */
00014 /*                                                                              */
00015 /* Atmel's name may not be used to endorse or promote products derived from     */
00016 /* this software without specific prior written permission.                     */
00017 /*                                                                              */
00018 /* DISCLAIMER:  THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR   */
00019 /* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */
00020 /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE   */
00021 /* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,      */
00022 /* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT */
00023 /* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,  */
00024 /* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF    */
00025 /* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING         */
00026 /* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */
00027 /* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.                           */
00028 /* ---------------------------------------------------------------------------- */
00029 
00030 /** \file
00031  *
00032  * \section Purpose
00033  *
00034  *   Definitions and methods for USB HID + MSD device implement.
00035  * 
00036  * \section Usage
00037  * 
00038  * -# Initialize USB function specified driver ( for MSD currently )
00039  *  - MSDDFunctionDriver_Initialize()
00040  *
00041  * -# Initialize USB HIDMSD driver and USB driver
00042  *  - HIDMSDDDriver_Initialize()
00043  *
00044  * -# Handle and dispatch USB requests
00045  *  - HIDMSDDDriver_RequestHandler()
00046  *
00047  * -# Try starting a remote wake-up sequence
00048  *  - HIDMSDDDriver_RemoteWakeUp()
00049  */
00050 
00051 #ifndef HIDMSDDDRIVER_H
00052 #define HIDMSDDDRIVER_H
00053 
00054 /** \addtogroup usbd_composite_hidmsd
00055  *@{
00056  */
00057 
00058 /*---------------------------------------------------------------------------
00059  *         Headers
00060  *---------------------------------------------------------------------------*/
00061 
00062 #include <USBRequests.h>
00063 #include <HIDDescriptors.h>
00064 #include <MSDescriptors.h>
00065 #include <MSDLun.h>
00066 #include "USBD.h"
00067 #include <USBDDriver.h>
00068 
00069 /*---------------------------------------------------------------------------
00070  *         Constants
00071  *---------------------------------------------------------------------------*/
00072 
00073 /** \addtogroup usbd_hid_msd_desc USB HID(Kbd) + MSD Descriptors define
00074  *      @{
00075  */
00076 /** Number of interfaces of the device */
00077 #define HIDMSDDriverDescriptors_NUMINTERFACE       2
00078 /** Number of the HID (Keyboard) interface. */
00079 #define HIDMSDDriverDescriptors_HID_INTERFACE      0
00080 /** Number of the MSD interface. */
00081 #define HIDMSDDriverDescriptors_MSD_INTERFACE      1
00082 /**     @}*/
00083 
00084 /*---------------------------------------------------------------------------
00085  *         Types
00086  *---------------------------------------------------------------------------*/
00087 #pragma pack(1)
00088 #if defined   ( __CC_ARM   ) /* Keil ¦̀Vision 4 */
00089 #elif defined ( __ICCARM__ ) /* IAR Ewarm */
00090 #define __attribute__(...)
00091 #define __packed__  packed
00092 #elif defined (  __GNUC__  ) /* GCC CS3 */
00093 #define __packed__  aligned(1)
00094 #endif
00095 /**
00096  * \typedef HidMsdDriverConfigurationDescriptors
00097  * \brief Configuration descriptor list for a device implementing a
00098  *        HID MSD composite driver.
00099  */
00100 typedef struct _HidMsdDriverConfigurationDescriptors {
00101 
00102     /** Standard configuration descriptor. */
00103     USBConfigurationDescriptor configuration;
00104 
00105     /* --- HID */
00106     USBInterfaceDescriptor hidInterface;
00107     HIDDescriptor1 hid;
00108     USBEndpointDescriptor hidInterruptIn;
00109     USBEndpointDescriptor hidInterruptOut;
00110 
00111     /* --- MSD */
00112     /** Mass storage interface descriptor. */
00113     USBInterfaceDescriptor msdInterface;
00114     /** Bulk-out endpoint descriptor. */
00115     USBEndpointDescriptor msdBulkOut;
00116     /** Bulk-in endpoint descriptor. */
00117     USBEndpointDescriptor msdBulkIn;
00118 
00119 } __attribute__ ((__packed__)) HidMsdDriverConfigurationDescriptors;
00120 
00121 #pragma pack()
00122 
00123 /*---------------------------------------------------------------------------
00124  *         Exported functions
00125  *---------------------------------------------------------------------------*/
00126 
00127 /* -HIDMSD Composite device */
00128 extern void HIDMSDDriver_Initialize(
00129     const USBDDriverDescriptors *pDescriptors,
00130     MSDLun *pLuns, uint8_t numLuns);
00131 
00132 extern void HIDMSDDriver_ConfigurationChangedHandler(uint8_t cfgnum);
00133 
00134 extern void HIDMSDDriver_RequestHandler(const USBGenericRequest *request);
00135 
00136 extern void HIDMSDDriver_RemoteWakeUp(void);
00137 
00138 /**@}*/
00139 #endif //#ifndef HIDMSDDDRIVER_H
00140 
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines