我有一个Xamarin UWP应用,该应用需要在COM端口上侦听设备。这样做的最终目的是让客户使用Microsoft Surface和GPS设备,并让他们的同事四处走走并获取GPS读数。
我正在尝试枚举可用端口,以便用户可以选择其gps设备正在广播的端口。我使用的代码如下:
string serialDeviceType = RfcommDeviceService.GetDeviceSelector(RfcommServiceId.SerialPort);
DeviceInformationCollection devices = await DeviceInformation.FindAllAsync(serialDeviceType);
在第一时间,我正在与“设备”集合一起使用的是“ Com1”,“ Com2”,“ Com3”和“ Serial Port”四个成员,最终使所有工作正常进行。但是,我有另一台设备,在该设备上,我仅使用相同的代码在“设备”集合中获得“串行端口”。
在两种情况下,我正在听的设备都不同。第一次我听的是Trimble R1,第二次听的是XGPS160,但我不希望这会影响此调用返回的DeviceInformation数量,这似乎更像是两个Surface之间的区别。 >
有人知道为什么一个Surface从FindAllAsync调用返回Com1-Com3,而另一个却没有吗?也就是说,如果我想故意创建此结果,我将如何去做呢?
-谢谢, 沃尔特
答案 0 :(得分:0)
默认情况下,串行功能驱动程序为串行端口创建符号链接名称,并为该端口注册GUID_DEVINTERFACE_COMPORT设备接口。根据定义,只有与串行端口关联的串行端口才是串行端口。
对于即插即用串行设备,外部命名由设备硬件密钥下的 SerialSkipExternalNaming 条目值控制。如果 SerialSkipExternalNaming 条目值不存在,或者其值为零,则Serial将创建一个COM端口设备接口;否则,它将创建一个COM端口设备接口。否则,串行不会创建COM端口接口。串行不支持旧版COM端口的此条目值,并且始终为旧版COM端口创建COM端口设备接口。
然后,不同的计算机的“串行端口”名称可能不同。这里是the document。