| /* ---------------------------------------------------------------------------- | |
| * ATMEL Microcontroller Software Support | |
| * ---------------------------------------------------------------------------- | |
| * Copyright (c) 2010, Atmel Corporation | |
| * | |
| * All rights reserved. | |
| * | |
| * Redistribution and use in source and binary forms, with or without | |
| * modification, are permitted provided that the following conditions are met: | |
| * | |
| * - Redistributions of source code must retain the above copyright notice, | |
| * this list of conditions and the disclaimer below. | |
| * | |
| * Atmel's name may not be used to endorse or promote products derived from | |
| * this software without specific prior written permission. | |
| * | |
| * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR | |
| * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | |
| * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE | |
| * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, | |
| * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, | |
| * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | |
| * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | |
| * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, | |
| * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
| * ---------------------------------------------------------------------------- | |
| */ | |
| /** \file | |
| * \section Purpose | |
| * | |
| * Definitions and methods for USB request structures described by the | |
| * USB specification. | |
| * | |
| * \section Usage | |
| * | |
| */ | |
| #ifndef _USBREQUESTS_H_ | |
| #define _USBREQUESTS_H_ | |
| /** \addtogroup usb_general | |
| * @{ | |
| * \addtogroup usb_request USB Requests | |
| * @{ | |
| */ | |
| /*--------------------------------------------------------------------------- | |
| * Headers | |
| *---------------------------------------------------------------------------*/ | |
| /* These headers were introduced in C99 by working group | |
| * ISO/IEC JTC1/SC22/WG14. | |
| */ | |
| #include <stdint.h> | |
| /*--------------------------------------------------------------------------- | |
| * Definitions | |
| *---------------------------------------------------------------------------*/ | |
| /*----------- Generic Request ------------*/ | |
| /** \addtogroup usb_request_define USB Generic Request definitions | |
| * @{ | |
| * This section lists the codes of USB generic request. | |
| * | |
| * - \ref usb_request_code USB Request codes | |
| * - \ref USBGenericRequest_GETSTATUS | |
| * - \ref USBGenericRequest_CLEARFEATURE | |
| * - \ref USBGenericRequest_SETFEATURE | |
| * - \ref USBGenericRequest_SETADDRESS | |
| * - \ref USBGenericRequest_GETDESCRIPTOR | |
| * - \ref USBGenericRequest_SETDESCRIPTOR | |
| * - \ref USBGenericRequest_GETCONFIGURATION | |
| * - \ref USBGenericRequest_SETCONFIGURATION | |
| * - \ref USBGenericRequest_GETINTERFACE | |
| * - \ref USBGenericRequest_SETINTERFACE | |
| * - \ref USBGenericRequest_SYNCHFRAME | |
| * | |
| * - \ref usb_request_recipient USB Request Recipients | |
| * - \ref USBGenericRequest_DEVICE | |
| * - \ref USBGenericRequest_INTERFACE | |
| * - \ref USBGenericRequest_ENDPOINT | |
| * - \ref USBGenericRequest_OTHER | |
| * | |
| * - \ref usb_request_type USB Request Types | |
| * - \ref USBGenericRequest_STANDARD | |
| * - \ref USBGenericRequest_CLASS | |
| * - \ref USBGenericRequest_VENDOR | |
| * | |
| * - \ref usb_request_dir USB Request Directions | |
| * - \ref USBGenericRequest_IN | |
| * - \ref USBGenericRequest_OUT | |
| */ | |
| /** \addtogroup usb_request_code USB Request codes | |
| * @{ | |
| * This section lists the USB generic request codes. | |
| * - \ref USBGenericRequest_GETSTATUS | |
| * - \ref USBGenericRequest_CLEARFEATURE | |
| * - \ref USBGenericRequest_SETFEATURE | |
| * - \ref USBGenericRequest_SETADDRESS | |
| * - \ref USBGenericRequest_GETDESCRIPTOR | |
| * - \ref USBGenericRequest_SETDESCRIPTOR | |
| * - \ref USBGenericRequest_GETCONFIGURATION | |
| * - \ref USBGenericRequest_SETCONFIGURATION | |
| * - \ref USBGenericRequest_GETINTERFACE | |
| * - \ref USBGenericRequest_SETINTERFACE | |
| * - \ref USBGenericRequest_SYNCHFRAME | |
| */ | |
| /** GET_STATUS request code. */ | |
| #define USBGenericRequest_GETSTATUS 0 | |
| /** CLEAR_FEATURE request code. */ | |
| #define USBGenericRequest_CLEARFEATURE 1 | |
| /** SET_FEATURE request code. */ | |
| #define USBGenericRequest_SETFEATURE 3 | |
| /** SET_ADDRESS request code. */ | |
| #define USBGenericRequest_SETADDRESS 5 | |
| /** GET_DESCRIPTOR request code. */ | |
| #define USBGenericRequest_GETDESCRIPTOR 6 | |
| /** SET_DESCRIPTOR request code. */ | |
| #define USBGenericRequest_SETDESCRIPTOR 7 | |
| /** GET_CONFIGURATION request code. */ | |
| #define USBGenericRequest_GETCONFIGURATION 8 | |
| /** SET_CONFIGURATION request code. */ | |
| #define USBGenericRequest_SETCONFIGURATION 9 | |
| /** GET_INTERFACE request code. */ | |
| #define USBGenericRequest_GETINTERFACE 10 | |
| /** SET_INTERFACE request code. */ | |
| #define USBGenericRequest_SETINTERFACE 11 | |
| /** SYNCH_FRAME request code. */ | |
| #define USBGenericRequest_SYNCHFRAME 12 | |
| /** @}*/ | |
| /** \addtogroup usb_request_recipient USB Request Recipients | |
| * @{ | |
| * This section lists codes of USB request recipients. | |
| * - \ref USBGenericRequest_DEVICE | |
| * - \ref USBGenericRequest_INTERFACE | |
| * - \ref USBGenericRequest_ENDPOINT | |
| * - \ref USBGenericRequest_OTHER | |
| */ | |
| /** Recipient is the whole device. */ | |
| #define USBGenericRequest_DEVICE 0 | |
| /** Recipient is an interface. */ | |
| #define USBGenericRequest_INTERFACE 1 | |
| /** Recipient is an endpoint. */ | |
| #define USBGenericRequest_ENDPOINT 2 | |
| /** Recipient is another entity. */ | |
| #define USBGenericRequest_OTHER 3 | |
| /** @}*/ | |
| /** \addtogroup usb_request_type USB Request Types | |
| * @{ | |
| * This section lists codes of USB request types. | |
| * - \ref USBGenericRequest_STANDARD | |
| * - \ref USBGenericRequest_CLASS | |
| * - \ref USBGenericRequest_VENDOR | |
| */ | |
| /** Request is standard. */ | |
| #define USBGenericRequest_STANDARD 0 | |
| /** Request is class-specific. */ | |
| #define USBGenericRequest_CLASS 1 | |
| /** Request is vendor-specific. */ | |
| #define USBGenericRequest_VENDOR 2 | |
| /** @}*/ | |
| /** \addtogroup usb_request_dir USB Request Directions | |
| * @{ | |
| * This section lists codes of USB request directions. | |
| * - \ref USBGenericRequest_IN | |
| * - \ref USBGenericRequest_OUT | |
| */ | |
| /** Transfer occurs from device to the host. */ | |
| #define USBGenericRequest_OUT 0 | |
| /** Transfer occurs from the host to the device. */ | |
| #define USBGenericRequest_IN 1 | |
| /** @}*/ | |
| /** @}*/ | |
| /*----------- Feature Request ------------*/ | |
| /** \addtogroup usb_feature_def USB Feature Request Definitions | |
| * @{ | |
| * This section lists codes of USB Feature Request | |
| * | |
| * - \ref usb_feature_sel USB Feature selectors | |
| * - \ref USBFeatureRequest_ENDPOINTHALT | |
| * - \ref USBFeatureRequest_DEVICEREMOTEWAKEUP | |
| * - \ref USBFeatureRequest_TESTMODE | |
| * | |
| * - \ref usb_test_sel USB Test mode selectors | |
| * - \ref USBFeatureRequest_TESTJ | |
| * - \ref USBFeatureRequest_TESTK | |
| * - \ref USBFeatureRequest_TESTSE0NAK | |
| * - \ref USBFeatureRequest_TESTPACKET | |
| * - \ref USBFeatureRequest_TESTFORCEENABLE | |
| * - \ref USBFeatureRequest_TESTSENDZLP | |
| */ | |
| /** \addtogroup usb_feature_sel USB Feature selectors | |
| * @{ | |
| * This section lists codes of USB feature selectors. | |
| * - \ref USBFeatureRequest_ENDPOINTHALT | |
| * - \ref USBFeatureRequest_DEVICEREMOTEWAKEUP | |
| * - \ref USBFeatureRequest_TESTMODE | |
| */ | |
| /** Halt feature of an endpoint. */ | |
| #define USBFeatureRequest_ENDPOINTHALT 0 | |
| /** Remote wake-up feature of the device. */ | |
| #define USBFeatureRequest_DEVICEREMOTEWAKEUP 1 | |
| /** Test mode of the device. */ | |
| #define USBFeatureRequest_TESTMODE 2 | |
| /** OTG set feature */ | |
| #define USBFeatureRequest_OTG 0x0B | |
| /** OTG b_hnp_enable */ | |
| #define USBFeatureRequest_OTG_B_HNP_ENABLE 3 | |
| /** OTG a_hnp_support */ | |
| #define USBFeatureRequest_OTG_A_HNP_SUPPORT 4 | |
| /** OTG a_alt_hnp_support */ | |
| #define USBFeatureRequest_OTG_A_ALT_HNP_SUPPORT 5 | |
| /** @}*/ | |
| /** \addtogroup usb_test_sel USB Test mode selectors | |
| * @{ | |
| * This section lists codes of USB high speed test mode selectors. | |
| * - \ref USBFeatureRequest_TESTJ | |
| * - \ref USBFeatureRequest_TESTK | |
| * - \ref USBFeatureRequest_TESTSE0NAK | |
| * - \ref USBFeatureRequest_TESTPACKET | |
| * - \ref USBFeatureRequest_TESTFORCEENABLE | |
| * - \ref USBFeatureRequest_TESTSENDZLP | |
| */ | |
| /** Tests the high-output drive level on the D+ line. */ | |
| #define USBFeatureRequest_TESTJ 1 | |
| /** Tests the high-output drive level on the D- line. */ | |
| #define USBFeatureRequest_TESTK 2 | |
| /** Tests the output impedance, low-level output voltage and loading | |
| characteristics. */ | |
| #define USBFeatureRequest_TESTSE0NAK 3 | |
| /** Tests rise and fall times, eye patterns and jitter. */ | |
| #define USBFeatureRequest_TESTPACKET 4 | |
| /** Tests the hub disconnect detection. */ | |
| #define USBFeatureRequest_TESTFORCEENABLE 5 | |
| /** Send a ZLP in Test Mode. */ | |
| #define USBFeatureRequest_TESTSENDZLP 6 | |
| /** @}*/ | |
| /** @}*/ | |
| /*--------------------------------------------------------------------------- | |
| * Types | |
| *---------------------------------------------------------------------------*/ | |
| /* | |
| * Function types | |
| */ | |
| /* | |
| * Descriptor structs types | |
| */ | |
| #pragma pack(1) | |
| #if defined ( __CC_ARM ) /* Keil ¦ÌVision 4 */ | |
| #elif defined ( __ICCARM__ ) /* IAR Ewarm 5.41+ */ | |
| #define __attribute__(...) | |
| #elif defined ( __GNUC__ ) /* GCC CS3 2009q3-68 */ | |
| #endif | |
| /** | |
| * Generic USB SETUP request sent over Control endpoints. | |
| */ | |
| typedef struct { | |
| /** Type of request | |
| * \sa usb_request_recipient "USB Request Recipients" | |
| * \sa usb_request_type "USB Request Types" | |
| * \sa usb_request_dir "USB Request Directions" */ | |
| uint8_t bmRequestType:8; | |
| /** Request code | |
| * \sa usb_request_code "USB Request Codes" */ | |
| uint8_t bRequest:8; | |
| /** Request-specific value parameter. */ | |
| uint16_t wValue:16; | |
| /** Request-specific index parameter. */ | |
| uint16_t wIndex:16; | |
| /** Expected length (in bytes) of the data phase. */ | |
| uint16_t wLength:16; | |
| } USBGenericRequest; | |
| #pragma pack() | |
| /*--------------------------------------------------------------------------- | |
| * Exported Functions | |
| *---------------------------------------------------------------------------*/ | |
| extern uint8_t USBGenericRequest_GetType( | |
| const USBGenericRequest *request); | |
| extern uint8_t USBGenericRequest_GetRequest( | |
| const USBGenericRequest *request); | |
| extern uint16_t USBGenericRequest_GetValue( | |
| const USBGenericRequest *request); | |
| extern uint16_t USBGenericRequest_GetIndex( | |
| const USBGenericRequest *request); | |
| extern uint16_t USBGenericRequest_GetLength( | |
| const USBGenericRequest *request); | |
| extern uint8_t USBGenericRequest_GetEndpointNumber( | |
| const USBGenericRequest *request); | |
| extern uint8_t USBGenericRequest_GetRecipient( | |
| const USBGenericRequest *request); | |
| extern uint8_t USBGenericRequest_GetDirection( | |
| const USBGenericRequest *request); | |
| extern uint8_t USBGetDescriptorRequest_GetDescriptorType( | |
| const USBGenericRequest *request); | |
| extern uint8_t USBGetDescriptorRequest_GetDescriptorIndex( | |
| const USBGenericRequest *request); | |
| extern uint8_t USBSetAddressRequest_GetAddress( | |
| const USBGenericRequest *request); | |
| extern uint8_t USBSetConfigurationRequest_GetConfiguration( | |
| const USBGenericRequest *request); | |
| extern uint8_t USBInterfaceRequest_GetInterface( | |
| const USBGenericRequest *request); | |
| extern uint8_t USBInterfaceRequest_GetAlternateSetting( | |
| const USBGenericRequest *request); | |
| extern uint8_t USBFeatureRequest_GetFeatureSelector( | |
| const USBGenericRequest *request); | |
| extern uint8_t USBFeatureRequest_GetTestSelector( | |
| const USBGenericRequest *request); | |
| /** @}*/ | |
| /**@}*/ | |
| #endif /* #ifndef _USBREQUESTS_H_ */ | |