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();