653 lines
		
	
	
		
			29 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			653 lines
		
	
	
		
			29 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								/***********************************************************************
							 | 
						|||
| 
								 | 
							
								* $Id:: mw_usbd.h 197 2011-06-12 20:22:41Z usb06052                           $
							 | 
						|||
| 
								 | 
							
								*
							 | 
						|||
| 
								 | 
							
								* Project: USB device ROM Stack
							 | 
						|||
| 
								 | 
							
								*
							 | 
						|||
| 
								 | 
							
								* Description:
							 | 
						|||
| 
								 | 
							
								*     USB Definitions.
							 | 
						|||
| 
								 | 
							
								*
							 | 
						|||
| 
								 | 
							
								***********************************************************************
							 | 
						|||
| 
								 | 
							
								*   Copyright(C) 2011, NXP Semiconductor
							 | 
						|||
| 
								 | 
							
								*   All rights reserved.
							 | 
						|||
| 
								 | 
							
								*
							 | 
						|||
| 
								 | 
							
								* Software that is described herein is for illustrative purposes only
							 | 
						|||
| 
								 | 
							
								* which provides customers with programming information regarding the
							 | 
						|||
| 
								 | 
							
								* products. This software is supplied "AS IS" without any warranties.
							 | 
						|||
| 
								 | 
							
								* NXP Semiconductors assumes no responsibility or liability for the
							 | 
						|||
| 
								 | 
							
								* use of the software, conveys no license or title under any patent,
							 | 
						|||
| 
								 | 
							
								* copyright, or mask work right to the product. NXP Semiconductors
							 | 
						|||
| 
								 | 
							
								* reserves the right to make changes in the software without
							 | 
						|||
| 
								 | 
							
								* notification. NXP Semiconductors also make no representation or
							 | 
						|||
| 
								 | 
							
								* warranty that such application will be suitable for the specified
							 | 
						|||
| 
								 | 
							
								* use without further testing or modification.
							 | 
						|||
| 
								 | 
							
								**********************************************************************/
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#ifndef __USB_H__
							 | 
						|||
| 
								 | 
							
								#define __USB_H__
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								/** \file
							 | 
						|||
| 
								 | 
							
								 *  \brief Common definitions and declarations for the USB stack.
							 | 
						|||
| 
								 | 
							
								 *
							 | 
						|||
| 
								 | 
							
								 *  Common definitions and declarations for the USB stack.
							 | 
						|||
| 
								 | 
							
								 *  \addtogroup USBD_Core 
							 | 
						|||
| 
								 | 
							
								 *  @{
							 | 
						|||
| 
								 | 
							
								 */
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#include <stdint.h>
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#if defined(__GNUC__)
							 | 
						|||
| 
								 | 
							
								/* As per http://gcc.gnu.org/onlinedocs/gcc/Attribute-Syntax.html#Attribute-Syntax,
							 | 
						|||
| 
								 | 
							
								6.29 Attributes Syntax
							 | 
						|||
| 
								 | 
							
								"An attribute specifier list may appear as part of a struct, union or
							 | 
						|||
| 
								 | 
							
								enum specifier. It may go either immediately after the struct, union
							 | 
						|||
| 
								 | 
							
								or enum keyword, or after the closing brace. The former syntax is
							 | 
						|||
| 
								 | 
							
								preferred. Where attribute specifiers follow the closing brace, they
							 | 
						|||
| 
								 | 
							
								are considered to relate to the structure, union or enumerated type
							 | 
						|||
| 
								 | 
							
								defined, not to any enclosing declaration the type specifier appears
							 | 
						|||
| 
								 | 
							
								in, and the type defined is not complete until after the attribute
							 | 
						|||
| 
								 | 
							
								specifiers."
							 | 
						|||
| 
								 | 
							
								So use POST_PACK immediately after struct keyword
							 | 
						|||
| 
								 | 
							
								*/
							 | 
						|||
| 
								 | 
							
								#define PRE_PACK
							 | 
						|||
| 
								 | 
							
								#define POST_PACK	__attribute__((__packed__))
							 | 
						|||
| 
								 | 
							
								#define ALIGNED(n)  __attribute__((aligned (n)))
							 | 
						|||
| 
								 | 
							
								#elif defined(__arm)
							 | 
						|||
| 
								 | 
							
								#define PRE_PACK	__packed
							 | 
						|||
| 
								 | 
							
								#define POST_PACK
							 | 
						|||
| 
								 | 
							
								#define ALIGNED(n)  __align(n)
							 | 
						|||
| 
								 | 
							
								#endif
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								/** Structure to pack lower and upper byte to form 16 bit word. */
							 | 
						|||
| 
								 | 
							
								PRE_PACK struct POST_PACK _WB_T
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								  uint8_t L; /**< lower byte */
							 | 
						|||
| 
								 | 
							
								  uint8_t H; /**< upper byte */
							 | 
						|||
| 
								 | 
							
								};
							 | 
						|||
| 
								 | 
							
								/** Structure to pack lower and upper byte to form 16 bit word.*/
							 | 
						|||
| 
								 | 
							
								typedef struct _WB_T WB_T;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								/** Union of \ref _WB_T struct and 16 bit word.*/
							 | 
						|||
| 
								 | 
							
								PRE_PACK union POST_PACK __WORD_BYTE
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								  uint16_t W; /**< data member to do 16 bit access */
							 | 
						|||
| 
								 | 
							
								  WB_T WB; /**< data member to do 8 bit access */
							 | 
						|||
| 
								 | 
							
								} ;
							 | 
						|||
| 
								 | 
							
								/** Union of \ref _WB_T struct and 16 bit word.*/
							 | 
						|||
| 
								 | 
							
								typedef union __WORD_BYTE WORD_BYTE;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								/** bmRequestType.Dir defines 
							 | 
						|||
| 
								 | 
							
								 * @{ 
							 | 
						|||
| 
								 | 
							
								 */
							 | 
						|||
| 
								 | 
							
								/** Request from host to device */
							 | 
						|||
| 
								 | 
							
								#define REQUEST_HOST_TO_DEVICE     0
							 | 
						|||
| 
								 | 
							
								/** Request from device to host */
							 | 
						|||
| 
								 | 
							
								#define REQUEST_DEVICE_TO_HOST     1
							 | 
						|||
| 
								 | 
							
								/** @} */
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								/** bmRequestType.Type defines  
							 | 
						|||
| 
								 | 
							
								 * @{ 
							 | 
						|||
| 
								 | 
							
								 */
							 | 
						|||
| 
								 | 
							
								/** Standard Request */
							 | 
						|||
| 
								 | 
							
								#define REQUEST_STANDARD           0
							 | 
						|||
| 
								 | 
							
								/** Class Request */
							 | 
						|||
| 
								 | 
							
								#define REQUEST_CLASS              1
							 | 
						|||
| 
								 | 
							
								/** Vendor Request */
							 | 
						|||
| 
								 | 
							
								#define REQUEST_VENDOR             2
							 | 
						|||
| 
								 | 
							
								/** Reserved Request */
							 | 
						|||
