Here is an example of a listing of Hid devices on Windows:
public static ConnectedDeviceDefinition GetDeviceDefinition(string deviceId, SafeFileHandle safeFileHandle) { try { var hidAttributes = GetHidAttributes(safeFileHandle); var hidCollectionCapabilities = GetHidCapabilities(safeFileHandle); var manufacturer = GetManufacturer(safeFileHandle); var serialNumber = GetSerialNumber(safeFileHandle); var product = GetProduct(safeFileHandle); return new ConnectedDeviceDefinition(deviceId) { WriteBufferSize = hidCollectionCapabilities.OutputReportByteLength, ReadBufferSize = hidCollectionCapabilities.InputReportByteLength, Manufacturer = manufacturer, ProductName = product, ProductId = (ushort)hidAttributes.ProductId, SerialNumber = serialNumber, Usage = hidCollectionCapabilities.Usage, UsagePage = hidCollectionCapabilities.UsagePage, VendorId = (ushort)hidAttributes.VendorId, VersionNumber = (ushort)hidAttributes.VersionNumber, DeviceType = DeviceType.Hid }; } catch (Exception) { return null; } }
The full class is here: https://github.com/MelbourneDeveloper/Device.Net/blob/master/src/Hid.Net/Windows/WindowsHidDeviceFactory.cs
The API call is here: https://github.com/MelbourneDeveloper/Device.Net/blob/master/src/Hid.Net/Windows/HidAPICalls.cs
Here is a similar thing for Windows 10 (UWP):
public async Task<IEnumerable<ConnectedDeviceDefinition>> GetConnectedDeviceDefinitions(FilterDeviceDefinition deviceDefinition) { var aqsFilter = GetAqsFilter(deviceDefinition.VendorId, deviceDefinition.ProductId); var deviceInformationCollection = await wde.DeviceInformation.FindAllAsync(aqsFilter).AsTask(); var deviceDefinitions = deviceInformationCollection.Select(d => GetDeviceInformation(d, DeviceType)); var deviceDefinitionList = new List<ConnectedDeviceDefinition>(); foreach (var deviceDef in deviceDefinitions) { var connectionInformation = await TestConnection(deviceDef.DeviceId); if (connectionInformation.CanConnect) { await Task.Delay(1000); deviceDef.UsagePage = connectionInformation.UsagePage; deviceDefinitionList.Add(deviceDef); } } return deviceDefinitionList; }
Code: https://github.com/MelbourneDeveloper/Device.Net/blob/77439b1ab0f4b3ad97376e4e62c7efac0a749783/src/Device.Net.UWP/UWPDeviceFactoryBase.cs#L47
Android ( https://github.com/MelbourneDeveloper/Device.Net/blob/77439b1ab0f4b3ad97376e4e62c7efac0a749783/src/Usb.Net.Android/AndroidUsbDeviceFactory.cs#L31 ):
public Task<IEnumerable<ConnectedDeviceDefinition>> GetConnectedDeviceDefinitions(FilterDeviceDefinition deviceDefinition) { return Task.Run<IEnumerable<ConnectedDeviceDefinition>>(() => {
Using Hid.Net, you can list devices in the same way on any platform, as shown below. See the full article .
var devices = await DeviceManager.Current.GetConnectedDeviceDefinitions(new FilterDeviceDefinition { VendorId = 0x1209, ProductId = 0x53C1 }); foreach (var device in devices) { Debug.WriteLine(device.DeviceId); }