尝试获取UWP应用以识别自定义HID描述符

时间:2019-06-25 08:50:18

标签: uwp hid windows-10-iot-core

我正在尝试获取一个自定义HID设备(当前在树莓派零上运行),以供Windows 10上运行的UWP应用识别。该设备的类型为Vendor Defined,因此不属于设备列表在UWP(https://docs.microsoft.com/en-us/uwp/api/Windows.Devices.HumanInterfaceDevice)上被阻止

我已经写了一个报告描述符,当前正在Windows中的设备管理器中获取它。在设备管理器中的属性>详细信息>硬件ID下,将显示VID和PID。但是,正如我在教程(http://www.idevstream.com/?p=322)中看到的那样,没有HID_Device_UP。

我的描述符如下:

06 AA ff            USAGE_PAGE (Vendor Defined Page 1)
09 01       USAGE (Vendor Usage 1)
A1 01       COLLECTION (Application)
15 00       LOGICAL MINIMUM (0)
26 ff 00        LOGICAL MAXIMUM (255)
75 08       REPORT SIZE (8)
95 40       REPORT COUNT (64)
09 01       USAGE (Vendor Usage 1)
81 00       INPUT (Data,Ary,Abs)
09 01       USAGE (Vendor Usage 1)
91 00       OUTPUT (Data,Ary,Abs)
c0          END COLLECTION

在启动时运行的Raspberry Pi的bash脚本中,我将以下内容设置为VID和PID:

echo 0x45E > idVendor
echo 0x610 > idProduct

这是用于尝试访问HID设备的代码:

private async void EnumerateHidDevices()
{
    ushort vendorId = 0x045E;
    ushort productId = 0x0610;
    ushort usagePage = 0xFFAA;
    ushort usageId = 0x01;

    string selector =
            HidDevice.GetDeviceSelector(usagePage, usageId, vendorId, productId);        

    var devices = await DeviceInformation.FindAllAsync(selector);

    if (devices.Any())
    {
        Debug.WriteLine("HID devices found: " + devices.Count);
    }
    else
    {
        Debug.WriteLine("HID device not found");
    }
}

在Package.appxmanifest中,我包括以下内容:

<DeviceCapability Name="humaninterfacedevice">
    <Device Id="vidpid:045E 0610">
      <Function Type="name:vendorSpecific" />
    </Device>
</DeviceCapability>

<DeviceCapability Name="usb"> 
    <Device Id="vidpid:045E 0610">
        <Function Type="classId:ff * *"/>
        <!--<Function Type="name:vendorSpecific"/>-->
    </Device>
</DeviceCapability>

1 个答案:

答案 0 :(得分:0)

如链接中所述,此处的使用顺序很重要。 Function Type元素指定设备功能。该元素包含一个或多个HID使用值。这些值由使用情况页面和可选的使用情况ID组成,每个都是16位十六进制值。您可以尝试使用Package.appxmanifest中的以下内容。

this.joystickRelease$ = new Subject();

this.joystickRelease$.subscribe(
  nipple => { clearInterval(this.lastInterval); }
);

this.joystickManager.on('end',  (evt, nipple) =>  {
  this.joystickRelease$.next(nipple);
});

<DeviceCapability Name="humaninterfacedevice">
    <Device Id="vidpid:045E 0610">
      <Function Type="usage:FFAA 0001"/>
    </Device>
</DeviceCapability>

更多详细信息,请参阅此文档(How to specify device capabilities for HID)。