| 
								 | 
							
								#define REQUEST_RESERVED           3
							 | 
						|||
| 
								 | 
							
								/** @} */
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								/** bmRequestType.Recipient defines  
							 | 
						|||
| 
								 | 
							
								 * @{ 
							 | 
						|||
| 
								 | 
							
								 */
							 | 
						|||
| 
								 | 
							
								/** Request to device */
							 | 
						|||
| 
								 | 
							
								#define REQUEST_TO_DEVICE          0
							 | 
						|||
| 
								 | 
							
								/** Request to interface */
							 | 
						|||
| 
								 | 
							
								#define REQUEST_TO_INTERFACE       1
							 | 
						|||
| 
								 | 
							
								/** Request to endpoint */
							 | 
						|||
| 
								 | 
							
								#define REQUEST_TO_ENDPOINT        2
							 | 
						|||
| 
								 | 
							
								/** Request to other */
							 | 
						|||
| 
								 | 
							
								#define REQUEST_TO_OTHER           3
							 | 
						|||
| 
								 | 
							
								/** @} */
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								/** Structure to define 8 bit USB request.*/
							 | 
						|||
| 
								 | 
							
								PRE_PACK struct POST_PACK _BM_T
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								  uint8_t Recipient :  5; /**< Recipeint type. */
							 | 
						|||
| 
								 | 
							
								  uint8_t Type      :  2; /**< Request type.  */
							 | 
						|||
| 
								 | 
							
								  uint8_t Dir       :  1; /**< Directtion type. */
							 | 
						|||
| 
								 | 
							
								};
							 | 
						|||
| 
								 | 
							
								/** Structure to define 8 bit USB request.*/
							 | 
						|||
| 
								 | 
							
								typedef struct _BM_T BM_T;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								/** Union of \ref _BM_T struct and 8 bit byte.*/
							 | 
						|||
| 
								 | 
							
								PRE_PACK union POST_PACK _REQUEST_TYPE
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								  uint8_t B; /**< byte wide access memeber */
							 | 
						|||
| 
								 | 
							
								  BM_T BM;   /**< bitfield structure access memeber */
							 | 
						|||
| 
								 | 
							
								} ;
							 | 
						|||
| 
								 | 
							
								/** Union of \ref _BM_T struct and 8 bit byte.*/
							 | 
						|||
| 
								 | 
							
								typedef union _REQUEST_TYPE REQUEST_TYPE;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								/** USB Standard Request Codes 
							 | 
						|||
| 
								 | 
							
								 * @{ 
							 | 
						|||
| 
								 | 
							
								 */
							 | 
						|||
| 
								 | 
							
								/** GET_STATUS request */
							 | 
						|||
| 
								 | 
							
								#define USB_REQUEST_GET_STATUS                 0
							 | 
						|||
| 
								 | 
							
								/** CLEAR_FEATURE request */
							 | 
						|||
| 
								 | 
							
								#define USB_REQUEST_CLEAR_FEATURE              1
							 | 
						|||
| 
								 | 
							
								/** SET_FEATURE request */
							 | 
						|||
| 
								 | 
							
								#define USB_REQUEST_SET_FEATURE                3
							 | 
						|||
| 
								 | 
							
								/** SET_ADDRESS request */
							 | 
						|||
| 
								 | 
							
								#define USB_REQUEST_SET_ADDRESS                5
							 | 
						|||
| 
								 | 
							
								/** GET_DESCRIPTOR request */
							 | 
						|||
| 
								 | 
							
								#define USB_REQUEST_GET_DESCRIPTOR             6
							 | 
						|||
| 
								 | 
							
								/** SET_DESCRIPTOR request */
							 | 
						|||
| 
								 | 
							
								#define USB_REQUEST_SET_DESCRIPTOR             7
							 | 
						|||
| 
								 | 
							
								/** GET_CONFIGURATION request */
							 | 
						|||
| 
								 | 
							
								#define USB_REQUEST_GET_CONFIGURATION          8
							 | 
						|||
| 
								 | 
							
								/** SET_CONFIGURATION request */
							 | 
						|||
| 
								 | 
							
								#define USB_REQUEST_SET_CONFIGURATION          9
							 | 
						|||
| 
								 | 
							
								/** GET_INTERFACE request */
							 | 
						|||
| 
								 | 
							
								#define USB_REQUEST_GET_INTERFACE              10
							 | 
						|||
| 
								 | 
							
								/** SET_INTERFACE request */
							 | 
						|||
| 
								 | 
							
								#define USB_REQUEST_SET_INTERFACE              11
							 | 
						|||
| 
								 | 
							
								/** SYNC_FRAME request */
							 | 
						|||
| 
								 | 
							
								#define USB_REQUEST_SYNC_FRAME                 12
							 | 
						|||
| 
								 | 
							
								/** @} */
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								/** USB GET_STATUS Bit Values 
							 | 
						|||
| 
								 | 
							
								 * @{ 
							 | 
						|||
| 
								 | 
							
								 */
							 | 
						|||
| 
								 | 
							
								/** SELF_POWERED status*/
							 | 
						|||
| 
								 | 
							
								#define USB_GETSTATUS_SELF_POWERED             0x01
							 | 
						|||
| 
								 | 
							
								/** REMOTE_WAKEUP capable status*/
							 | 
						|||
| 
								 | 
							
								#define USB_GETSTATUS_REMOTE_WAKEUP            0x02
							 | 
						|||
| 
								 | 
							
								/** ENDPOINT_STALL status*/
							 | 
						|||
| 
								 | 
							
								#define USB_GETSTATUS_ENDPOINT_STALL           0x01
							 | 
						|||
| 
								 | 
							
								/** @} */
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								/** USB Standard Feature selectors 
							 | 
						|||
| 
								 | 
							
								 * @{ 
							 | 
						|||
| 
								 | 
							
								 */
							 | 
						|||
| 
								 | 
							
								/** ENDPOINT_STALL feature*/
							 | 
						|||
| 
								 | 
							
								#define USB_FEATURE_ENDPOINT_STALL             0
							 | 
						|||
| 
								 | 
							
								/** REMOTE_WAKEUP feature*/
							 | 
						|||
| 
								 | 
							
								#define USB_FEATURE_REMOTE_WAKEUP              1
							 | 
						|||
| 
								 | 
							
								/** TEST_MODE feature*/
							 | 
						|||
| 
								 | 
							
								#define USB_FEATURE_TEST_MODE                  2
							 | 
						|||
| 
								 | 
							
								/** @} */
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								/** USB Default Control Pipe Setup Packet*/
							 | 
						|||
| 
								 | 
							
								PRE_PACK struct POST_PACK _USB_SETUP_PACKET
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								  REQUEST_TYPE bmRequestType; /**< This bitmapped field identifies the characteristics
							 | 
						|||
| 
								 | 
							
								                              of the specific request. \sa _BM_T.
							 | 
						|||
| 
								 | 
							
								                              */
							 | 
						|||
