Попытка получить приложение UWP для распознавания пользовательского дескриптора HID - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь заставить пользовательское устройство HID (в настоящее время работающее на малиновом пи-ноль) быть распознанным приложением UWP, работающим в Windows 10. Устройство имеет тип Vendor Defined, поэтому не попадает в список устройств заблокирован на UWP (https://docs.microsoft.com/en-us/uwp/api/Windows.Devices.HumanInterfaceDevice)

Я написал дескриптор отчета, и в настоящее время он обрабатывается диспетчером устройств в Windows. В диспетчере устройств в разделе «Свойства»> «Детали»> «Идентификаторы оборудования» отображаются VID и PID. Там нет HID_Device_UP, хотя, как я видел в уроках (http://www.idevstream.com/?p=322).

Мой дескриптор выглядит следующим образом:

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

В скрипте bash на Raspberry Pi, который запускается при загрузке, я устанавливаю следующее в качестве 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 голосов
/ 26 июня 2019

Как указано в ссылке, здесь важен порядок использования. Элемент Function Type определяет функцию устройства. Этот элемент содержит одно или несколько значений использования HID. Эти значения состоят из страницы использования и необязательного идентификатора использования, каждое из которых представляет собой 16-разрядные шестнадцатеричные значения. Вы можете попробовать следующий контент в Package.appxmanifest.

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

или

<DeviceCapability Name="humaninterfacedevice">
    <Device Id="any">
      <Function Type="usage:FFAA *"/>
    </Device>
</DeviceCapability>

Подробнее см. В этом документе ( Как указать возможности устройства для HID ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...