Page 1 of 1

Generic USB communication

Posted: Fri Jul 31, 2015 9:01 am
by gthvidsten
Hi,

On a regular Windows PC we can use a generic USB library to communicate with USB devices without having to resort to 3rd party drivers. An example of such a library is http://libusbdotnet.sourceforge.net/

Does similar options exist for Windows 10 IoT?

Re: Generic USB communication

Posted: Sat Nov 21, 2015 10:40 am
by gthvidsten
Keeping this thread updated with what I find :)

Windows 10 IoT comes with a generic USB driver called WinUSB. You can get your USB device to use this driver by creating and INF file with the following contents:

Code: Select all

; WinUSB installation file for USB device

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

; ========== Manufacturer/Models sections ===========
[Manufacturer]
%ManufacturerName%=Standard,NTarm

[Standard.NTarm]
%DeviceName% =USB_Install, USB\VID_1234&PID_ABCD

; ========== Class definition ===========
[ClassInstall32]
AddReg = ClassInstall_AddReg

[ClassInstall_AddReg]
HKR,,,,%ClassName%
HKR,,NoInstallClass,,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,"{ec55ee47-5758-4378-926b-68ed0aec8170}"

; =================== Strings ===================
[Strings]
ManufacturerName="The name of the company producing your device"
ClassName="Universal Serial Bus devices"
DeviceName="The name of your device"
REG_MULTI_SZ = 0x00010000
Replace the Vendor ID (VID) and Product ID (PID) in [Standard.NTarm] with the corresponding VID and PID of the USB you're adding. Finally replace the ManufacturerName and DeviceName near the bottom with the correct info for your device.

Put this file somewhere on the Raspberry Pi 2, using either SMB or FTP.

SSH or PowerShell to the Raspberry Pi 2 and go to the folder where you put the INF file. Run the following command:

Code: Select all

devcon dp_add .\<name of your INF file>
You should see the following result:
Driver package 'oem0.inf' added.
Finally restart the RP2 from SSH/PowerShell: shutdown -r -t 0

When the RP2 gets back up your device should be listed under "Connected Devices" on the default startup app, and you should now be able to use functionality from Windows.Devices.Usb to communicate with the USB device.

(Though I haven't been able to do that so far due to some other error, but I'll update here when/if I get it to work)