UsbDevice.FromIdAsync возвращает ноль в приложении UWP - PullRequest
0 голосов
/ 16 мая 2019

В настоящее время я работаю над приложением UWP, которое включает в себя USB-связь с пользовательским USB-устройством. Я смог настроить канал связи между Raspberry Pi 3b и устройством и отправил несколько байтов назад и вперед. Это не работает, если я запускаю это приложение на локальном компьютере (Windows 10 build 1809). В этом случае вызов UsbDevice.FromIdAsync всегда возвращает NULL.

Я видел несколько связанных вопросов здесь , здесь и здесь с аналогичной или даже той же проблемой. Но ни одно из упомянутых решений не работает для меня.

Я установил драйвер Win USB с помощью следующего inf-файла:

;
; Installs WinUsb
;
[Version]
Signature = "$Windows NT$"
Class     = USBDevice
ClassGUID = {88BAE032-5A81-49f0-BC3D-A4FF138216D6}
Provider  = %ManufacturerName%
CatalogFile = WinUSBInstallation.cat
DriverVer = 12/12/2016,13.54.20.543

[Generic.Section.NTamd64]
%USB\MS_COMP_WINUSB.DeviceDesc% = WINUSB,USB\MS_COMP_WINUSB 

; ========== Manufacturer/Models sections ===========

[Manufacturer]
%ManufacturerName% = Standard,NTamd64

[Standard.NTamd64]
%DeviceName% = USB_Install, USB\VID_0483&PID_0001

; ========== Class definition ===========

[ClassInstall32]
AddReg = ClassInstall_AddReg

[ClassInstall_AddReg]
HKR,,,,%ClassName%
HKR,,NoInstallClass,,1
HKR,,SilentInstall,,1 
HKR,,IconPath,%REG_MULTI_SZ%,"%systemroot%\system32\setupapi.dll,-20"
HKR,,LowerLogoVersion,,5.2

; =================== Installation ===================

[USB_Install]
Include = winusb.inf
Needs   = WINUSB.NT

[USB_Install.Services]
Include = winusb.inf
Needs   = WINUSB.NT.Services

[USB_Install.HW]
AddReg = Dev_AddReg

[Dev_AddReg]
HKR,,DeviceInterfaceGUIDs,0x10000,"{9f543223-cede-4fa3-b376-a25ce9a30e74}"

; =================== Strings ===================

[Strings]
ManufacturerName = "Manufacturer"
ClassName = "Universal Serial Bus devices"
DeviceName = "Device"
REG_MULTI_SZ = 0x00010000

Устройство правильно отображается в диспетчере устройств без ошибок. Я добавил возможности устройства в Package.appxmanifest следующим образом:

<Capabilities>
  <DeviceCapability Name="usb">
    <Device Id="vidpid:0483 0001">
      <Function Type="classId:ff 00 00"/>
      <Function Type="name:vendorSpecific"/>
    </Device>
  </DeviceCapability>
</Capabilities>

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

byte deviceClass = 0xff;
byte deviceSubclass = 0x00;

var myDevices = await Windows.Devices.Enumeration.DeviceInformation.FindAllAsync(
    Windows.Devices.Usb.UsbDevice.GetDeviceClassSelector(
        new Windows.Devices.Usb.UsbDeviceClass() {
            ClassCode = deviceClass,
            SubclassCode = deviceSubclass
        }
    )
);

UsbDevice device = null;
var numDevices = myDevices.Count;

foreach (var d in myDevices) {
    device = await UsbDevice.FromIdAsync(d.Id);
    if (device == null) {
        // Device could not be found.
    }
    else {
        // Found device.
    }
}

При вызове FindAllAsync действительно найдено единственное устройство с правильным идентификатором. Но вызов FromIdAsync всегда возвращает NULL. Как упоминалось ранее, все это работает на Raspberry Pi 3b, но не локально на моем настольном компьютере или любой другой машине, которую я опробовал. Я искал несколько дней, и я не знаю, что я все еще пропускаю или пропускаю. Любые предложения, что еще я могу сделать?

С уважением

...