| 
								 | 
							
								  uint8_t      bRequest; /**< This field specifies the particular request. The 
							 | 
						|||
| 
								 | 
							
								                         Type bits in the bmRequestType field modify the meaning 
							 | 
						|||
| 
								 | 
							
								                         of this field. \sa USBD_REQUEST.
							 | 
						|||
| 
								 | 
							
								                         */
							 | 
						|||
| 
								 | 
							
								  WORD_BYTE    wValue; /**< Used to pass a parameter to the device, specific
							 | 
						|||
| 
								 | 
							
								                        to the request.
							 | 
						|||
| 
								 | 
							
								                        */
							 | 
						|||
| 
								 | 
							
								  WORD_BYTE    wIndex; /**< Used to pass a parameter to the device, specific
							 | 
						|||
| 
								 | 
							
								                        to the request. The wIndex field is often used in 
							 | 
						|||
| 
								 | 
							
								                        requests to specify an endpoint or an interface.
							 | 
						|||
| 
								 | 
							
								                        */
							 | 
						|||
| 
								 | 
							
								  uint16_t     wLength; /**< This field specifies the length of the data 
							 | 
						|||
| 
								 | 
							
								                        transferred during the second phase of the control 
							 | 
						|||
| 
								 | 
							
								                        transfer.
							 | 
						|||
| 
								 | 
							
								                        */
							 | 
						|||
| 
								 | 
							
								} ;
							 | 
						|||
| 
								 | 
							
								/** USB Default Control Pipe Setup Packet*/
							 | 
						|||
| 
								 | 
							
								typedef struct _USB_SETUP_PACKET USB_SETUP_PACKET;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								/** USB Descriptor Types 
							 | 
						|||
| 
								 | 
							
								 * @{ 
							 | 
						|||
| 
								 | 
							
								 */
							 | 
						|||
| 
								 | 
							
								/** Device descriptor type  */
							 | 
						|||
| 
								 | 
							
								#define USB_DEVICE_DESCRIPTOR_TYPE             1
							 | 
						|||
| 
								 | 
							
								/** Configuration descriptor type  */
							 | 
						|||
| 
								 | 
							
								#define USB_CONFIGURATION_DESCRIPTOR_TYPE      2
							 | 
						|||
| 
								 | 
							
								/** String descriptor type  */
							 | 
						|||
| 
								 | 
							
								#define USB_STRING_DESCRIPTOR_TYPE             3
							 | 
						|||
| 
								 | 
							
								/** Interface descriptor type  */
							 | 
						|||
| 
								 | 
							
								#define USB_INTERFACE_DESCRIPTOR_TYPE          4
							 | 
						|||
| 
								 | 
							
								/** Endpoint descriptor type  */
							 | 
						|||
| 
								 | 
							
								#define USB_ENDPOINT_DESCRIPTOR_TYPE           5
							 | 
						|||
| 
								 | 
							
								/** Device qualifier descriptor type  */
							 | 
						|||
| 
								 | 
							
								#define USB_DEVICE_QUALIFIER_DESCRIPTOR_TYPE   6
							 | 
						|||
| 
								 | 
							
								/** Other speed configuration descriptor type  */
							 | 
						|||
| 
								 | 
							
								#define USB_OTHER_SPEED_CONFIG_DESCRIPTOR_TYPE 7
							 | 
						|||
| 
								 | 
							
								/** Interface power descriptor type  */
							 | 
						|||
| 
								 | 
							
								#define USB_INTERFACE_POWER_DESCRIPTOR_TYPE    8
							 | 
						|||
| 
								 | 
							
								/** OTG descriptor type  */
							 | 
						|||
| 
								 | 
							
								#define USB_OTG_DESCRIPTOR_TYPE                     9
							 | 
						|||
| 
								 | 
							
								/** Debug descriptor type  */
							 | 
						|||
| 
								 | 
							
								#define USB_DEBUG_DESCRIPTOR_TYPE                  10
							 | 
						|||
| 
								 | 
							
								/** Interface association descriptor type  */
							 | 
						|||
| 
								 | 
							
								#define USB_INTERFACE_ASSOCIATION_DESCRIPTOR_TYPE  11
							 | 
						|||
| 
								 | 
							
								/** @} */
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								/** USB Device Classes 
							 | 
						|||
| 
								 | 
							
								 * @{ 
							 | 
						|||
| 
								 | 
							
								 */
							 | 
						|||
| 
								 | 
							
								/** Reserved device class  */
							 | 
						|||
| 
								 | 
							
								#define USB_DEVICE_CLASS_RESERVED              0x00
							 | 
						|||
| 
								 | 
							
								/** Audio device class  */
							 | 
						|||
| 
								 | 
							
								#define USB_DEVICE_CLASS_AUDIO                 0x01
							 | 
						|||
| 
								 | 
							
								/** Communications device class  */
							 | 
						|||
| 
								 | 
							
								#define USB_DEVICE_CLASS_COMMUNICATIONS        0x02
							 | 
						|||
| 
								 | 
							
								/** Human interface device class  */
							 | 
						|||
| 
								 | 
							
								#define USB_DEVICE_CLASS_HUMAN_INTERFACE       0x03
							 | 
						|||
| 
								 | 
							
								/** monitor device class  */
							 | 
						|||
| 
								 | 
							
								#define USB_DEVICE_CLASS_MONITOR               0x04
							 | 
						|||
| 
								 | 
							
								/** physical interface device class  */
							 | 
						|||
| 
								 | 
							
								#define USB_DEVICE_CLASS_PHYSICAL_INTERFACE    0x05
							 | 
						|||
| 
								 | 
							
								/** power device class  */
							 | 
						|||
| 
								 | 
							
								#define USB_DEVICE_CLASS_POWER                 0x06
							 | 
						|||
| 
								 | 
							
								/** Printer device class  */
							 | 
						|||
| 
								 | 
							
								#define USB_DEVICE_CLASS_PRINTER               0x07
							 | 
						|||
| 
								 | 
							
								/** Storage device class  */
							 | 
						|||
| 
								 | 
							
								#define USB_DEVICE_CLASS_STORAGE               0x08
							 | 
						|||
| 
								 | 
							
								/** Hub device class  */
							 | 
						|||
| 
								 | 
							
								#define USB_DEVICE_CLASS_HUB                   0x09
							 | 
						|||
| 
								 | 
							
								/** miscellaneous device class  */
							 | 
						|||
| 
								 | 
							
								#define USB_DEVICE_CLASS_MISCELLANEOUS         0xEF
							 | 
						|||
| 
								 | 
							
								/** Application device class  */
							 | 
						|||
| 
								 | 
							
								#define USB_DEVICE_CLASS_APP                   0xFE
							 | 
						|||
| 
								 | 
							
								/** Vendor specific device class  */
							 | 
						|||
| 
								 | 
							
								#define USB_DEVICE_CLASS_VENDOR_SPECIFIC       0xFF
							 | 
						|||
| 
								 | 
							
								/** @} */
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								/** bmAttributes in Configuration Descriptor 
							 | 
						|||
| 
								 | 
							
								 * @{ 
							 | 
						|||
| 
								 | 
							
								 */
							 | 
						|||
