UAC虚拟音频设备字符串描述符引起的设备启动失败10
2024-04-11
55
0
半拉子工程,又开始搞起。
重新修改代码,在驱动中测试创建一个UVC相机,一个自定义HID设备,一个UAC麦克风,一个UAC扬声器。不过UAC设备都启动失败了。别外UVC相机的名字也不是自己定指的名字。
如对于UAC扬声器设备指定的为:
WCHAR strManufacturer[] = { L"USBZH" };
WCHAR strProduct[] = { L"USB2.0 Speaker" };
WCHAR strSerialNumber[] = { L"20240411" };
UAC麦克风指为:
WCHAR strManufacturer[] = { L"USBZH" };
WCHAR strProduct[] = { L"USB2.0 Microphone" };
WCHAR strSerialNumber[] = { L"20240411" };
UVC相贡指定为:
WCHAR strManufacturer[] = { L"USBZH" };
WCHAR strProduct[] = { L"USB2.0 Camera" };
WCHAR strSerialNumber[] = { L"20240411" };
最终的显示结果为:
而错误号为:
This device cannot start. (Code 10)
An invalid parameter was passed to a service or function.
最终发现,原来是因为对于UAC和UVC设备,它们在获取音频控制接口描棕符中的字符串描述符失败引起的。
但UAC是直接是启动失败,而UVC是给一个默认的名称:USB video Device
以前遇到过UAC如果名字不对,也会显示USB Audio Device
我们加上其它的字符口串描述符之后,就好了;
vUsb->dsc_string[4] = GetStringDescriptor(Pdi->PdiHeader.DeviceInfo.strProduct);
vUsb->dsc_string[5] = GetStringDescriptor(Pdi->PdiHeader.DeviceInfo.strProduct);
vUsb->dsc_string[6] = GetStringDescriptor(Pdi->PdiHeader.DeviceInfo.strProduct);
设备管理器中:
在Usb Device Tree Viewer显示如下: