В настоящее время я работаю над приложением 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, но не локально на моем настольном компьютере или любой другой машине, которую я опробовал.
Я искал несколько дней, и я не знаю, что я все еще пропускаю или пропускаю. Любые предложения, что еще я могу сделать?
С уважением