本帖最后由 vsfopen 于 2020-5-9 12:48 编辑
VSF在PC上,可以使用winusb或者libusb实现一个usbhcd驱动,可以直接驱动接在电脑上的USB外设。使用的时候,外设驱动需要通过zadig换成winusb的驱动。当然,有一些USB设备,在PC上无法换成winusb的驱动(比如XBOX手柄),这个就不支持了。
1)winusb驱动安装
1. USB外设接入win10电脑
2. 打开zadig,找到对应的设备(可能需要选中Options->List All Devices)
3. 目标驱动里,选择WinUSB,点击Repleace Driver,等一下就会提示安装完成
2)VSF的配置
1. vsf_usr_cfg.h里,加入如下配置:
# define VSF_USBH_CFG_ENABLE_ROOT_HUB DISABLED
# define VSF_USE_USB_HOST_HUB DISABLED
# define VSF_USE_USB_HOST_HCD_WINUSB ENABLED
# define VSF_WINUSB_HCD_CFG_DEV_NUM 2
# define VSF_WINUSB_HCD_DEV0_VID 0x0A12 // CSR8510 bthci
# define VSF_WINUSB_HCD_DEV0_PID 0x0001
# define VSF_WINUSB_HCD_DEV1_VID 0x0A5C // BCM20702 bthci
# define VSF_WINUSB_HCD_DEV1_PID 0x21E8
其中,VSF_WINUSB_HCD_CFG_DEV_NUM定义了要驱动的外设数量(每种只能驱动一个)。
VSF_WINUSB_HCD_DEVX_VID和VSF_WINUSB_HCD_DEVX_PID指定了对应的外设VID/PID。
2. 用户层代码:
struct usrapp_usbh_common_const_t {
vk_winusb_hcd_param_t winusb_hcd_param;
};
typedef struct usrapp_usbh_common_const_t usrapp_usbh_common_const_t;
const usrapp_usbh_common_const_t usrapp_usbh_common_const = {
.winusb_hcd_param = {
.priority = APP_CFG_USBH_HW_PRIO,
},
};
struct usrapp_usbh_common_t {
vk_usbh_t host;
vk_usbh_class_t bthci;
};
typedef struct usrapp_usbh_common_t usrapp_usbh_common_t;
usrapp_usbh_common_t usrapp_usbh_common = {
.host.drv = &vk_winusb_hcd_drv,
.host.param = (void*)&usrapp_usbh_common_const.winusb_hcd_param,
.bthci.drv = &vk_usbh_bthci_drv,
};
vsf_err_t usrapp_usbh_common_init(void)
{
vk_usbh_init(&usrapp_usbh_common.host);
vk_usbh_register_class(&usrapp_usbh_common.host, &usrapp_usbh_common.bthci);
}
这里定义了winusb_hcd_param,需要设置硬件优先级(即使在win10上运行,VSF的win10移植也实现了64个硬件优先级)。
然后,host.drv和host.param分别设置为vk_winusb_hcd_drv(winusb_hcd驱动)和前面的winusb_hcd_param(winusb_hcd参数)。
|