| 
								 | 
							
								/** Power field mask */
							 | 
						|||
| 
								 | 
							
								#define USB_CONFIG_POWERED_MASK                0x40
							 | 
						|||
| 
								 | 
							
								/** Bus powered */
							 | 
						|||
| 
								 | 
							
								#define USB_CONFIG_BUS_POWERED                 0x80
							 | 
						|||
| 
								 | 
							
								/** Self powered */
							 | 
						|||
| 
								 | 
							
								#define USB_CONFIG_SELF_POWERED                0xC0
							 | 
						|||
| 
								 | 
							
								/** remote wakeup */
							 | 
						|||
| 
								 | 
							
								#define USB_CONFIG_REMOTE_WAKEUP               0x20
							 | 
						|||
| 
								 | 
							
								/** @} */
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								/** bMaxPower in Configuration Descriptor */
							 | 
						|||
| 
								 | 
							
								#define USB_CONFIG_POWER_MA(mA)                ((mA)/2)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								/** bEndpointAddress in Endpoint Descriptor 
							 | 
						|||
| 
								 | 
							
								 * @{ 
							 | 
						|||
| 
								 | 
							
								 */
							 | 
						|||
| 
								 | 
							
								/** Endopint address mask */
							 | 
						|||
| 
								 | 
							
								#define USB_ENDPOINT_DIRECTION_MASK            0x80
							 | 
						|||
| 
								 | 
							
								/** Macro to convert OUT endopint number to endpoint address value. */
							 | 
						|||
| 
								 | 
							
								#define USB_ENDPOINT_OUT(addr)                 ((addr) | 0x00)
							 | 
						|||
| 
								 | 
							
								/** Macro to convert IN endopint number to endpoint address value. */
							 | 
						|||
| 
								 | 
							
								#define USB_ENDPOINT_IN(addr)                  ((addr) | 0x80)
							 | 
						|||
| 
								 | 
							
								/** @} */
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								/** bmAttributes in Endpoint Descriptor 
							 | 
						|||
| 
								 | 
							
								 * @{ 
							 | 
						|||
| 
								 | 
							
								 */
							 | 
						|||
| 
								 | 
							
								/** Endopint type mask */
							 | 
						|||
| 
								 | 
							
								#define USB_ENDPOINT_TYPE_MASK                 0x03
							 | 
						|||
| 
								 | 
							
								/** Control Endopint type */
							 | 
						|||
| 
								 | 
							
								#define USB_ENDPOINT_TYPE_CONTROL              0x00
							 | 
						|||
| 
								 | 
							
								/** isochronous Endopint type */
							 | 
						|||
| 
								 | 
							
								#define USB_ENDPOINT_TYPE_ISOCHRONOUS          0x01
							 | 
						|||
| 
								 | 
							
								/** bulk Endopint type */
							 | 
						|||
| 
								 | 
							
								#define USB_ENDPOINT_TYPE_BULK                 0x02
							 | 
						|||
| 
								 | 
							
								/** interrupt Endopint type */
							 | 
						|||
| 
								 | 
							
								#define USB_ENDPOINT_TYPE_INTERRUPT            0x03
							 | 
						|||
| 
								 | 
							
								/** Endopint sync type mask */
							 | 
						|||
| 
								 | 
							
								#define USB_ENDPOINT_SYNC_MASK                 0x0C
							 | 
						|||
| 
								 | 
							
								/** no synchronization Endopint */
							 | 
						|||
| 
								 | 
							
								#define USB_ENDPOINT_SYNC_NO_SYNCHRONIZATION   0x00
							 | 
						|||
| 
								 | 
							
								/** Asynchronous sync Endopint */
							 | 
						|||
| 
								 | 
							
								#define USB_ENDPOINT_SYNC_ASYNCHRONOUS         0x04
							 | 
						|||
| 
								 | 
							
								/** Adaptive sync Endopint */
							 | 
						|||
| 
								 | 
							
								#define USB_ENDPOINT_SYNC_ADAPTIVE             0x08
							 | 
						|||
| 
								 | 
							
								/** Synchronous sync Endopint */
							 | 
						|||
| 
								 | 
							
								#define USB_ENDPOINT_SYNC_SYNCHRONOUS          0x0C
							 | 
						|||
| 
								 | 
							
								/** Endopint usage type mask */
							 | 
						|||
| 
								 | 
							
								#define USB_ENDPOINT_USAGE_MASK                0x30
							 | 
						|||
| 
								 | 
							
								/** Endopint data usage type  */
							 | 
						|||
| 
								 | 
							
								#define USB_ENDPOINT_USAGE_DATA                0x00
							 | 
						|||
| 
								 | 
							
								/** Endopint feedback usage type  */
							 | 
						|||
| 
								 | 
							
								#define USB_ENDPOINT_USAGE_FEEDBACK            0x10
							 | 
						|||
| 
								 | 
							
								/** Endopint implicit feedback usage type  */
							 | 
						|||
| 
								 | 
							
								#define USB_ENDPOINT_USAGE_IMPLICIT_FEEDBACK   0x20
							 | 
						|||
| 
								 | 
							
								/** Endopint reserved usage type  */
							 | 
						|||
| 
								 | 
							
								#define USB_ENDPOINT_USAGE_RESERVED            0x30
							 | 
						|||
| 
								 | 
							
								/** @} */
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								/** Control endopint EP0's maximum packet size in high-speed mode.*/
							 | 
						|||
| 
								 | 
							
								#define USB_ENDPOINT_0_HS_MAXP                 64
							 | 
						|||
| 
								 | 
							
								/** Control endopint EP0's maximum packet size in low-speed mode.*/
							 | 
						|||
| 
								 | 
							
								#define USB_ENDPOINT_0_LS_MAXP                 8
							 | 
						|||
| 
								 | 
							
								/** Bulk endopint's maximum packet size in high-speed mode.*/
							 | 
						|||
| 
								 | 
							
								#define USB_ENDPOINT_BULK_HS_MAXP              512
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								/** USB Standard Device Descriptor */
							 | 
						|||
| 
								 | 
							
								PRE_PACK struct POST_PACK _USB_DEVICE_DESCRIPTOR
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								  uint8_t  bLength;     /**< Size of this descriptor in bytes. */
							 | 
						|||
| 
								 | 
							
								  uint8_t  bDescriptorType; /**< DEVICE Descriptor Type. */
							 | 
						|||
| 
								 | 
							
								  uint16_t bcdUSB; /**< BUSB Specification Release Number in
							 | 
						|||
| 
								 | 
							
								                    Binary-Coded Decimal (i.e., 2.10 is 210H).
							 | 
						|||
| 
								 | 
							
								                    This field identifies the release of the USB
							 | 
						|||
| 
								 | 
							
								                    Specification with which the device and its
							 | 
						|||
| 
								 | 
							
								                    descriptors are compliant.
							 | 
						|||
| 
								 | 
							
								                   */
							 | 
						|||
| 
								 | 
							
								  uint8_t  bDeviceClass; /**< Class code (assigned by the USB-IF).
							 | 
						|||
| 
								 | 
							
								                          If this field is reset to zero, each interface
							 | 
						|||
| 
								 | 
							
								                          within a configuration specifies its own
							 | 
						|||
| 
								 | 
							
								                          class information and the various
							 | 
						|||
| 
								 | 
							
								                          interfaces operate independently.\n
							 | 
						|||
| 
								 | 
							
								                          If this field is set to a value between 1 and
							 | 
						|||
| 
								 | 
							
								                          FEH, the device supports different class
							 | 
						|||
| 
								 | 
							
								                          specifications on different interfaces and
							 | 
						|||
| 
								 | 
							
								                          the interfaces may not operate
							 | 
						|||
| 
								 | 
							
								                          independently. This value identifies the
							 | 
						|||
| 
								 | 
							
								                          class definition used for the aggregate
							 | 
						|||
| 
								 | 
							
								                          interfaces. \n
							 | 
						|||
| 
								 | 
							
								                          If this field is set to FFH, the device class
							 | 
						|||
| 
								 | 
							
								                          is vendor-specific.
							 | 
						|||
| 
								 | 
							
								                          */
							 | 
						|||
| 
								 | 
							
								  uint8_t  bDeviceSubClass; /**< Subclass code (assigned by the USB-IF).
							 | 
						|||
| 
								 | 
							
								                            These codes are qualified by the value of
							 | 
						|||
| 
								 | 
							
								                            the bDeviceClass field. \n
							 | 
						|||
| 
								 | 
							
								                            If the bDeviceClass field is reset to zero,
							 | 
						|||
| 
								 | 
							
								                            this field must also be reset to zero. \n
							 | 
						|||
| 
								 | 
							
								                            If the bDeviceClass field is not set to FFH,
							 | 
						|||
| 
								 | 
							
								                            all values are reserved for assignment by
							 | 
						|||
| 
								 | 
							
								                            the USB-IF. 
							 | 
						|||
| 
								 | 
							
								                            */
							 | 
						|||
| 
								 | 
							
								  uint8_t  bDeviceProtocol; /**< Protocol code (assigned by the USB-IF).
							 | 
						|||
| 
								 | 
							
								                            These codes are qualified by the value of
							 | 
						|||
| 
								 | 
							
								                            the bDeviceClass and the
							 | 
						|||
| 
								 | 
							
								                            bDeviceSubClass fields. If a device
							 | 
						|||
| 
								 | 
							
								                            supports class-specific protocols on a
							 | 
						|||
| 
								 | 
							
								                            device basis as opposed to an interface
							 | 
						|||
| 
								 | 
							
								                            basis, this code identifies the protocols
							 | 
						|||
| 
								 | 
							
								                            that the device uses as defined by the
							 | 
						|||
| 
								 | 
							
								                            specification of the device class. \n
							 | 
						|||
| 
								 | 
							
								                            If this field is reset to zero, the device
							 | 
						|||
| 
								 | 
							
								                            does not use class-specific protocols on a
							 | 
						|||
| 
								 | 
							
								                            device basis. However, it may use classspecific
							 | 
						|||
| 
								 | 
							
								                            protocols on an interface basis. \n
							 | 
						|||
| 
								 | 
							
								                            If this field is set to FFH, the device uses a
							 | 
						|||
| 
								 | 
							
								                            vendor-specific protocol on a device basis. 
							 | 
						|||
| 
								 | 
							
								                            */
							 | 
						|||
| 
								 | 
							
								  uint8_t  bMaxPacketSize0; /**< Maximum packet size for endpoint zero
							 | 
						|||
| 
								 | 
							
								                            (only 8, 16, 32, or 64 are valid). For HS devices
							 | 
						|||
| 
								 | 
							
								                            is fixed to 64.
							 | 
						|||
| 
								 | 
							
								                            */
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  uint16_t idVendor; /**< Vendor ID (assigned by the USB-IF). */
							 | 
						|||
| 
								 | 
							
								  uint16_t idProduct; /**< Product ID (assigned by the manufacturer). */
							 | 
						|||
| 
								 | 
							
								  uint16_t bcdDevice; /**< Device release number in binary-coded decimal. */
							 | 
						|||
| 
								 | 
							
								  uint8_t  iManufacturer; /**< Index of string descriptor describing manufacturer. */
							 | 
						|||
| 
								 | 
							
								  uint8_t  iProduct; /**< Index of string descriptor describing product. */
							 | 
						|||
| 
								 | 
							
								  uint8_t  iSerialNumber; /**< Index of string descriptor describing the device<63>s 
							 | 
						|||
| 
								 | 
							
								                          serial number.
							 | 
						|||
| 
								 | 
							
								                          */
							 | 
						|||
| 
								 | 
							
								  uint8_t  bNumConfigurations; /**< Number of possible configurations. */
							 | 
						|||
| 
								 | 
							
								} ;
							 | 
						|||
