首页 > 解决方案 > DeviceInformation.FindAllAsync(SerialDevice.GetDeviceSelector()) 端口名称为空

问题描述

我正在尝试获取一些连接到 Windows IoT RPi 单元的工作 USB 转串行适配器的端口名。我仍然能够打开,并且我得到了一个可以工作的实例化 serialDevice。我能够在端口上发送和接收数据,但 PortName 对象显示“”,所以我不知道它是 COM1 还是 COM2 等。这不是问题,除非我正在连接多个适配器并且需要一种方法来识别适配器唯一。还有人看到这个吗?

我用来查询和打开端口的代码是:

 Dim dis = Await DeviceInformation.FindAllAsync(SerialDevice.GetDeviceSelector())
 Dim Count As Integer = 0
    Do Until Count = dis.Count
        Debug.WriteLine("UART Port: " & dis(Count).Name & ", " & dis(Count).Id)
        If dis(Count).Id.Contains("FTDI") Or dis(Count).Id.Contains("FT232") Then
            serialPort = Await SerialDevice.FromIdAsync(dis(Count).Id)
        End If
        Count += 1
    Loop

标签: vb.netuwpwindows-10-iot-core

解决方案


您可以在桌面上获得有效SerialDevice.PortName,但不能在 Windows IoT Core 设备上获得。为串行设备分配 COM 号需要系统提供的功能驱动程序,如Serial.sys 等。但这些驱动程序未在 Windows IoT Core 设备上提供。C:\Windows\System32\drivers您可以在路径下检查它。

要识别多个设备,有一种解决方法,即使用VID(供应商 ID)和PID(产品 ID)。它们被认为是独一无二的。

因此,SerialDevice.GetDeviceSelector()您可以使用SerialDevice.GetDeviceSelectorFromUsbVidPid(vid, pid). 您可以在 中找到 VID 和 PID DeviceInformation.Id。它会像这样:

\\?\USB#VID_10C4&PID_EA60#0001#{86e0d1e0-8089-11d0-9ce4-08003e301f73}


推荐阅读