diff options
| author | sakumisu <[email protected]> | 2022-07-28 21:25:29 +0800 |
|---|---|---|
| committer | sakumisu <[email protected]> | 2022-07-28 21:35:22 +0800 |
| commit | f1bc0aef0419d648967779d9807bd00784cb9987 (patch) | |
| tree | b6b3cfbde9794e6091b7cd63d0670f1b898bc024 /common | |
| parent | d2fb9b36246dc1285c29a8581b3a3b58cb213f1e (diff) | |
refactor dcd api and ep in/out irq callback process
Diffstat (limited to 'common')
| -rw-r--r-- | common/usb_dc.h | 107 | ||||
| -rw-r--r-- | common/usb_mem.h | 5 |
2 files changed, 37 insertions, 75 deletions
diff --git a/common/usb_dc.h b/common/usb_dc.h index dd060a5a..0910283a 100644 --- a/common/usb_dc.h +++ b/common/usb_dc.h @@ -68,27 +68,6 @@ int usb_dc_init(void); int usb_dc_deinit(void); /** - * @brief Attach USB for device connection - * - * Function to attach USB for device connection. Upon success, the USB PLL - * is enabled, and the USB device is now capable of transmitting and receiving - * on the USB bus and of generating interrupts. - * - * @return 0 on success, negative errno code on fail. - */ -int usb_dc_attach(void); - -/** - * @brief Detach the USB device - * - * Function to detach the USB device. Upon success, the USB hardware PLL - * is powered down and USB communication is disabled. - * - * @return 0 on success, negative errno code on fail. - */ -int usb_dc_detach(void); - -/** * @brief Set USB device address * * @param[in] addr Device address @@ -155,7 +134,10 @@ int usbd_ep_clear_stall(const uint8_t ep); int usbd_ep_is_stalled(const uint8_t ep, uint8_t *stalled); /** - * @brief Write data to the specified endpoint with poll mode. + * @brief Setup in ep transfer setting and start transfer. + * + * This function is asynchronous. + * This function is similar to uart with tx dma. * * This function is called to write data to the specified endpoint. The * supplied usbd_endpoint_callback function will be called when data is transmitted @@ -166,77 +148,54 @@ int usbd_ep_is_stalled(const uint8_t ep, uint8_t *stalled); * @param[in] data Pointer to data to write * @param[in] data_len Length of the data requested to write. This may * be zero for a zero length status packet. - * @param[out] ret_bytes Bytes scheduled for transmission. This value - * may be NULL if the application expects all - * bytes to be written - * * @return 0 on success, negative errno code on fail. */ -int usbd_ep_write(const uint8_t ep, const uint8_t *data, uint32_t data_len, uint32_t *ret_bytes); +int usbd_ep_start_write(const uint8_t ep, const uint8_t *data, uint32_t data_len); /** - * @brief Read data from the specified endpoint + * @brief Setup out ep transfer setting and start transfer. * - * This function is called by the endpoint handler function, after an OUT - * interrupt has been received for that EP. The application must only call this - * function through the supplied usbd_ep_callback function. This function clears - * the ENDPOINT NAK when max_data_len is 0, if all data in the endpoint FIFO has been read, - * so as to accept more data from host. + * This function is asynchronous. + * This function is similar to uart with rx dma. * - * @param[in] ep Endpoint address corresponding to the one - * listed in the device configuration table - * @param[in] data Pointer to data buffer to write to - * @param[in] max_data_len Max length of data to read - * @param[out] read_bytes Number of bytes read. If data is NULL and - * max_data_len is 0 the number of bytes - * available for read should be returned. - * - * @return 0 on success, negative errno code on fail. - */ -int usbd_ep_read(const uint8_t ep, uint8_t *data, uint32_t max_data_len, uint32_t *read_bytes); - -/** - * @brief Write data to the specified endpoint with async mode. + * This function is called to read data to the specified endpoint. The + * supplied usbd_endpoint_callback function will be called when data is received + * in. * * @param[in] ep Endpoint address corresponding to the one * listed in the device configuration table - * @param[in] data Pointer to data to write - * @param[in] data_len Length of the data requested to write. This may - * be zero for a zero length status packet. + * @param[in] data Pointer to data to read + * @param[in] data_len Max length of the data requested to read. * * @return 0 on success, negative errno code on fail. */ -int usbd_ep_write_async(const uint8_t ep, const uint8_t *data, uint32_t data_len); +int usbd_ep_start_read(const uint8_t ep, uint8_t *data, uint32_t data_len); + +/* usb dcd irq callback */ /** - * @brief Read data from the specified endpoint with async mode.Actually,this function is used for these endpoint transferring with dma mode. - * - * @param[in] ep Endpoint address corresponding to the one - * listed in the device configuration table - * @param[in] data Pointer to data buffer to write to - * @param[in] data_len Max length of data to read - * - * @return 0 on success, negative errno code on fail. + * @brief Usb reset irq callback. */ -int usbd_ep_read_async(const uint8_t ep, uint8_t *data, uint32_t data_len); - +void usbd_event_reset_handler(void); /** - * @brief Get actual read len when ep transfers completely by usbd_ep_read_async. - * - * @param[in] ep Endpoint address corresponding to the one - * listed in the device configuration table - * @return Actual read len. + * @brief Usb setup packet recv irq callback. + * @param[in] psetup setup packet. */ -uint32_t usbd_ep_get_read_len(const uint8_t ep); - +void usbd_event_ep0_setup_complete_handler(uint8_t *psetup); /** - * @brief Get endpoint max packet size. - * - * @param[in] ep Endpoint address corresponding to the one - * listed in the device configuration table - * @return endpoint max packet size. + * @brief In ep transfer complete irq callback. + * @param[in] ep Endpoint address corresponding to the one + * listed in the device configuration table + * @param[in] nbytes How many nbytes have transferred. + */ +void usbd_event_ep_in_complete_handler(uint8_t ep, uint32_t nbytes); +/** + * @brief Out ep transfer complete irq callback. + * @param[in] ep Endpoint address corresponding to the one + * listed in the device configuration table + * @param[in] nbytes How many nbytes have transferred. */ -uint16_t usbd_ep_get_mps(const uint8_t ep); +void usbd_event_ep_out_complete_handler(uint8_t ep, uint32_t nbytes); /** * @} diff --git a/common/usb_mem.h b/common/usb_mem.h index 6f8b2422..0771e552 100644 --- a/common/usb_mem.h +++ b/common/usb_mem.h @@ -27,9 +27,12 @@ #define CONFIG_DCACHE_LINE_SIZE 32 #endif -#ifdef CONFIG_USB_DCACHE_ENABLE +#if defined(CONFIG_USB_DCACHE_ENABLE) #define USB_NOCACHE_RAM_SECTION __attribute__((section(".nocache_ram"))) #define USB_MEM_ALIGN32 __attribute__((aligned(CONFIG_DCACHE_LINE_SIZE))) +#elif defined(CONFIG_USB_ALIGN32) +#define USB_NOCACHE_RAM_SECTION +#define USB_MEM_ALIGN32 __attribute__((aligned(32))) #else #define USB_NOCACHE_RAM_SECTION #define USB_MEM_ALIGN32 |