| 
								 | 
							
								/** USB Standard Device Descriptor */
							 | 
						|||
| 
								 | 
							
								typedef struct _USB_DEVICE_DESCRIPTOR USB_DEVICE_DESCRIPTOR;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								/** USB 2.0 Device Qualifier Descriptor */
							 | 
						|||
| 
								 | 
							
								PRE_PACK struct POST_PACK _USB_DEVICE_QUALIFIER_DESCRIPTOR
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								  uint8_t  bLength; /**< Size of descriptor */
							 | 
						|||
| 
								 | 
							
								  uint8_t  bDescriptorType; /**< Device Qualifier Type */
							 | 
						|||
| 
								 | 
							
								  uint16_t bcdUSB; /**< USB specification version number (e.g., 0200H for V2.00) */
							 | 
						|||
| 
								 | 
							
								  uint8_t  bDeviceClass; /**< Class Code */
							 | 
						|||
| 
								 | 
							
								  uint8_t  bDeviceSubClass; /**< SubClass Code */
							 | 
						|||
| 
								 | 
							
								  uint8_t  bDeviceProtocol; /**< Protocol Code */
							 | 
						|||
| 
								 | 
							
								  uint8_t  bMaxPacketSize0; /**< Maximum packet size for other speed */
							 | 
						|||
| 
								 | 
							
								  uint8_t  bNumConfigurations; /**< Number of Other-speed Configurations */
							 | 
						|||
| 
								 | 
							
								  uint8_t  bReserved; /**< Reserved for future use, must be zero */
							 | 
						|||
| 
								 | 
							
								} ;
							 | 
						|||
| 
								 | 
							
								/** USB 2.0 Device Qualifier Descriptor */
							 | 
						|||
| 
								 | 
							
								typedef struct _USB_DEVICE_QUALIFIER_DESCRIPTOR USB_DEVICE_QUALIFIER_DESCRIPTOR;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								/** USB Standard Configuration Descriptor */
							 | 
						|||
| 
								 | 
							
								PRE_PACK struct POST_PACK _USB_CONFIGURATION_DESCRIPTOR
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								  uint8_t  bLength; /**< Size of this descriptor in bytes */
							 | 
						|||
