我的Win32应用程序通常通过USB接口与串行设备通信。多年来,为了诊断和开发目的,我使用了创建串行环回接口的Com0Com实用程序。我现在正在编写我的应用程序的UWP(非商店)版本。
调用
时可以看到Com0Com端口// Construct AQS String for all serial devices on system
Platform::String ^serialDevices_aqs = Windows::Devices::SerialCommunication::SerialDevice::GetDeviceSelector();
// Identify all paired devices satisfying query
return Windows::Devices::Enumeration::DeviceInformation::FindAllAsync(serialDevices_aqs);
添加查看从我提取的串行设备列表中获取的com0com端口的device_ID值
[Id] = L"\\\\?\\com0com#port#CNCA1#{86e0d1e0-8089-11d0-9ce4-08003e301f73}"
[Type] = PnpObjectType_DeviceInterface (1)
[1] = {L"System.Devices.DeviceInstanceId" = L"com0com\\port\\CNCA1"}
如果我按
修改Package.appxmanifest文件https://docs.microsoft.com/en-us/uwp/schemas/appxpackage/appxmanifestschema/element-devicecapability
<Capabilities>
<DeviceCapability Name="serialcommunication">
<Device Id="any">
<Function Type="name:serialPort" />
</Device>
<!-- added below -->
<DeviceCapability Name="86e0d1e0-8089-11d0-9ce4-08003e301f73"/>
</DeviceCapability>
</Capabilities>
唉
return Concurrency::create_task(SerialDevice::FromIdAsync(device->Id), childToken)
.then([this](SerialDevice ^serial_device)
对于任何选定的com0com端口,总是将null传递给lambda函数null。
我这样做是错误的,还是在UWP限制范围内不可能。
答案 0 :(得分:0)
我这样做是错误的还是在UWP限制范围内不可能。
不幸的是,FromIdAsync()
方法似乎不支持您的情况。根据{{3}}:
你在这里提到的系统内部或机箱上的串行端口可以由
df$datetime[] <- unlist(sapply(unique(df$datetime), function(x) { freq = sum(x==df$datetime) as.character(seq(as.POSIXct(x), by = 60/freq, length.out = freq)) })) df # datetime from to #1 2018-01-01 08:00:00 1 0 #2 2018-01-01 08:01:00 0 1 #3 2018-01-01 08:02:00 1 0 #4 2018-01-01 08:02:30 0 1 #5 2018-01-01 08:03:00 1 0
枚举,但DeviceInformation.FindAllAsync()
无法打开,因为它们目前不受支持。但是,支持通过USB连接的串行端口,例如USB-to-Serial电缆。
SerialDevice.FromIdAsync()
似乎是虚拟串口驱动程序,它没有通过USB连接,可能不受支持。