mirror of
https://gitee.com/Vancouver2017/luban-lite.git
synced 2025-12-24 04:58:54 +00:00
161 lines
2.9 KiB
C
161 lines
2.9 KiB
C
#include "usbh_core.h"
|
|
|
|
#ifndef USBH_IRQHandler
|
|
#define USBH_IRQHandler OTG_FS_IRQHandler
|
|
#endif
|
|
|
|
struct xxx_hcd {
|
|
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_xxx_hcd;
|
|
|
|
__WEAK void usb_hc_low_level_init(void)
|
|
{
|
|
}
|
|
|
|
int usb_hc_sw_init(void)
|
|
{
|
|
memset(&g_usbhost, 0, sizeof(struct xxx_hcd));
|
|
|
|
return 0;
|
|
}
|
|
|
|
int usb_hc_hw_init(void)
|
|
{
|
|
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)
|
|
{
|
|
} |