Explorar o código

fix: fix winusb string and audio macro

Signed-off-by: sakumisu <1203593632@qq.com>
sakumisu hai 2 semanas
pai
achega
7317913efa

+ 3 - 2
common/usb_def.h

@@ -737,14 +737,15 @@ struct usb_desc_header {
 #define USB_BOS_CAP_PLATFORM_WINUSB_DESCRIPTOR_LEN 28
 
 #define USB_MSOSV1_STRING_DESCRIPTOR_INIT(vendor_code) \
-    0x12,                       /* bLength */                              \
-    USB_DESCRIPTOR_TYPE_STRING, /* bDescriptorType */                      \
+    0x12,                       /* bLength */                             \
+    USB_DESCRIPTOR_TYPE_STRING, /* bDescriptorType */                     \
     'M', 0,                     /* bString[0] */                          \
     'S', 0,                     /* bString[1] */                          \
     'F', 0,                     /* bString[2] */                          \
     'T', 0,                     /* bString[3] */                          \
     '1', 0,                     /* bString[4] */                          \
     '0', 0,                     /* bString[5] */                          \
+    '0', 0,                     /* bString[6] */                          \
     vendor_code,                /* bMS_VendorCode */                      \
     0x00                        /* bPad */
 

+ 6 - 6
demo/audio_v1_mic_speaker_multichan_template.c

@@ -123,12 +123,12 @@
                                         AUDIO_AS_FEEDBACK_DESCRIPTOR_LEN(1))
 #endif
 
-#define AUDIO_AC_SIZ (AUDIO_SIZEOF_AC_HEADER_DESC(2) +          \
-                      AUDIO_SIZEOF_AC_INPUT_TERMINAL_DESC +     \
-                      AUDIO_SIZEOF_AC_FEATURE_UNIT_DESC(2, 1) + \
-                      AUDIO_SIZEOF_AC_OUTPUT_TERMINAL_DESC +    \
-                      AUDIO_SIZEOF_AC_INPUT_TERMINAL_DESC +     \
-                      AUDIO_SIZEOF_AC_FEATURE_UNIT_DESC(2, 1) + \
+#define AUDIO_AC_SIZ (AUDIO_SIZEOF_AC_HEADER_DESC(2) +                        \
+                      AUDIO_SIZEOF_AC_INPUT_TERMINAL_DESC +                   \
+                      AUDIO_SIZEOF_AC_FEATURE_UNIT_DESC(IN_CHANNEL_NUM, 1) +  \
+                      AUDIO_SIZEOF_AC_OUTPUT_TERMINAL_DESC +                  \
+                      AUDIO_SIZEOF_AC_INPUT_TERMINAL_DESC +                   \
+                      AUDIO_SIZEOF_AC_FEATURE_UNIT_DESC(OUT_CHANNEL_NUM, 1) + \
                       AUDIO_SIZEOF_AC_OUTPUT_TERMINAL_DESC)
 
 #ifdef CONFIG_USBDEV_ADVANCE_DESC

+ 25 - 20
docs/source/demo/usbd_winusb.rst

@@ -1,21 +1,42 @@
 usbd_winusb
 ===============
 
-本节主要介绍 winusb 驱动。winusb 是 windows 为了让用户友好的访问 USB 自定义类设备提供的一套通用驱动,其实本质就是 CDC ACM。
-WINUSB 版本根据 USB 版本分为 V1/V2 版本,V2 版本需要包含 BOS 描述符,V1 版本不需要。V2 版本需要在设备描述符中设置为 USB2.1 的版本号。
+本节主要介绍 winusb 驱动。winusb 是 windows 为了让用户友好的访问 USB 自定义类设备提供的一套通用驱动,其实本质就是 CDC ACM,只不过没有设置波特率的命令
+WINUSB 版本根据 USB 版本分为 V1/V2 版本,V2 版本需要包含 BOS 描述符,V1 版本不需要。 **V2 版本需要在设备描述符中设置为 USB2.1 的版本号**
 
-.. note:: 如果使用复合设备,必须使用 V2 版本的 winusb 驱动
+.. note:: 更换 winusb 描述符任意配置可能会枚举成功但是无法识别设备,需要删除 计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\usbflags 下所有注册表项,重新插拔设备后生效
 
 - V1 版本注册描述符
 
 .. 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);
 
 - V2 版本注册描述符
 
 .. 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_msosv2_desc_register(busid, &msosv2_desc);
 
@@ -31,20 +52,4 @@ WINUSB 版本根据 USB 版本分为 V1/V2 版本,V2 版本需要包含 BOS 
     /* Endpoint IN 1 */
     USB_ENDPOINT_DESCRIPTOR_INIT(WINUSB_IN_EP, USB_ENDPOINT_TYPE_BULK, WINUSB_EP_MPS, 0x00),
 
-- 其余操作与 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
-    };
+- 读写操作与 CDC ACM 相同,不再赘述