软件资源如下:
对于MM32 MCU的WebUSB,我们可以配置WebUSB的参数来让网页识别设备。
#define USBD_WEBUSB_STRDESC L"WebUSB: MM32"
// WebUSB support
#define USBD_WEBUSB_ENABLE WEBUSB_INTERFACE
#define USBD_WEBUSB_VENDOR_CODE 0x21
#define USBD_WEBUSB_LANDING_URL "os.mbed.com/webusb/landing-page/?bid="
#define USBD_WEBUSB_ORIGIN_URL "os.mbed.com/"
参数设置如上可以看到电脑上显示的设备名称WebUSB:MM32,如下:
图2 WebUSB枚举列表
在使用MM32 WebUSB功能之前先调用USB初始化函数来初始化USB协议栈。
int main(void)
{
// USB Device Initialization and connect
usbd_init();
usbd_connect(__TRUE);
while (!usbd_configured()) // Wait for USB Device to configure
{
}
while (1)
{
……
}
}
然后依然和之前一样只是在WINUSB基础上添加WebUSB相关参数函数接口即可,代码如下:
#IF (USBD_WEBUSB_ENABLE)
usbd_webusb_if_num = if_num++;
desc_ptr += webusb_desc_fill(&USBD_ConfigDescriptor[desc_ptr], &USBD_ConfigDescriptor_HS[desc_ptr], usbd_webusb_if_num);
#endif
#if (USBD_WEBUSB_ENABLE)
static U16 webusb_desc_fill(U8 * config_desc, U8 * config_desc_hs, U8 if_num) {
U8 * pD = 0;
const U8 webusb_desc[] = {
WEBUSB_DESC
};
pD = config_desc;
memcpy(pD, webusb_desc, sizeof(webusb_desc));
((USB_INTERFACE_DESCRIPTOR *)pD)->bInterfaceNumber = if_num;
#if (USBD_HS_ENABLE == 1)
pD = config_desc_hs;
memcpy(pD, webusb_desc, sizeof(webusb_desc));
((USB_INTERFACE_DESCRIPTOR *)pD)->bInterfaceNumber = if_num;
#endif
#if (USBD_WINUSB_ENABLE)
pD = USBD_WinUSBDescriptorSetDescriptor + WINUSB_DESCRIPTOR_SET_HEADER_SIZE;
((WINUSB_FUNCTION_SUBSET_HEADER*)pD)->bFirstInterface = if_num;
#else
#error "WEBUSB requires WINUSB!"
#endif
return sizeof(webusb_desc);
}
#endif
|