Communicate with USB device in C# using LibUsbDotNet

LibUsbDotNet is a cross-platform library. The source code below has been tested on Mac OS X (version 10.6.8 to be precise) using the Mono .NET run-time. On Linux and Mac LibUsbDotNet requires libusb.

On Mac OS X, you’ll need to obtain and build libusb from source. Ensure you have downloaded and installed the developer SDK for Mac. To build and install it, execute the following commands from a terminal, in the folder that contains the source of libusb.

./configure CC="gcc -m32" --prefix=/usr
sudo make install

The following source code snippet is an example of how to send data to a device. The code itself is a heavily modified version of the Read.Write example that ships with LibUsbDotNet.

Here’s a sample output produced by the code.

IoTimedOut:No more bytes!

The same code should run on Windows and Linux. For more details see the documentation page of LibUSBDotNet. They have a really nice wizard that can create an INF and installer package for Windows.

If Mono raises a System.DllNotFoundException, you might want to take a look at this page.


7 thoughts on “Communicate with USB device in C# using LibUsbDotNet

  1. Thanks! It worked excellent.

    Correct me if I’m wrong, but there are 2 small issues solved here:
    1) By default libusb-1.0 will install to ‘/usr/local/lib’ and mono will not find it
    2) Mono is 32bit so without the ‘-m32’ configure switch, libusb-1.0 will build a 64bit library on 64bit machines and mono cannot use it.

  2. This is really cool. Is it possible to use this to talk to an application running on an Android using this? I’ve written one using sockets to have the PC and Android communicate over WiFi. But, it’s not fast enough to meet my application’s needs.

  3. I am trying to get this to work I have libusbdotnet working on windows and Linux for my LEGO Mindstorms Remote but I am not able to get this working. On Linux I found that I had to install libusb with the following command
    sudo apt-get install libusb-1.0-0-dev
    And that I had to have read and write access to the USB device (as descriped here

    I think the read and write access is my problem since I can open the USB device but fail to write… any idear would be nice…


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s