summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorsakumisu <[email protected]>2022-07-28 21:25:29 +0800
committersakumisu <[email protected]>2022-07-28 21:35:22 +0800
commitf1bc0aef0419d648967779d9807bd00784cb9987 (patch)
treeb6b3cfbde9794e6091b7cd63d0670f1b898bc024 /common
parentd2fb9b36246dc1285c29a8581b3a3b58cb213f1e (diff)
refactor dcd api and ep in/out irq callback process
Diffstat (limited to 'common')
-rw-r--r--common/usb_dc.h107
-rw-r--r--common/usb_mem.h5
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