HidDevice.FromIdAsync在带有readwrite的情况下返回null。

3
我正在尝试将一个库从传统桌面平台移植到UWP。除了一个问题外,一切都按计划进行。当我尝试打开与设备(Wiimote)的HID连接时,如果权限是可读可写的,则无法连接。但是只有读取权限是可以使用的。
可能的问题是什么?清单中的权限设置为正确值。
编辑:我检查了DeviceAccessStatus以查看权限是否不正确,但它返回“DeviceAccessStatus.Allowed”。
清单代码
<Capabilities>
 <Capability Name="internetClient" />
  <DeviceCapability Name="humaninterfacedevice">
   <Device Id="any">
    <Function Type="usage:0005 *"/>
    <Function Type="usage:0001 0005"/>
   </Device>
  </DeviceCapability>
</Capabilities>

连接代码

var selector = HidDevice.GetDeviceSelector(1, 5);
var devices = await DeviceInformation.FindAllAsync(selector);
if (devices.Count > 0)
{
    foreach (var device in devices)
    {
        var deviceId = device.Id;
        var foundDevice = await HidDevice.FromIdAsync(deviceId, FileAccessMode.ReadWrite); // Does not work always returns null
        if (foundDevice == null)continue;
        // if the vendor and product IDs match up
        if (foundDevice.VendorId == VID && foundDevice.ProductId == PID)
        {
        // Unrelated code

你确定你的UWP应用程序在设备上具有“读写”权限吗? - Sunteen Wu
1
@SunteenWu-MSFT 如果你是指在HidDevice函数中设置权限的话,那么是的。如果不是,请问我可以在哪里设置这些权限呢? - Starlight_NL
这个问题有什么进展了吗? - MoDu
@SunteenWu-MSFT,你找到问题所在了吗? 我试图连接到一个Hide设备,但每次调用FromIdAsunc时都会得到null。 - True Solutions
1个回答

0

你的代码看起来很不错,除了你获取的选择器可能过于严格。你可能需要查看它输出的文本,并删除任何不必要的内容,比如使用页面或使用ID。

我想打赌你在清单中的设备规范上有问题。看一下这篇文章http://www.idevstream.com/?p=322。它将帮助你识别设备的使用页面和使用ID。一旦你搞清楚了,我敢打赌它就能连接了。这是一个我之前卡住的例子,直到我读了这篇文章才解决了问题: https://github.com/MelbourneDeveloper/Ledger.Net/blob/master/src/Ledger.Net.UWPUnitTest/Package.appxmanifest

此外,看一下 Hid.Net 中连接的代码: https://github.com/MelbourneDeveloper/Hid.Net/blob/80714078fc8772dd04b60648b0fe6974205a3d8f/Hid.Net.UWP/UWPHidDevice.cs#L95

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接