USB-устройство UWP (Hid) не подключается

Это моя скрытая библиотека. Он поддерживает UWP и Android. https://bitbucket.org/MelbourneDeveloper/hid.net/src/master/

Это пример использования библиотеки с аппаратным кошельком Trezor: https://github.com/MelbourneDeveloper/Trezor.Net

Я могу подключиться к Trezor без проблем в UWP, но не могу подключиться к KeepKey или Ledger, которые являются другими аппаратными кошельками. Это код, который я использую для подключения к обоим устройствам в моей библиотеке. Он просматривает список устройств, пытается подключиться и возвращает первое, которое подключается OK:

public async Task InitializeAsync()
{
    Logger.Log("Initializing Hid device", null, nameof(UWPHidDevice));

    foreach (var deviceInformation in _WindowsDeviceInformationList)
    {
        var hidDeviceOperation = HidDevice.FromIdAsync(deviceInformation.Id, Windows.Storage.FileAccessMode.ReadWrite);
        var task = hidDeviceOperation.AsTask();
        _HidDevice = await task;
        if (_HidDevice != null)
        {
            break;
        }
    }

    if (_HidDevice == null)
    {
        throw new Exception($"Could not obtain a connection to the device.");
    }

    _HidDevice.InputReportReceived += _HidDevice_InputReportReceived;

    if (_HidDevice == null)
    {
        throw new Exception("Could not connect to the device");
    }

    Connected?.Invoke(this, new EventArgs());
}

Соединение Trezor возвращается нормально, но Ledger просто перебирает существующие драйверы, которые действительны, ничего не возвращая. Я сильно подозреваю, что это проблема с разрешениями. Чтобы подключиться к USB-устройству в UWP, мне может потребоваться указать возможности устройства:

Это раздел для Trezor:

  <Capabilities>
    <Capability Name="internetClient" />
    <uap:Capability Name="removableStorage" />
    <DeviceCapability Name="humaninterfacedevice">
      <Device Id="vidpid:534C 0001">
        <Function Type="usage:0005 *" />
        <Function Type="usage:FF00 0001" />
        <Function Type="usage:ff00 *" />
      </Device>
    </DeviceCapability>
  </Capabilities>

У меня точно такая же вещь для KeepKey, за исключением продавца:

<DeviceCapability Name="humaninterfacedevice">
  <Device Id="vidpid:‭‭2B24‬‬ 0001">
    <Function Type="usage:0005 *" />
    <Function Type="usage:FF00 0001" />
    <Function Type="usage:ff00 *" />
  </Device>
</DeviceCapability>

и Леджер:

  <Capabilities>
    <Capability Name="internetClient" />
    <uap:Capability Name="removableStorage" />   
    <DeviceCapability Name="humaninterfacedevice">
      <Device Id="vidpid:‭2C97‬ 0001">
        <Function Type="usage:0005 *" />
        <Function Type="usage:FF00 0001" />
        <Function Type="usage:ff00 *" />
      </Device>
    </DeviceCapability>
  </Capabilities>

Но Visual Studio жалуется на это с этой ошибкой:

Атрибут ID недействителен - значение 'vidpid: 2B24 0001' недопустимо в соответствии с его типом данных http://schemas.microsoft.com/appx/manifest/types:ST_DeviceId

Но это шестнадцатеричное значение идентификатора поставщика. Я не могу изменить это, потому что это должно соответствовать идентификаторам поставщиков, которые являются 2B24 и 2C97 или 11044 и 11415 как целые числа.

Я нашел эту схему здесь: https://github.com/tpn/winsdk-10/blob/master/Include/10.0.16299.0/winrt/AppxManifestTypes.xsd

Это, кажется, правила:

 <xs:simpleType name="ST_DeviceId">
    <xs:restriction base="ST_NonEmptyString">
      <xs:pattern value="any"/>
      <xs:pattern value="vidpid:[0-9a-fA-F]{4} [0-9a-fA-F]{4}( (usb|bluetooth))?"/>
      <xs:pattern value="model:[^;]{1,512};.{1,512}"/>
    </xs:restriction>
</xs:simpleType>

Я на самом деле сейчас получаю эту полезную ошибку:

Код серьезности Описание Ошибка в состоянии подавления строки файла проекта Ошибка проверки. ошибка C00CE169: ошибка проверки манифеста приложения: манифест приложения должен быть действительным в соответствии со схемой: строка 36, столбец 15, причина: 'vidpid: 2C97 0001' нарушает ограничение шаблона 'any|vidpid:[0-9a-fA-F]{4} [0-9a-fA-F]{4}( (usb|bluetooth))?| Модель:[^;]{1,512};.{1,512}'. Атрибут 'Id' со значением 'vidpid: 2C97 0001' не удалось проанализировать. LedgerWalletUWPSample C:\GitRepos\ledger-dotnet-api\LedgerWalletUWPSample\bin\x86\Debug\AppxManifest.xml

0 ответов

Другие вопросы по тегам