Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

LibUsbDotNet No devices found when calling UsbDevice.AllDevices

I am executing the example code of LibUsbDotNet which will return me the information of all connected usb devices. You can find this code below.

using System;
using LibUsbDotNet;
using LibUsbDotNet.Info;
using LibUsbDotNet.Main;
using System.Collections.ObjectModel;

namespace Examples
{
    internal class ShowInfo
    {
        public static UsbDevice MyUsbDevice;

        public static void Main(string[] args)
        {
            // Dump all devices and descriptor information to console output.
            UsbRegDeviceList allDevices = UsbDevice.AllDevices;
            foreach (UsbRegistry usbRegistry in allDevices)
            {
                if (usbRegistry.Open(out MyUsbDevice))
                {
                    Console.WriteLine(MyUsbDevice.Info.ToString());
                    for (int iConfig = 0; iConfig < MyUsbDevice.Configs.Count; iConfig++)
                    {
                        UsbConfigInfo configInfo = MyUsbDevice.Configs[iConfig];
                        Console.WriteLine(configInfo.ToString());

                        ReadOnlyCollection<UsbInterfaceInfo> interfaceList = configInfo.InterfaceInfoList;
                        for (int iInterface = 0; iInterface < interfaceList.Count; iInterface++)
                        {
                            UsbInterfaceInfo interfaceInfo = interfaceList[iInterface];
                            Console.WriteLine(interfaceInfo.ToString());

                            ReadOnlyCollection<UsbEndpointInfo> endpointList = interfaceInfo.EndpointInfoList;
                            for (int iEndpoint = 0; iEndpoint < endpointList.Count; iEndpoint++)
                            {
                                Console.WriteLine(endpointList[iEndpoint].ToString());
                            }
                        }
                    }
                }
            }


            // Free usb resources.
            // This is necessary for libusb-1.0 and Linux compatibility.
            UsbDevice.Exit();

            // Wait for user input..
            Console.ReadKey();
        }
    }
}

My problem is that the second line executed in the code:

UsbRegDeviceList allDevices = UsbDevice.AllDevices;

does not not return any device at all, while I do have the device I want to find connected, my keyboard and mouse.

Has anyone encountered this problem before? And/or does anyone know how to solve it?

Thanks in Advance! Milan van Dijck

like image 773
Milan Avatar asked Sep 07 '14 21:09

Milan


2 Answers

Does libusb support HID devices?

On Windows, the native Windows HID driver is supported by libusb, but there are some limitations, such as not being able to access HID mice and keyboards, as they are system reserved, as well as getting a direct read of HID report descriptors. Apart from that, you should be communicate with an HID device as you would with any other USB device.

If your application will revolve around HID access, you are encouraged to try to use the ​HIDAPI library by Signal 11 Software, which is also cross-platform. It uses native HID API under Windows and Mac OS X and can use libusb or hidraw as the backend under Linux.

like image 116
Sergey Vyacheslavovich Brunov Avatar answered Oct 20 '22 13:10

Sergey Vyacheslavovich Brunov


The documentation says that

Gets a list of all available USB devices (WinUsb, LibUsb, Linux LibUsb v1.x).

and

Use this property to get a list of USB device that can be accessed by LibUsbDotNet.

If you are using the standard HID driver for your mouse and keyboard and haven't replaced that with the libusb.sys driver, then LibUsbDotNet can't access those devices and therefore doesn't list them.

like image 38
Ben Voigt Avatar answered Oct 20 '22 15:10

Ben Voigt