是否可以将PnpObjectType_DeviceInterface添加到UWP Package.appxmanifest <devicecapability>?

时间:2018-01-14 20:59:34

标签: c# uwp c++-cli

我的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限制范围内不可能。

1 个答案:

答案 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连接,可能不受支持。