UWP USB DeviceWatcher不起作用

时间:2018-03-12 07:12:16

标签: c# uwp usb trezor

首先,我应该指出,我已将需要与之交谈的设备添加到我的应用清单中,并且我能够成功与设备通话。我可以使用以下行获取设备的此设备信息:

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

但是,出于某种原因,如果我试图观察具有产品ID的设备和供应商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 个答案:

答案 0 :(得分:1)

您是否使用WinUSB驱动程序在设备管理器中显示设备?仅当使用WinUSB驱动程序时,您使用我的供应商ID和pid才能使用的代码。

我使用以下代码:

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