/* ---------------------------------------------------------------------------- * 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 /*--------------------------------------------------------------------------- * 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 */ #ifdef __ICCARM__ /* IAR */ #pragma pack(1) /* IAR */ #define __attribute__(...) /* IAR */ #endif /* IAR */ /** * 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; #ifdef __ICCARM__ /* IAR */ #pragma pack() /* IAR */ #endif /* IAR */ /*--------------------------------------------------------------------------- * 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_ */