1 /** 2 ************************************************************************** 3 * @file usbd_core.h 4 * @brief usb device core header file 5 ************************************************************************** 6 * Copyright notice & Disclaimer 7 * 8 * The software Board Support Package (BSP) that is made available to 9 * download from Artery official website is the copyrighted work of Artery. 10 * Artery authorizes customers to use, copy, and distribute the BSP 11 * software and its related documentation for the purpose of design and 12 * development in conjunction with Artery microcontrollers. Use of the 13 * software is governed by this copyright notice and the following disclaimer. 14 * 15 * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, 16 * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, 17 * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR 18 * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, 19 * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, 20 * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. 21 * 22 ************************************************************************** 23 */ 24 25 /* define to prevent recursive inclusion -------------------------------------*/ 26 #ifndef __USBD_CORE_H 27 #define __USBD_CORE_H 28 29 #ifdef __cplusplus 30 extern "C" { 31 #endif 32 33 #include "usb_std.h" 34 35 /** @addtogroup USBD_drivers_core 36 * @{ 37 */ 38 39 /** @defgroup USBD_core_exported_types 40 * @{ 41 */ 42 43 #ifdef USE_OTG_DEVICE_MODE 44 45 /** 46 * @brief usb device speed 47 */ 48 #ifndef USB_HIGH_SPEED 49 #define USB_HIGH_SPEED 0 50 #endif 51 52 #ifndef USB_FULL_SPEED 53 #define USB_FULL_SPEED 1 54 #endif 55 56 /** 57 * @brief usb device event 58 */ 59 typedef enum 60 { 61 USBD_NOP_EVENT, /*!< usb device nop event */ 62 USBD_RESET_EVENT, /*!< usb device reset event */ 63 USBD_SUSPEND_EVENT, /*!< usb device suspend event */ 64 USBD_WAKEUP_EVENT, /*!< usb device wakeup event */ 65 USBD_DISCONNECT_EVNET, /*!< usb device disconnect event */ 66 USBD_INISOINCOM_EVENT, /*!< usb device inisoincom event */ 67 USBD_OUTISOINCOM_EVENT, /*!< usb device outisoincom event */ 68 USBD_ERR_EVENT /*!< usb device error event */ 69 }usbd_event_type; 70 71 /** 72 * @brief usb device descriptor struct 73 */ 74 typedef struct 75 { 76 uint16_t length; /*!< descriptor length */ 77 uint8_t *descriptor; /*!< descriptor string */ 78 }usbd_desc_t; 79 80 /** 81 * @brief usb device descriptor handler 82 */ 83 typedef struct 84 { 85 usbd_desc_t *(*get_device_descriptor)(void); /*!< get device descriptor callback */ 86 usbd_desc_t *(*get_device_qualifier)(void); /*!< get device qualifier callback */ 87 usbd_desc_t *(*get_device_configuration)(void); /*!< get device configuration callback */ 88 usbd_desc_t *(*get_device_other_speed)(void); /*!< get device other speed callback */ 89 usbd_desc_t *(*get_device_lang_id)(void); /*!< get device lang id callback */ 90 usbd_desc_t *(*get_device_manufacturer_string)(void); /*!< get device manufacturer callback */ 91 usbd_desc_t *(*get_device_product_string)(void); /*!< get device product callback */ 92 usbd_desc_t *(*get_device_serial_string)(void); /*!< get device serial callback */ 93 usbd_desc_t *(*get_device_interface_string)(void); /*!< get device interface string callback */ 94 usbd_desc_t *(*get_device_config_string)(void); /*!< get device device config callback */ 95 usbd_desc_t *(*get_hs_device_configuration)(void); /*!< get hs device configuration callback */ 96 }usbd_desc_handler; 97 98 /** 99 * @brief usb device class handler 100 */ 101 typedef struct 102 { 103 usb_sts_type (*init_handler)(void *udev); /*!< usb class init handler */ 104 usb_sts_type (*clear_handler)(void *udev); /*!< usb class clear handler */ 105 usb_sts_type (*setup_handler)(void *udev, usb_setup_type *setup); /*!< usb class setup handler */ 106 usb_sts_type (*ept0_tx_handler)(void *udev); /*!< usb class endpoint 0 tx complete handler */ 107 usb_sts_type (*ept0_rx_handler)(void *udev); /*!< usb class endpoint 0 rx complete handler */ 108 usb_sts_type (*in_handler)(void *udev, uint8_t ept_num); /*!< usb class in transfer complete handler */ 109 usb_sts_type (*out_handler)(void *udev, uint8_t ept_num); /*!< usb class out transfer complete handler */ 110 usb_sts_type (*sof_handler)(void *udev); /*!< usb class sof handler */ 111 usb_sts_type (*event_handler)(void *udev, usbd_event_type event); /*!< usb class event handler */ 112 void *pdata; /*!< usb class data pointer */ 113 }usbd_class_handler; 114 115 /** 116 * @brief usb device core struct type 117 */ 118 typedef struct 119 { 120 usb_reg_type *usb_reg; /*!< usb register pointer */ 121 122 usbd_class_handler *class_handler; /*!< usb device class handler pointer */ 123 usbd_desc_handler *desc_handler; /*!< usb device descriptor handler pointer */ 124 125 usb_ept_info ept_in[USB_EPT_MAX_NUM]; /*!< usb in endpoint infomation struct */ 126 usb_ept_info ept_out[USB_EPT_MAX_NUM]; /*!< usb out endpoint infomation struct */ 127 128 usb_setup_type setup; /*!< usb setup type struct */ 129 uint32_t setup_buffer[12]; /*!< usb setup request buffer */ 130 131 uint8_t ept0_sts; /*!< usb control endpoint 0 state */ 132 uint8_t speed; /*!< usb speed */ 133 uint16_t ept0_wlength; /*!< usb endpoint 0 transfer length */ 134 135 usbd_conn_state conn_state; /*!< usb current connect state */ 136 usbd_conn_state old_conn_state; /*!< usb save the previous connect state */ 137 138 uint8_t device_addr; /*!< device address */ 139 uint8_t remote_wakup; /*!< remote wakeup state */ 140 uint8_t default_config; /*!< usb default config state */ 141 uint8_t dev_config; /*!< usb device config state */ 142 uint32_t config_status; /*!< usb configure status */ 143 uint32_t dma_en; /*!< usb dma enable */ 144 uint8_t test_mode; 145 146 void *pdata; 147 }usbd_core_type; 148 149 void usbd_core_in_handler(usbd_core_type *udev, uint8_t ept_num); 150 void usbd_core_out_handler(usbd_core_type *udev, uint8_t ept_num); 151 void usbd_core_setup_handler(usbd_core_type *udev, uint8_t ept_num); 152 void usbd_ctrl_unsupport(usbd_core_type *udev); 153 void usbd_ept0_out_dma_set(usbd_core_type *udev); 154 void usbd_ctrl_send(usbd_core_type *udev, uint8_t *buffer, uint16_t len); 155 void usbd_ctrl_recv(usbd_core_type *udev, uint8_t *buffer, uint16_t len); 156 void usbd_ctrl_send_status(usbd_core_type *udev); 157 void usbd_ctrl_recv_status(usbd_core_type *udev); 158 void usbd_set_stall(usbd_core_type *udev, uint8_t ept_addr); 159 void usbd_clear_stall(usbd_core_type *udev, uint8_t ept_addr); 160 void usbd_ept_open(usbd_core_type *udev, uint8_t ept_addr, uint8_t ept_type, uint16_t maxpacket); 161 void usbd_ept_close(usbd_core_type *udev, uint8_t ept_addr); 162 void usbd_ept_send(usbd_core_type *udev, uint8_t ept_num, uint8_t *buffer, uint16_t len); 163 void usbd_ept_recv(usbd_core_type *udev, uint8_t ept_num, uint8_t *buffer, uint16_t len); 164 void usbd_connect(usbd_core_type *udev); 165 void usbd_disconnect(usbd_core_type *udev); 166 void usbd_set_device_addr(usbd_core_type *udev, uint8_t address); 167 uint32_t usbd_get_recv_len(usbd_core_type *udev, uint8_t ept_addr); 168 void usb_ept_defaut_init(usbd_core_type *udev); 169 usbd_conn_state usbd_connect_state_get(usbd_core_type *udev); 170 void usbd_remote_wakeup(usbd_core_type *udev); 171 void usbd_enter_suspend(usbd_core_type *udev); 172 void usbd_flush_tx_fifo(usbd_core_type *udev, uint8_t ept_num); 173 void usbd_fifo_alloc(usbd_core_type *udev); 174 usb_sts_type usbd_core_init(usbd_core_type *udev, 175 usb_reg_type *usb_reg, 176 uint8_t core_id); 177 #endif 178 179 /** 180 * @} 181 */ 182 183 /** 184 * @} 185 */ 186 187 #ifdef __cplusplus 188 } 189 #endif 190 191 #endif 192