| 
								 | 
							
								  uint8_t  bDescriptorType; /**< CONFIGURATION Descriptor Type*/
							 | 
						|||
| 
								 | 
							
								  uint16_t wTotalLength; /**< Total length of data returned for this
							 | 
						|||
| 
								 | 
							
								                          configuration. Includes the combined length
							 | 
						|||
| 
								 | 
							
								                          of all descriptors (configuration, interface,
							 | 
						|||
| 
								 | 
							
								                          endpoint, and class- or vendor-specific)
							 | 
						|||
| 
								 | 
							
								                          returned for this configuration.*/
							 | 
						|||
| 
								 | 
							
								  uint8_t  bNumInterfaces; /**< Number of interfaces supported by this configuration*/
							 | 
						|||
| 
								 | 
							
								  uint8_t  bConfigurationValue; /**< Value to use as an argument to the
							 | 
						|||
| 
								 | 
							
								                                SetConfiguration() request to select this 
							 | 
						|||
| 
								 | 
							
								                                configuration. */
							 | 
						|||
| 
								 | 
							
								  uint8_t  iConfiguration; /**< Index of string descriptor describing this
							 | 
						|||
| 
								 | 
							
								                            configuration*/
							 | 
						|||
| 
								 | 
							
								  uint8_t  bmAttributes; /**< Configuration characteristics \n
							 | 
						|||
| 
								 | 
							
								                          D7: Reserved (set to one)\n
							 | 
						|||
| 
								 | 
							
								                          D6: Self-powered \n
							 | 
						|||
| 
								 | 
							
								                          D5: Remote Wakeup \n
							 | 
						|||
| 
								 | 
							
								                          D4...0: Reserved (reset to zero) \n
							 | 
						|||
| 
								 | 
							
								                          D7 is reserved and must be set to one for
							 | 
						|||
| 
								 | 
							
								                          historical reasons. \n
							 | 
						|||
| 
								 | 
							
								                          A device configuration that uses power from
							 | 
						|||
| 
								 | 
							
								                          the bus and a local source reports a non-zero
							 | 
						|||
| 
								 | 
							
								                          value in bMaxPower to indicate the amount of
							 | 
						|||
| 
								 | 
							
								                          bus power required and sets D6. The actual
							 | 
						|||
| 
								 | 
							
								                          power source at runtime may be determined
							 | 
						|||
| 
								 | 
							
								                          using the GetStatus(DEVICE) request (see
							 | 
						|||
| 
								 | 
							
								                          USB 2.0 spec Section 9.4.5). \n
							 | 
						|||
| 
								 | 
							
								                          If a device configuration supports remote
							 | 
						|||
| 
								 | 
							
								                          wakeup, D5 is set to one.*/
							 | 
						|||
| 
								 | 
							
								  uint8_t  bMaxPower; /**< Maximum power consumption of the USB
							 | 
						|||
| 
								 | 
							
								                      device from the bus in this specific
							 | 
						|||
| 
								 | 
							
								                      configuration when the device is fully
							 | 
						|||
| 
								 | 
							
								                      operational. Expressed in 2 mA units
							 | 
						|||
| 
								 | 
							
								                      (i.e., 50 = 100 mA). \n
							 | 
						|||
| 
								 | 
							
								                      Note: A device configuration reports whether
							 | 
						|||
| 
								 | 
							
								                      the configuration is bus-powered or selfpowered.
							 | 
						|||
| 
								 | 
							
								                      Device status reports whether the
							 | 
						|||
| 
								 | 
							
								                      device is currently self-powered. If a device is
							 | 
						|||
| 
								 | 
							
								                      disconnected from its external power source, it
							 | 
						|||
| 
								 | 
							
								                      updates device status to indicate that it is no
							 | 
						|||
| 
								 | 
							
								                      longer self-powered. \n
							 | 
						|||
| 
								 | 
							
								                      A device may not increase its power draw
							 | 
						|||
| 
								 | 
							
								                      from the bus, when it loses its external power
							 | 
						|||
| 
								 | 
							
								                      source, beyond the amount reported by its
							 | 
						|||
| 
								 | 
							
								                      configuration. \n
							 | 
						|||
| 
								 | 
							
								                      If a device can continue to operate when
							 | 
						|||
| 
								 | 
							
								                      disconnected from its external power source, it
							 | 
						|||
| 
								 | 
							
								                      continues to do so. If the device cannot
							 | 
						|||
| 
								 | 
							
								                      continue to operate, it fails operations it can
							 | 
						|||
| 
								 | 
							
								                      no longer support. The USB System Software
							 | 
						|||
| 
								 | 
							
								                      may determine the cause of the failure by
							 | 
						|||
| 
								 | 
							
								                      checking the status and noting the loss of the
							 | 
						|||
| 
								 | 
							
								                      device<EFBFBD>s power source.*/
							 | 
						|||
| 
								 | 
							
								} ;
							 | 
						|||
| 
								 | 
							
								/** USB Standard Configuration Descriptor */
							 | 
						|||
| 
								 | 
							
								typedef struct _USB_CONFIGURATION_DESCRIPTOR USB_CONFIGURATION_DESCRIPTOR;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								/** USB Standard Interface Descriptor */
							 | 
						|||
| 
								 | 
							
								PRE_PACK struct POST_PACK _USB_INTERFACE_DESCRIPTOR
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								  uint8_t  bLength; /**< Size of this descriptor in bytes*/
							 | 
						|||
| 
								 | 
							
								  uint8_t  bDescriptorType; /**< INTERFACE Descriptor Type*/
							 | 
						|||
| 
								 | 
							
								  uint8_t  bInterfaceNumber; /**< Number of this interface. Zero-based
							 | 
						|||
| 
								 | 
							
								                              value identifying the index in the array of
							 | 
						|||
| 
								 | 
							
								                              concurrent interfaces supported by this
							 | 
						|||
| 
								 | 
							
								                              configuration.*/
							 | 
						|||
| 
								 | 
							
								  uint8_t  bAlternateSetting; /**< Value used to select this alternate setting
							 | 
						|||
| 
								 | 
							
								                              for the interface identified in the prior field*/
							 | 
						|||
| 
								 | 
							
								  uint8_t  bNumEndpoints; /**< Number of endpoints used by this
							 | 
						|||
| 
								 | 
							
								                          interface (excluding endpoint zero). If this
							 | 
						|||
| 
								 | 
							
								                          value is zero, this interface only uses the
							 | 
						|||
| 
								 | 
							
								                          Default Control Pipe.*/
							 | 
						|||
| 
								 | 
							
								  uint8_t  bInterfaceClass; /**< Class code (assigned by the USB-IF). \n
							 | 
						|||
| 
								 | 
							
								                            A value of zero is reserved for future
							 | 
						|||
| 
								 | 
							
								                            standardization. \n
							 | 
						|||
| 
								 | 
							
								                            If this field is set to FFH, the interface
							 | 
						|||
| 
								 | 
							
								                            class is vendor-specific. \n
							 | 
						|||
| 
								 | 
							
								                            All other values are reserved for
							 | 
						|||
| 
								 | 
							
								                            assignment by the USB-IF.*/
							 | 
						|||
