Emulating usb devices with python using the USB/IP protocol.

This work is heavily based on this repository. However, there a many differences, mainly because this new version supports any number of devices. It is still missing a proper detach protocol.


The whole USBIP code is in the file. The best way to understand how to implement a device is to look at how the wiimote example is implemented or to see the example of lcgamboa's repository.

Using with Windows

Using USBIP on Windows can be a huge pain. I have done a lot of research before finally getting it to work correctly. Therefore, here are the things you should know :

Wiimote example

This repository contains a fully functional USBIP wiimote example. It uses cwiid to communicate with the wiimotes. Everything is implemented, including using multiple wiimotes and using a nunchuk. All wiimotes are represented as a Generic USB Joystick with USBIP, they are therefore accessible without any specific driver. In order to use it, launch python and follow the instructions.

Wiimote menu

Pressing the HOME button on a wiimote will put it into a "menu" mode. There are four entries that can be selected using the MINUS and PLUS buttons. Activating the selected entry is made by pressing the A button :

  1. If nunchuk is plugged, send its values instead of the values of the accelerometer
  2. Easy "Mario Kart" switch. Remaps some buttons to use the wiimote as a steering wheel
  3. Trigger a new wiimote scan to add new wiimotes (useful in a "headless" system)
  4. Disconnect this wiimote