UWP USB DeviceWatcher не работает

Во-первых, я должен указать, что я добавил устройство, с которым мне нужно общаться, в манифест моего приложения, и я могу успешно общаться с устройством. Я могу получить информацию об этом устройстве для устройства с этой строкой:

var trezorDeviceInformation = await UWPHidDevice.GetDeviceByIdSlowAsync(TrezorManager.HidId);

Но по какой-то причине, если я пытаюсь следить за устройством с идентификатором продукта и идентификатором поставщика, Id, события наблюдателя никогда не запускаются. Я попробовал это:

    public UWPHidDevice(uint vendorId, uint productId)
    {
        var deviceWatcher = DeviceInformation.CreateWatcher($"System.DeviceInterface.WinUsb.UsbVendorId:={vendorId} AND System.DeviceInterface.WinUsb.UsbProductId:={productId}");
        deviceWatcher.Added += DeviceWatcher_Added;
        deviceWatcher.Removed += DeviceWatcher_Removed;
        deviceWatcher.Start();
    }

а также

    public UWPHidDevice(uint vendorId, uint productId)
    {
        string aqs = UsbDevice.GetDeviceSelector(vendorId, productId);
        var deviceWatcher = DeviceInformation.CreateWatcher(aqs);
        deviceWatcher.Added += DeviceWatcher_Added;
        deviceWatcher.Removed += DeviceWatcher_Removed;
        deviceWatcher.Start();
    }

Добавленное событие никогда не срабатывает, когда я подключаю устройство или запускаю приложение вместе с устройством. Я должен подчеркнуть, что я могу использовать это устройство в своем приложении, и я трижды проверил VendorId и ProductId. Это просто наблюдатель, который не работает. Я застрял.

У кого-нибудь есть советы или пример приложения?

Изменить: я попробовал официальный пример приложения UWP. Я заменил VendorId и ProductId значениями устройств, которые мне нужно использовать как в коде, так и в манифесте приложения. Образец имеет ту же проблему.

1 ответ

Ваше устройство отображается в диспетчере устройств с помощью драйвера WinUSB? У меня есть код, который работает с моим идентификатором поставщика и pid только при использовании драйвера WinUSB.

Я использую этот код:

// Create a device watcher to look for instances of the Xerox device
watcher = DeviceInformation.CreateWatcher(UsbDevice.GetDeviceSelector(vendorId, productId));

watcher.Added += new TypedEventHandler<DeviceWatcher, DeviceInformation>(this.OnDeviceAdded);
watcher.Removed += new TypedEventHandler<DeviceWatcher, DeviceInformationUpdate>(this.OnDeviceRemoved);
watcher.EnumerationCompleted += new TypedEventHandler<DeviceWatcher, Object>(this.OnDeviceEnumerationComplete);
watcher.Start();
Другие вопросы по тегам