fix: fix winusb string and audio macro

Signed-off-by: sakumisu <1203593632@qq.com>
This commit is contained in:
sakumisu
2025-12-26 12:41:31 +08:00
parent 94d1c6b1be
commit 7317913efa
3 changed files with 34 additions and 28 deletions

View File

@@ -745,6 +745,7 @@ struct usb_desc_header {
'T', 0, /* bString[3] */ \ 'T', 0, /* bString[3] */ \
'1', 0, /* bString[4] */ \ '1', 0, /* bString[4] */ \
'0', 0, /* bString[5] */ \ '0', 0, /* bString[5] */ \
'0', 0, /* bString[6] */ \
vendor_code, /* bMS_VendorCode */ \ vendor_code, /* bMS_VendorCode */ \
0x00 /* bPad */ 0x00 /* bPad */

View File

@@ -125,10 +125,10 @@
#define AUDIO_AC_SIZ (AUDIO_SIZEOF_AC_HEADER_DESC(2) + \ #define AUDIO_AC_SIZ (AUDIO_SIZEOF_AC_HEADER_DESC(2) + \
AUDIO_SIZEOF_AC_INPUT_TERMINAL_DESC + \ AUDIO_SIZEOF_AC_INPUT_TERMINAL_DESC + \
AUDIO_SIZEOF_AC_FEATURE_UNIT_DESC(2, 1) + \ AUDIO_SIZEOF_AC_FEATURE_UNIT_DESC(IN_CHANNEL_NUM, 1) + \
AUDIO_SIZEOF_AC_OUTPUT_TERMINAL_DESC + \ AUDIO_SIZEOF_AC_OUTPUT_TERMINAL_DESC + \
AUDIO_SIZEOF_AC_INPUT_TERMINAL_DESC + \ AUDIO_SIZEOF_AC_INPUT_TERMINAL_DESC + \
AUDIO_SIZEOF_AC_FEATURE_UNIT_DESC(2, 1) + \ AUDIO_SIZEOF_AC_FEATURE_UNIT_DESC(OUT_CHANNEL_NUM, 1) + \
AUDIO_SIZEOF_AC_OUTPUT_TERMINAL_DESC) AUDIO_SIZEOF_AC_OUTPUT_TERMINAL_DESC)
#ifdef CONFIG_USBDEV_ADVANCE_DESC #ifdef CONFIG_USBDEV_ADVANCE_DESC

View File

@@ -1,21 +1,42 @@
usbd_winusb usbd_winusb
=============== ===============
本节主要介绍 winusb 驱动。winusb 是 windows 为了让用户友好的访问 USB 自定义类设备提供的一套通用驱动,其实本质就是 CDC ACM。 本节主要介绍 winusb 驱动。winusb 是 windows 为了让用户友好的访问 USB 自定义类设备提供的一套通用驱动,其实本质就是 CDC ACM,只不过没有设置波特率的命令
WINUSB 版本根据 USB 版本分为 V1/V2 版本V2 版本需要包含 BOS 描述符V1 版本不需要。V2 版本需要在设备描述符中设置为 USB2.1 的版本号。 WINUSB 版本根据 USB 版本分为 V1/V2 版本V2 版本需要包含 BOS 描述符V1 版本不需要。 **V2 版本需要在设备描述符中设置为 USB2.1 的版本号**
.. note:: 如果使用复合设备,必须使用 V2 版本的 winusb 驱动 .. note:: 更换 winusb 描述符任意配置可能会枚举成功但是无法识别设备,需要删除 计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\usbflags 下所有注册表项,重新插拔设备后生效
- V1 版本注册描述符 - V1 版本注册描述符
.. code-block:: C .. code-block:: C
const struct usb_descriptor winusbv1_descriptor = {
.device_descriptor_callback = device_descriptor_callback,
.config_descriptor_callback = config_descriptor_callback,
.device_quality_descriptor_callback = device_quality_descriptor_callback,
.string_descriptor_callback = string_descriptor_callback,
.msosv1_descriptor = &msosv1_desc
};
OR
usbd_msosv1_desc_register(busid, &msosv1_desc); usbd_msosv1_desc_register(busid, &msosv1_desc);
- V2 版本注册描述符 - V2 版本注册描述符
.. code-block:: C .. code-block:: C
const struct usb_descriptor winusbv2_descriptor = {
.device_descriptor_callback = device_descriptor_callback,
.config_descriptor_callback = config_descriptor_callback,
.device_quality_descriptor_callback = device_quality_descriptor_callback,
.string_descriptor_callback = string_descriptor_callback,
.msosv2_descriptor = &msosv2_desc,
.bos_descriptor = &bos_desc,
};
OR
usbd_bos_desc_register(busid, &bos_desc); usbd_bos_desc_register(busid, &bos_desc);
usbd_msosv2_desc_register(busid, &msosv2_desc); usbd_msosv2_desc_register(busid, &msosv2_desc);
@@ -31,20 +52,4 @@ WINUSB 版本根据 USB 版本分为 V1/V2 版本V2 版本需要包含 BOS
/* Endpoint IN 1 */ /* Endpoint IN 1 */
USB_ENDPOINT_DESCRIPTOR_INIT(WINUSB_IN_EP, USB_ENDPOINT_TYPE_BULK, WINUSB_EP_MPS, 0x00), USB_ENDPOINT_DESCRIPTOR_INIT(WINUSB_IN_EP, USB_ENDPOINT_TYPE_BULK, WINUSB_EP_MPS, 0x00),
- 其余操作与 CDC ACM 相同,不再赘述 - 读写操作与 CDC ACM 相同,不再赘述
在 V2 版本中WINUSB 需要提供 WCID 描述符,有两个宏,分别是 `USB_MSOSV2_COMP_ID_FUNCTION_WINUSB_SINGLE_DESCRIPTOR_INIT``USB_MSOSV2_COMP_ID_FUNCTION_WINUSB_MULTI_DESCRIPTOR_INIT`,这里需要注意,
前者用于单 WINUSB 设备也就是接口总数只能是1后者用于复合设备可以使用 1 ~ 多个 WINUSB 接口的设备。因此,即使同样是 1个 WINUSB 设备,不同情况宏的配置也是不一样的,只能说,微软工程师的脑回路就是跟正常人不一样。
.. code-block:: C
const uint8_t WINUSB_WCIDDescriptor[] = {
#if WINUSB_NUM == 1
USB_MSOSV2_COMP_ID_SET_HEADER_DESCRIPTOR_INIT(10 + USB_MSOSV2_COMP_ID_FUNCTION_WINUSB_SINGLE_DESCRIPTOR_LEN),
USB_MSOSV2_COMP_ID_FUNCTION_WINUSB_SINGLE_DESCRIPTOR_INIT(),
#else
USB_MSOSV2_COMP_ID_SET_HEADER_DESCRIPTOR_INIT(10 + WINUSB_NUM * USB_MSOSV2_COMP_ID_FUNCTION_WINUSB_MULTI_DESCRIPTOR_LEN),
USB_MSOSV2_COMP_ID_FUNCTION_WINUSB_MULTI_DESCRIPTOR_INIT(0x00),
USB_MSOSV2_COMP_ID_FUNCTION_WINUSB_MULTI_DESCRIPTOR_INIT(0x01),
#endif
};