本帖最后由 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参数)。
|