| 
								 | 
							
								  uint8_t  bInterfaceSubClass; /**< Subclass code (assigned by the USB-IF). \n
							 | 
						|||
| 
								 | 
							
								                              These codes are qualified by the value of
							 | 
						|||
| 
								 | 
							
								                              the bInterfaceClass field. \n
							 | 
						|||
| 
								 | 
							
								                              If the bInterfaceClass field is reset to zero,
							 | 
						|||
| 
								 | 
							
								                              this field must also be reset to zero. \n
							 | 
						|||
| 
								 | 
							
								                              If the bInterfaceClass field is not set to
							 | 
						|||
| 
								 | 
							
								                              FFH, all values are reserved for
							 | 
						|||
| 
								 | 
							
								                              assignment by the USB-IF.*/
							 | 
						|||
| 
								 | 
							
								  uint8_t  bInterfaceProtocol; /**< Protocol code (assigned by the USB). \n
							 | 
						|||
| 
								 | 
							
								                                These codes are qualified by the value of
							 | 
						|||
| 
								 | 
							
								                                the bInterfaceClass and the
							 | 
						|||
| 
								 | 
							
								                                bInterfaceSubClass fields. If an interface
							 | 
						|||
| 
								 | 
							
								                                supports class-specific requests, this code
							 | 
						|||
| 
								 | 
							
								                                identifies the protocols that the device
							 | 
						|||
| 
								 | 
							
								                                uses as defined by the specification of the
							 | 
						|||
| 
								 | 
							
								                                device class. \n
							 | 
						|||
| 
								 | 
							
								                                If this field is reset to zero, the device
							 | 
						|||
| 
								 | 
							
								                                does not use a class-specific protocol on
							 | 
						|||
| 
								 | 
							
								                                this interface. \n
							 | 
						|||
| 
								 | 
							
								                                If this field is set to FFH, the device uses
							 | 
						|||
| 
								 | 
							
								                                a vendor-specific protocol for this
							 | 
						|||
| 
								 | 
							
								                                interface.*/
							 | 
						|||
| 
								 | 
							
								  uint8_t  iInterface; /**< Index of string descriptor describing this interface*/
							 | 
						|||
| 
								 | 
							
								} ;
							 | 
						|||
| 
								 | 
							
								/** USB Standard Interface Descriptor */
							 | 
						|||
| 
								 | 
							
								typedef struct _USB_INTERFACE_DESCRIPTOR USB_INTERFACE_DESCRIPTOR;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								/** USB Standard Endpoint Descriptor */
							 | 
						|||
| 
								 | 
							
								PRE_PACK struct POST_PACK _USB_ENDPOINT_DESCRIPTOR
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								  uint8_t  bLength; /**< Size of this descriptor in bytes*/
							 | 
						|||
| 
								 | 
							
								  uint8_t  bDescriptorType; /**< ENDPOINT Descriptor Type*/
							 | 
						|||
| 
								 | 
							
								  uint8_t  bEndpointAddress; /**< The address of the endpoint on the USB device
							 | 
						|||
| 
								 | 
							
								                            described by this descriptor. The address is
							 | 
						|||
| 
								 | 
							
								                            encoded as follows: \n
							 | 
						|||
| 
								 | 
							
								                            Bit 3...0: The endpoint number \n
							 | 
						|||
| 
								 | 
							
								                            Bit 6...4: Reserved, reset to zero \n
							 | 
						|||
| 
								 | 
							
								                            Bit 7: Direction, ignored for control endpoints
							 | 
						|||
| 
								 | 
							
								                            0 = OUT endpoint
							 | 
						|||
| 
								 | 
							
								                            1 = IN endpoint.  \n \sa USBD_ENDPOINT_ADR_Type*/
							 | 
						|||
| 
								 | 
							
								  uint8_t  bmAttributes; /**< This field describes the endpoint<6E>s attributes when it is
							 | 
						|||
| 
								 | 
							
								                          configured using the bConfigurationValue. \n
							 | 
						|||
| 
								 | 
							
								                          Bits 1..0: Transfer Type
							 | 
						|||
| 
								 | 
							
								                          \li 00 = Control
							 | 
						|||
| 
								 | 
							
								                          \li 01 = Isochronous
							 | 
						|||
| 
								 | 
							
								                          \li 10 = Bulk
							 | 
						|||
| 
								 | 
							
								                          \li 11 = Interrupt  \n
							 | 
						|||
| 
								 | 
							
								                          If not an isochronous endpoint, bits 5..2 are reserved
							 | 
						|||
| 
								 | 
							
								                          and must be set to zero. If isochronous, they are
							 | 
						|||
| 
								 | 
							
								                          defined as follows: \n
							 | 
						|||
| 
								 | 
							
								                          Bits 3..2: Synchronization Type
							 | 
						|||
| 
								 | 
							
								                          \li 00 = No Synchronization
							 | 
						|||
| 
								 | 
							
								                          \li 01 = Asynchronous
							 | 
						|||
| 
								 | 
							
								                          \li 10 = Adaptive
							 | 
						|||
| 
								 | 
							
								                          \li 11 = Synchronous \n
							 | 
						|||
| 
								 | 
							
								                          Bits 5..4: Usage Type
							 | 
						|||
| 
								 | 
							
								                          \li 00 = Data endpoint
							 | 
						|||
| 
								 | 
							
								                          \li 01 = Feedback endpoint
							 | 
						|||
| 
								 | 
							
								                          \li 10 = Implicit feedback Data endpoint
							 | 
						|||
| 
								 | 
							
								                          \li 11 = Reserved \n
							 | 
						|||
| 
								 | 
							
								                          Refer to Chapter 5 of USB 2.0 specification for more information. \n
							 | 
						|||
| 
								 | 
							
								                          All other bits are reserved and must be reset to zero.
							 | 
						|||
| 
								 | 
							
								                          Reserved bits must be ignored by the host.
							 | 
						|||
| 
								 | 
							
								                         \n \sa USBD_EP_ATTR_Type*/
							 | 
						|||
