UWP中如何从CDC设备获取USB字符串描述符
如何在UWP中读取USB CDC设备的iSerialNumber字符串描述符
我有一个可完全控制代码的USB CDC嵌入式设备,已在USB设备描述符的索引3处设置了用于表示设备序列号(即iSerialNumber)的字符串描述符,设备在设备管理器中显示为串口。
我能通过SerialDevice类成功识别设备:
selector = SerialDevice.GetDeviceSelectorFromUsbVidPid(0x0483, 0xA4DA); var devs = await DeviceInformation.FindAllAsync(selector); foreach(var dev in devs) { var device = await SerialDevice.FromIdAsync(dev.Id); // 记录找到的设备... }
但SerialDevice没有暴露所需的USB描述符。我尝试用UsbDevice类读取描述符:
UsbDevice usbdev = await UsbDevice.FromIdAsync(dev.Id); var config = usbdev.Configuration; foreach(UsbDescriptor desc in config.Descriptors) { var descriptorBuffer = new Windows.Storage.Streams.Buffer(desc.Length); desc.ReadDescriptorBuffer(descriptorBuffer); DataReader reader = DataReader.FromBuffer(descriptorBuffer); reader.ByteOrder = ByteOrder.LittleEndian; var length = reader.ReadByte(); String str = reader.ReadString(length); if(str != null) { Debug.WriteLine("{0}: {1}", desc.DescriptorType, str); } }
但调用UsbDevice.FromIdAsync(dev.Id)时抛出ArgumentException,提示“值不在预期范围内”。如果改用UsbDevice.GetDeviceSelector(0x0483, 0xA4DA)创建AQS字符串,DeviceInformation.FindAllAsync会返回空列表。
虽然我可以通过与设备通信获取序列号,但这在序列号已存在于USB描述符的情况下显得冗余。
我遗漏了什么?这根本无法实现吗?另外,设备管理器中该设备的属性列表未显示iSerialNumber,我了解到是否向上层暴露这些属性由驱动决定。
内容的提问来源于stack exchange,提问作者Brian A. Henning
相关产品推荐
相关产品推荐

