DeviceInformation.FindAllAsync(SerialDevice.GetDeviceSelector())Portname为空

时间:2018-04-25 20:14:08

标签: vb.net uwp windows-10-iot-core

我正在尝试获取一些连接到Windows IoT RPi设备的USB-to-Serial适配器的端口名称。我仍然可以打开,我得到一个实例化的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

1 个答案:

答案 0 :(得分:0)

您可以在桌面上获得有效的SerialDevice.PortName,但不能在Windows IoT核心版设备上获得。{p>将COM编号分配给串行设备需要系统提供的功能驱动程序,如Serial.sys etc。但是Windows IoT核心版设备上没有提供这些驱动程序。您可以在C:\Windows\System32\drivers路径下查看。

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

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

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