| 
								 | 
							
								  uint16_t wMaxPacketSize; /**< Maximum packet size this endpoint is capable of
							 | 
						|||
| 
								 | 
							
								                          sending or receiving when this configuration is
							 | 
						|||
| 
								 | 
							
								                          selected. \n
							 | 
						|||
| 
								 | 
							
								                          For isochronous endpoints, this value is used to
							 | 
						|||
| 
								 | 
							
								                          reserve the bus time in the schedule, required for the
							 | 
						|||
| 
								 | 
							
								                          per-(micro)frame data payloads. The pipe may, on an
							 | 
						|||
| 
								 | 
							
								                          ongoing basis, actually use less bandwidth than that
							 | 
						|||
| 
								 | 
							
								                          reserved. The device reports, if necessary, the actual
							 | 
						|||
| 
								 | 
							
								                          bandwidth used via its normal, non-USB defined
							 | 
						|||
| 
								 | 
							
								                          mechanisms. \n
							 | 
						|||
| 
								 | 
							
								                          For all endpoints, bits 10..0 specify the maximum
							 | 
						|||
| 
								 | 
							
								                          packet size (in bytes). \n
							 | 
						|||
| 
								 | 
							
								                          For high-speed isochronous and interrupt endpoints: \n
							 | 
						|||
| 
								 | 
							
								                          Bits 12..11 specify the number of additional transaction
							 | 
						|||
| 
								 | 
							
								                          opportunities per microframe: \n
							 | 
						|||
| 
								 | 
							
								                          \li 00 = None (1 transaction per microframe)
							 | 
						|||
| 
								 | 
							
								                          \li 01 = 1 additional (2 per microframe)
							 | 
						|||
| 
								 | 
							
								                          \li 10 = 2 additional (3 per microframe)
							 | 
						|||
| 
								 | 
							
								                          \li 11 = Reserved \n
							 | 
						|||
| 
								 | 
							
								                          Bits 15..13 are reserved and must be set to zero.*/
							 | 
						|||
| 
								 | 
							
								  uint8_t  bInterval; /**< Interval for polling endpoint for data transfers.
							 | 
						|||
| 
								 | 
							
								                      Expressed in frames or microframes depending on the
							 | 
						|||
| 
								 | 
							
								                      device operating speed (i.e., either 1 millisecond or
							 | 
						|||
| 
								 | 
							
								                      125 <EFBFBD>s units). 
							 | 
						|||
| 
								 | 
							
								                      \li For full-/high-speed isochronous endpoints, this value
							 | 
						|||
| 
								 | 
							
								                      must be in the range from 1 to 16. The bInterval value
							 | 
						|||
| 
								 | 
							
								                      is used as the exponent for a \f$ 2^(bInterval-1) \f$ value; e.g., a
							 | 
						|||
| 
								 | 
							
								                      bInterval of 4 means a period of 8 (\f$ 2^(4-1) \f$). 
							 | 
						|||
| 
								 | 
							
								                      \li For full-/low-speed interrupt endpoints, the value of
							 | 
						|||
| 
								 | 
							
								                      this field may be from 1 to 255.
							 | 
						|||
| 
								 | 
							
								                      \li For high-speed interrupt endpoints, the bInterval value
							 | 
						|||
| 
								 | 
							
								                      is used as the exponent for a \f$ 2^(bInterval-1) \f$ value; e.g., a
							 | 
						|||
| 
								 | 
							
								                      bInterval of 4 means a period of 8 (\f$ 2^(4-1) \f$) . This value
							 | 
						|||
| 
								 | 
							
								                      must be from 1 to 16.
							 | 
						|||
| 
								 | 
							
								                      \li For high-speed bulk/control OUT endpoints, the
							 | 
						|||
| 
								 | 
							
								                      bInterval must specify the maximum NAK rate of the
							 | 
						|||
| 
								 | 
							
								                      endpoint. A value of 0 indicates the endpoint never
							 | 
						|||
| 
								 | 
							
								                      NAKs. Other values indicate at most 1 NAK each
							 | 
						|||
| 
								 | 
							
								                      bInterval number of microframes. This value must be
							 | 
						|||
| 
								 | 
							
								                      in the range from 0 to 255. \n
							 | 
						|||
| 
								 | 
							
								                      Refer to Chapter 5 of USB 2.0 specification for more information.
							 | 
						|||
| 
								 | 
							
								                      */
							 | 
						|||
| 
								 | 
							
								} ;
							 | 
						|||
| 
								 | 
							
								/** USB Standard Endpoint Descriptor */
							 | 
						|||
| 
								 | 
							
								typedef struct _USB_ENDPOINT_DESCRIPTOR USB_ENDPOINT_DESCRIPTOR;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								/** USB String Descriptor */
							 | 
						|||
| 
								 | 
							
								PRE_PACK struct POST_PACK _USB_STRING_DESCRIPTOR
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								  uint8_t  bLength; /**< Size of this descriptor in bytes*/
							 | 
						|||
| 
								 | 
							
								  uint8_t  bDescriptorType; /**< STRING Descriptor Type*/
							 | 
						|||
| 
								 | 
							
								  uint16_t bString/*[]*/; /**< UNICODE encoded string */
							 | 
						|||
| 
								 | 
							
								}  ;
							 | 
						|||
| 
								 | 
							
								/** USB String Descriptor */
							 | 
						|||
| 
								 | 
							
								typedef struct _USB_STRING_DESCRIPTOR USB_STRING_DESCRIPTOR;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								/** USB Common Descriptor */
							 | 
						|||
| 
								 | 
							
								PRE_PACK struct POST_PACK _USB_COMMON_DESCRIPTOR
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								  uint8_t  bLength; /**< Size of this descriptor in bytes*/
							 | 
						|||
| 
								 | 
							
								  uint8_t  bDescriptorType; /**< Descriptor Type*/
							 | 
						|||
| 
								 | 
							
								} ;
							 | 
						|||
| 
								 | 
							
								/** USB Common Descriptor */
							 | 
						|||
| 
								 | 
							
								typedef struct _USB_COMMON_DESCRIPTOR USB_COMMON_DESCRIPTOR;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								/** USB Other Speed Configuration */
							 | 
						|||
| 
								 | 
							
								PRE_PACK struct POST_PACK _USB_OTHER_SPEED_CONFIGURATION
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								  uint8_t  bLength; /**< Size of descriptor*/
							 | 
						|||
| 
								 | 
							
								  uint8_t  bDescriptorType; /**< Other_speed_Configuration Type*/
							 | 
						|||
| 
								 | 
							
								  uint16_t wTotalLength; /**< Total length of data returned*/
							 | 
						|||
| 
								 | 
							
								  uint8_t  bNumInterfaces; /**< Number of interfaces supported by this speed configuration*/
							 | 
						|||
| 
								 | 
							
								  uint8_t  bConfigurationValue; /**< Value to use to select configuration*/
							 | 
						|||
| 
								 | 
							
								  uint8_t  IConfiguration; /**< Index of string descriptor*/
							 | 
						|||
| 
								 | 
							
								  uint8_t  bmAttributes; /**< Same as Configuration descriptor*/
							 | 
						|||
| 
								 | 
							
								  uint8_t  bMaxPower; /**< Same as Configuration descriptor*/
							 | 
						|||
| 
								 | 
							
								} ;
							 | 
						|||
| 
								 | 
							
								/** USB Other Speed Configuration */
							 | 
						|||
| 
								 | 
							
								typedef struct _USB_OTHER_SPEED_CONFIGURATION USB_OTHER_SPEED_CONFIGURATION;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								/** \ingroup USBD_Core 
							 | 
						|||
| 
								 | 
							
								 * USB device stack/module handle. 
							 | 
						|||
| 
								 | 
							
								 */
							 | 
						|||
| 
								 | 
							
								typedef void* USBD_HANDLE_T;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								/** @}*/
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#endif  /* __USB_H__ */
							 |