From e5182271aefa03764b3a0c1679d6cdbe9e69401f Mon Sep 17 00:00:00 2001 From: sakumisu <1203593632@qq.com> Date: Sun, 20 Feb 2022 21:03:19 +0800 Subject: [PATCH] update porting template --- port/template/usb_dc.c | 9 +++ port/template/usb_hc.c | 156 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 165 insertions(+) create mode 100644 port/template/usb_hc.c diff --git a/port/template/usb_dc.c b/port/template/usb_dc.c index 863e5452..19162865 100644 --- a/port/template/usb_dc.c +++ b/port/template/usb_dc.c @@ -1,5 +1,9 @@ #include "usbd_core.h" +#ifndef USBD_IRQHandler +#define USBD_IRQHandler USB_FS_Handler //use actual usb irq name instead +#endif + #ifndef USB_NUM_BIDIR_ENDPOINTS #define USB_NUM_BIDIR_ENDPOINTS 5 #endif @@ -34,6 +38,7 @@ int usb_dc_init(void) { memset(&usb_dc_cfg, 0, sizeof(struct usb_dc_config_priv)); + usb_dc_low_level_init(); return 0; } @@ -59,18 +64,22 @@ int usbd_ep_open(const struct usbd_endpoint_cfg *ep_cfg) } return 0; } + int usbd_ep_close(const uint8_t ep) { return 0; } + int usbd_ep_set_stall(const uint8_t ep) { return 0; } + int usbd_ep_clear_stall(const uint8_t ep) { return 0; } + int usbd_ep_is_stalled(const uint8_t ep, uint8_t *stalled) { return 0; diff --git a/port/template/usb_hc.c b/port/template/usb_hc.c new file mode 100644 index 00000000..62122352 --- /dev/null +++ b/port/template/usb_hc.c @@ -0,0 +1,156 @@ +#include "usbh_core.h" + +#ifndef USBH_IRQHandler +#define USBH_IRQHandler OTG_FS_IRQHandler +#endif + +struct usb_xxx_priv { + volatile bool connected; /* Connected to device */ + volatile bool pscwait; /* True: Thread is waiting for a port event */ + usb_osal_sem_t exclsem; /* Support mutually exclusive access */ +} g_usbhost; + +__WEAK void usb_hc_low_level_init(void) +{ +} + +int usb_hc_init(void) +{ + memset(&g_usbhost, 0, sizeof(struct usb_xxx_priv)); + + usb_hc_low_level_init(); + + return 0; +} + +int usbh_reset_port(const uint8_t port) +{ + return 0; +} + +uint8_t usbh_get_port_speed(const uint8_t port) +{ + return USB_SPEED_FULL; +} + +int usbh_ep0_reconfigure(usbh_epinfo_t ep, uint8_t dev_addr, uint8_t ep_mps, uint8_t speed) +{ + int ret; + + ret = usb_osal_mutex_take(g_usbhost.exclsem); + if (ret < 0) { + return ret; + } + + usb_osal_mutex_give(g_usbhost.exclsem); + return ret; +} + +int usbh_ep_alloc(usbh_epinfo_t *ep, const struct usbh_endpoint_cfg *ep_cfg) +{ + int ret; + struct usbh_hubport *hport; + + ret = usb_osal_mutex_take(g_usbhost.exclsem); + if (ret < 0) { + return ret; + } + + hport = ep_cfg->hport; + + if (ep_cfg->ep_type == USB_ENDPOINT_TYPE_CONTROL) { + } else { + } + + usb_osal_mutex_give(g_usbhost.exclsem); + return 0; +} + +int usbh_ep_free(usbh_epinfo_t ep) +{ + int ret; + + ret = usb_osal_mutex_take(g_usbhost.exclsem); + if (ret < 0) { + return ret; + } + + usb_osal_mutex_give(g_usbhost.exclsem); + return 0; +} + +int usbh_control_transfer(usbh_epinfo_t ep, struct usb_setup_packet *setup, uint8_t *buffer) +{ + int ret; + + ret = usb_osal_mutex_take(g_usbhost.exclsem); + if (ret < 0) { + return ret; + } + + usb_osal_mutex_give(g_usbhost.exclsem); + return ret; +} + +int usbh_ep_bulk_transfer(usbh_epinfo_t ep, uint8_t *buffer, uint32_t buflen) +{ + int ret; + + ret = usb_osal_mutex_take(g_usbhost.exclsem); + if (ret < 0) { + return ret; + } + + usb_osal_mutex_give(g_usbhost.exclsem); + return ret; +} + +int usbh_ep_intr_transfer(usbh_epinfo_t ep, uint8_t *buffer, uint32_t buflen) +{ + int ret; + + ret = usb_osal_mutex_take(g_usbhost.exclsem); + if (ret < 0) { + return ret; + } + + usb_osal_mutex_give(g_usbhost.exclsem); + return ret; +} + +int usbh_ep_bulk_async_transfer(usbh_epinfo_t ep, uint8_t *buffer, uint32_t buflen, usbh_asynch_callback_t callback, void *arg) +{ + int ret; + + ret = usb_osal_mutex_take(g_usbhost.exclsem); + if (ret < 0) { + return ret; + } + + usb_osal_mutex_give(g_usbhost.exclsem); + + return ret; +} + +int usbh_ep_intr_async_transfer(usbh_epinfo_t ep, uint8_t *buffer, uint32_t buflen, usbh_asynch_callback_t callback, void *arg) +{ + int ret; + + ret = usb_osal_mutex_take(g_usbhost.exclsem); + if (ret < 0) { + return ret; + } + + usb_osal_mutex_give(g_usbhost.exclsem); + + return ret; +} + +int usb_ep_cancel(usbh_epinfo_t ep) +{ + return 0; +} + +void USBH_IRQHandler(void) +{ +} \ No newline at end of file