summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsakumisu <[email protected]>2022-02-20 21:03:19 +0800
committersakumisu <[email protected]>2022-02-20 21:03:19 +0800
commite5182271aefa03764b3a0c1679d6cdbe9e69401f (patch)
tree711a37aa886a295fb2d90f19571718c7019924f9
parentc87abd56503ad07f9062c984728a856ae9ef0366 (diff)
update porting template
-rw-r--r--port/template/usb_dc.c9
-rw-r--r--port/template/usb_hc.c156
2 files changed, 165 insertions, 0 deletions
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