| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342 | /**  **************************************************************************  * @file     usb_std.h  * @version  v2.0.6  * @date     2021-12-31  * @brief    usb standard header file  **************************************************************************  *                       Copyright notice & Disclaimer  *  * The software Board Support Package (BSP) that is made available to   * download from Artery official website is the copyrighted work of Artery.   * Artery authorizes customers to use, copy, and distribute the BSP   * software and its related documentation for the purpose of design and   * development in conjunction with Artery microcontrollers. Use of the   * software is governed by this copyright notice and the following disclaimer.  *  * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES,  * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS,  * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR  * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS,  * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,  * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT.  *  **************************************************************************  *//* define to prevent recursive inclusion -------------------------------------*/#ifndef __USB_STD_H#define __USB_STD_H#ifdef __cplusplusextern "C" {#endif/* includes ------------------------------------------------------------------*/#include "usb_conf.h"/** @addtogroup AT32F403A_407_middlewares_usbd_drivers  * @{  */  /** @addtogroup USB_standard  * @{  *//** @defgroup USB_standard_define  * @{  *//**  * @brief usb request recipient  */#define USB_REQ_RECIPIENT_DEVICE         0x00 /*!< usb request recipient device */#define USB_REQ_RECIPIENT_INTERFACE      0x01 /*!< usb request recipient interface */#define USB_REQ_RECIPIENT_ENDPOINT       0x02 /*!< usb request recipient endpoint */#define USB_REQ_RECIPIENT_OTHER          0x03 /*!< usb request recipient other */#define USB_REQ_RECIPIENT_MASK           0x1F /*!< usb request recipient mask *//**  * @brief usb request type  */#define USB_REQ_TYPE_STANDARD            0x00 /*!< usb request type standard */#define USB_REQ_TYPE_CLASS               0x20 /*!< usb request type class */#define USB_REQ_TYPE_VENDOR              0x40 /*!< usb request type vendor */#define USB_REQ_TYPE_RESERVED            0x60 /*!< usb request type reserved *//**  * @brief usb request data transfer direction  */#define USB_REQ_DIR_HTD                  0x00 /*!< usb request data transfer direction host to device */#define USB_REQ_DIR_DTH                  0x80 /*!< usb request data transfer direction device to host *//**  * @brief usb standard device requests codes  */#define USB_STD_REQ_GET_STATUS           0 /*!< usb request code status */#define USB_STD_REQ_CLEAR_FEATURE        1 /*!< usb request code clear feature */#define USB_STD_REQ_SET_FEATURE          3 /*!< usb request code feature */#define USB_STD_REQ_SET_ADDRESS          5 /*!< usb request code address */#define USB_STD_REQ_GET_DESCRIPTOR       6 /*!< usb request code get descriptor */#define USB_STD_REQ_SET_DESCRIPTOR       7 /*!< usb request code set descriptor */#define USB_STD_REQ_GET_CONFIGURATION    8 /*!< usb request code get configuration */#define USB_STD_REQ_SET_CONFIGURATION    9 /*!< usb request code set configuration */#define USB_STD_REQ_GET_INTERFACE        10 /*!< usb request code get interface */#define USB_STD_REQ_SET_INTERFACE        11 /*!< usb request code set interface */#define USB_STD_REQ_SYNCH_FRAME          12 /*!< usb request code synch frame *//**  * @brief usb standard device type  */#define USB_DESCIPTOR_TYPE_DEVICE        1 /*!< usb standard device type device */#define USB_DESCIPTOR_TYPE_CONFIGURATION 2 /*!< usb standard device type configuration */#define USB_DESCIPTOR_TYPE_STRING        3 /*!< usb standard device type string */#define USB_DESCIPTOR_TYPE_INTERFACE     4 /*!< usb standard device type interface */#define USB_DESCIPTOR_TYPE_ENDPOINT      5 /*!< usb standard device type endpoint */#define USB_DESCIPTOR_TYPE_DEVICE_QUALIFIER     6 /*!< usb standard device type qualifier */#define USB_DESCIPTOR_TYPE_OTHER_SPEED   7 /*!< usb standard device type other speed */#define USB_DESCIPTOR_TYPE_INTERFACE_POWER       8 /*!< usb standard device type interface power *//**  * @brief usb standard string type  */#define  USB_LANGID_STRING               0 /*!< usb standard string type lang id */#define  USB_MFC_STRING                  1 /*!< usb standard string type mfc */#define  USB_PRODUCT_STRING              2 /*!< usb standard string type product */#define  USB_SERIAL_STRING               3 /*!< usb standard string type serial */#define  USB_CONFIG_STRING               4 /*!< usb standard string type config */#define  USB_INTERFACE_STRING            5 /*!< usb standard string type interface *//**  * @brief usb configuration attributes  */#define USB_CONF_REMOTE_WAKEUP           2 /*!< usb configuration attributes remote wakeup */#define USB_CONF_SELF_POWERED            1 /*!< usb configuration attributes self powered *//**  * @brief usb standard feature selectors  */#define USB_FEATURE_EPT_HALT             0 /*!< usb standard feature selectors endpoint halt */#define USB_FEATURE_REMOTE_WAKEUP        1 /*!< usb standard feature selectors remote wakeup */#define USB_FEATURE_TEST_MODE            2 /*!< usb standard feature selectors test mode *//**  * @brief usb device connect state  */typedef enum{  USB_CONN_STATE_DEFAULT                =1, /*!< usb device connect state default */  USB_CONN_STATE_ADDRESSED,                 /*!< usb device connect state address */  USB_CONN_STATE_CONFIGURED,                /*!< usb device connect state configured */  USB_CONN_STATE_SUSPENDED                  /*!< usb device connect state suspend */}usbd_conn_state; /**  * @brief endpoint 0 state  */#define USB_EPT0_IDLE                    0 /*!< usb endpoint state idle */#define USB_EPT0_SETUP                   1 /*!< usb endpoint state setup */#define USB_EPT0_DATA_IN                 2 /*!< usb endpoint state data in */#define USB_EPT0_DATA_OUT                3 /*!< usb endpoint state data out */#define USB_EPT0_STATUS_IN               4 /*!< usb endpoint state status in */#define USB_EPT0_STATUS_OUT              5 /*!< usb endpoint state status out */#define USB_EPT0_STALL                   6 /*!< usb endpoint state stall */ /**  * @brief usb descriptor length  */#define USB_DEVICE_QUALIFIER_DESC_LEN    0x0A /*!< usb qualifier descriptor length */#define USB_DEVICE_DESC_LEN              0x12 /*!< usb device descriptor length */#define USB_DEVICE_CFG_DESC_LEN          0x09 /*!< usb configuration descriptor length */#define USB_DEVICE_IF_DESC_LEN           0x09 /*!< usb interface descriptor length */#define USB_DEVICE_EPT_LEN               0x07 /*!< usb endpoint descriptor length */#define USB_DEVICE_OTG_DESC_LEN          0x03 /*!< usb otg descriptor length */#define USB_DEVICE_LANGID_STR_DESC_LEN   0x04 /*!< usb lang id string descriptor length */#define USB_DEVICE_OTHER_SPEED_DESC_SIZ_LEN 0x09 /*!< usb other speed descriptor length *//**  * @brief usb class code  */#define USB_CLASS_CODE_AUDIO             0x01 /*!< usb class code audio */#define USB_CLASS_CODE_CDC               0x02 /*!< usb class code cdc */#define USB_CLASS_CODE_HID               0x03 /*!< usb class code hid */#define USB_CLASS_CODE_PRINTER           0x07 /*!< usb class code printer */#define USB_CLASS_CODE_MSC               0x08 /*!< usb class code msc */#define USB_CLASS_CODE_HUB               0x09 /*!< usb class code hub */#define USB_CLASS_CODE_CDCDATA           0x0A /*!< usb class code cdc data */#define USB_CLASS_CODE_CCID              0x0B /*!< usb class code ccid */#define USB_CLASS_CODE_VIDEO             0x0E /*!< usb class code video */#define USB_CLASS_CODE_VENDOR            0xFF /*!< usb class code vendor *//**  * @brief usb endpoint type  */#define USB_EPT_DESC_CONTROL             0x00 /*!< usb endpoint description type control */#define USB_EPT_DESC_ISO                 0x01 /*!< usb endpoint description type iso */#define USB_EPT_DESC_BULK                0x02 /*!< usb endpoint description type bulk */#define USB_EPT_DESC_INTERRUPT           0x03 /*!< usb endpoint description type interrupt */#define USB_EPT_DESC_NSYNC               0x00 /*!< usb endpoint description nsync */#define USB_ETP_DESC_ASYNC               0x04 /*!< usb endpoint description async */#define USB_ETP_DESC_ADAPTIVE            0x08 /*!< usb endpoint description adaptive */#define USB_ETP_DESC_SYNC                0x0C /*!< usb endpoint description sync */#define USB_EPT_DESC_DATA_EPT            0x00 /*!< usb endpoint description data */#define USB_EPT_DESC_FD_EPT              0x10 /*!< usb endpoint description fd */#define USB_EPT_DESC_FDDATA_EPT          0x20 /*!< usb endpoint description fddata *//**  * @brief endpoint 0 max size  */#define USB_MAX_EP0_SIZE                 64 /*!< usb endpoint 0 max size *//**  * @brief usb swap address  */#define SWAPBYTE(addr)        (uint16_t)(((uint16_t)(*((uint8_t *)(addr)))) + \                               (((uint16_t)(*(((uint8_t *)(addr)) + 1))) << 8)) /*!< swap address *//**  * @brief min and max define  */#define MIN(a, b)  (uint16_t)(((a) < (b)) ? (a) : (b)) /*!< min define*/#define MAX(a, b)  (uint16_t)(((a) > (b)) ? (a) : (b)) /*!< max define*//**  * @brief low byte and high byte define  */#define LBYTE(x)  ((uint8_t)(x & 0x00FF))        /*!< low byte define */#define HBYTE(x)  ((uint8_t)((x & 0xFF00) >>8))  /*!< high byte define*//**  * @}  *//** @defgroup USB_standard_exported_types  * @{  */  /**  * @brief usb return status  */typedef enum{  USB_OK,              /*!< usb status ok */  USB_FAIL,            /*!< usb status fail */  USB_WAIT,            /*!< usb status wait */  USB_NOT_SUPPORT,     /*!< usb status not support */  USB_ERROR,           /*!< usb status error */}usb_sts_type;/**   * @brief format of usb setup data  */typedef struct{  uint8_t                                bmRequestType;                 /*!< characteristics of request */  uint8_t                                bRequest;                      /*!< specific request */  uint16_t                               wValue;                        /*!< word-sized field that varies according to request */  uint16_t                               wIndex;                        /*!< word-sized field that varies according to request                                                                            typically used to pass an index or offset */  uint16_t                               wLength;                       /*!< number of bytes to transfer if there is a data stage */}usb_setup_type;/**   * @brief format of standard device descriptor  */typedef struct{  uint8_t                                bLength;                       /*!< size of this descriptor in bytes */  uint8_t                                bDescriptorType;               /*!< device descriptor type */  uint16_t                               bcdUSB;                        /*!< usb specification release number */  uint8_t                                bDeviceClass;                  /*!< class code (assigned by the usb-if) */  uint8_t                                bDeviceSubClass;               /*!< subclass code (assigned by the usb-if) */  uint8_t                                bDeviceProtocol;               /*!< protocol code ((assigned by the usb-if)) */  uint8_t                                bMaxPacketSize0;               /*!< maximum packet size for endpoint zero */  uint16_t                               idVendor;                      /*!< verndor id ((assigned by the usb-if)) */  uint16_t                               idProduct;                     /*!< product id ((assigned by the usb-if)) */  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 serial number */  uint8_t                                bNumConfigurations;            /*!< number of possible configurations */}usb_device_desc_type;/**   * @brief format of standard configuration descriptor  */typedef struct{  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 */  uint8_t                                bNumInterfaces;                 /*!< number of interfaces supported by this configuration */  uint8_t                                bConfigurationValue;            /*!< value to use as an argument to the SetConfiguration() request */  uint8_t                                iConfiguration;                 /*!< index of string descriptor describing this configuration */  uint8_t                                bmAttributes;                   /*!< configuration characteristics                                                                             D7 reserved                                                                            D6 self-powered                                                                            D5 remote wakeup                                                                            D4~D0 reserved */                                                                      uint8_t                                bMaxPower;                      /*!< maximum power consumption of the usb device from the bus */    }usb_configuration_desc_type;/**   * @brief format of standard interface descriptor  */typedef struct{  uint8_t                                bLength;                        /*!< size of this descriptor in bytes */  uint8_t                                bDescriptorType;                /*!< interface descriptor type */  uint8_t                                bInterfaceNumber;               /*!< number of this interface */  uint8_t                                bAlternateSetting;              /*!< value used to select this alternate setting for the interface */  uint8_t                                bNumEndpoints;                  /*!< number of endpoints used by this interface */          uint8_t                                bInterfaceClass;                /*!< class code (assigned by the usb-if) */  uint8_t                                bInterfaceSubClass;             /*!< subclass code (assigned by the usb-if) */  uint8_t                                bInterfaceProtocol;             /*!< protocol code (assigned by the usb-if) */  uint8_t                                iInterface;                     /*!< index of string descriptor describing this interface */}usb_interface_desc_type;/**   * @brief format of standard endpoint descriptor  */typedef struct{  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 */  uint8_t                                bmAttributes;                   /*!< describes the endpoints attributes when it is configured using bConfiguration value */  uint16_t                               wMaxPacketSize;                 /*!< maximum packet size this endpoint */  uint8_t                                bInterval;                      /*!< interval for polling endpoint for data transfers */  }usb_endpoint_desc_type;/**   * @brief format of header  */typedef struct{  uint8_t                                bLength;                        /*!< size of this descriptor in bytes */  uint8_t                                bDescriptorType;                /*!< descriptor type */}usb_header_desc_type;/**  * @}  *//**  * @}  */  /**  * @}  */#ifdef __cplusplus}#endif#endif
 |