HID Wiimote – A Windows Device Driver for the Nintendo Wii Remote (Bachelor Thesis)

This driver, called HID Wiimote, was developed and elementary implemented as my bachelor thesis in a 6-month period.

What is it?

When you normally connect your Wii Remote to a PC using Bluetooth, you can’t use it properly out of the box. The problem is that Windows don’t know how to handle it properly and does not expose any input buttons or axis. My Bachelor theses was to attempt a solution to that kind of problem. There are many programs which are mapping the Wii Remote buttons to keyboard keys, so for Windows it looks like a key is pressed. This solution is not applicable when it comes to local multiplayer games like FIFA. My driver fixes this issue, since every Wii Remote is recognized as a native game controller, as they should be.

Properties dialog without driver
Properties dialog without driver
Properties dialog with driver
Properties dialog with driver

 

 

 

 

 

 

 

 

The driver does support the Nunchuck, Classic Controller and Classic Controller Pro Extension. Furthermore it is Working with the Wii U Pro Controller. The Button and Input Mapping dynamically changes when an Extension is plugged in or out. Sometimes the Extension is not correctly detected, so you need to remove it and plug it in again until the mapping switches. For update notifications follow me on Twitter.

Download

Gamepad 0.2.7.4

64 Bit 32 Bit
Windows 7, 8, 8.1, 10 Windows 7, 8, 8.1, 10
Windows 10 Universal (Coming Soon) Windows 10 Universal (Coming Soon)

For GTA V please use this Version of the driver.
(Due to the trigger axis split, the latest version is not working for GTA V)

IR-Mouse 0.2.6.2

64 Bit 32 Bit
Windows 7, 8, 8.1, 10 Windows 7, 8, 8.1, 10
Windows 10 Universal (Coming Soon) Windows 10 Universal (Coming Soon)

How do i use it?

Install Instructions for HID Wiimote

  1. Download the HID Wiimote driver package matching your Windows.
  2. If you have a 64 Bit Windows Version, see below to disable the Driver Signature Verification. The Driver Signature Verification needs to be turned off when installing the driver and every time,  when a Wii Remote or Wii U Pro Controller will be connected.
  3. Unpack the files.
  4. Run “TinyInstaller.exe” once (You need admin rights). It installs the driver and adds an entry in “Programs and Features” to remove the driver easily.
  5. Connect your Wii Remote or Wii U Pro Controller to your PC. If you have a newer Wii Remote (RVL-CNT-01-TR), with its Sync Button on the battery cover, make sure you connect it using the Sync Button.
  6. If Windows still uses the default driver, see below to change the driver.
  7. Start using your Wii Remote like a generic game controller.

If the Extension is not working try replugging it until the Input Mapping switches.

I am testing the driver with two different official Wii Remotes currently. One of the old ones without Plus inside, and one of the newest with Plus inside and the Sync Button on the battery cover. Once i also tested a counterfeit Wii Remote, but i can’t guarantee that the driver is working properly with them. Anyway if you have any problems with the driver, please let me know. I’ll get in touch with you and take a look.

Known Issues

  • When powering off the Wii Remote or moving out of the Bluetooth range, Windows won’t recognize the Wii Remote is gone.
  • When shutting down Windows, the Wii Remote Device won’t be ejected and is still present on next start up.
  • When using other Bluetooth devices, they may stop working, until the Wii Remote is disconnected.
  • Other Programs that need to communicate directly with the Wii Remote may not work (e.g. Dolphin Emulator).
  • Trigger axis split, renders the last two versions of the driver unusable for GTA V.
  • Incompatible with Toshiba Bluetooth Stack or any other Bluetooth Stack with proprietary API.

Driver Signature Verification

Unfortunately i do not own a Code Signing Certificate yet. So on 64 Bit Systems you have to disable the Driver Signature Verification. Otherwise Windows won’t load the driver. The Driver Signature Verification can either be deactivated permanently or for a single restart (after an additional restart it is active again).

One Time Deactivation

To disable the Driver Signature Verification some steps are necessary. Those are different on Windows 7 and Windows 8.1.

Save all of your work, because you have to reboot you computer!

Windows 7:

  1. Restart you computer
  2. After the BIOS, before Windows initialize its booting, press F8 to enter the “Advanced Boot Options” for Windows (like when you try to enter the “safe mode”)
  3. Choose “Disable Driver Signature Enforcement”

Windos 8.1 & Windows 10:

  1. Open the Charms Bar
  2. Chosse “Settings” and then “Change PC settings”
  3. Switch to “Update and recovery” and open the “Recovery” tab
  4. Click on “Restart Now” under “Advanced Startup”
  5. After restart click “Troubleshoot”
  6. Pick “Advanded options”
  7. Choose “Startup Settings”
  8. Click on “Restart”
  9. Press the number for “Disable driver signature enforement” (Number 7)

Now Windows starts in a Testing Mode and might display a small watermark in the bottom right corner.

After an additional restart Windows changes back to its normal mode, so you have to disable the Driver Signature Verification each time you want to use the driver.

Permanently deactivate Driver Signature Verification

To disable the Driver Signature Verification permanently open a CMD Window with Admin Rights. Then run the following command and restart the computer.

Bcdedit.exe -set TESTSIGNING ON

Switch driver

Because Windows internally ranks all possible drivers for a device mainly by their signing, the default driver might be still used for the Wii Remote. This driver ranking will be performed each time the device is added. So you have to change it every time you connect the Wii Remote. If you installed the driver with “TinyInstaller.exe” this shouldn’t be necessary, since it installs a self created certificate to push its ranking.

  1. Connect the Wii Remote to the Computer and constantly tap a button, so the Wii Remote won’t turn off.
  2. Open the Device Manager and locate the “Bluetooth-HID-Device” representing the Wii Remote.
  3. Right click on it and choose “Update Driver Software…”.
  4. Pick “Browse my computer for driver software”
  5. Then “Let me pick from a list on my computer”
  6. Now choose “Wiimote Device” from the list and click “Next”
  7. When the LEDs of the Wii Remote switch from flashing to constantly on, the driver is installed properly.

Changelog

0.2.7.4

  • Fix Balance Board not beeing detected correctly and reporting any input

0.2.7.3

  • Fix #15: Yellow Guitar Hero Button not working

0.2.7.2

  • Change Balance Board Axes

0.2.7.1

  • Fix Balance Board Axes

0.2.7.0

  • Fix RawInput not reading the primary axes correctly
  • Add experimental untested Balance Board support
  • Add experimental untested Guitar Hero Guitar support

0.2.6.2

  • Fix non English languages for the Driver Package Installer.

0.2.6.1

  • Installer has been reverted to Multilingual, since there have been issues with non English Windows Systems.

0.2.6

  • Fix #11: Improved Extension Controller detection
  • Package now includes EULA and Readme file
  • Replaced Multilingual Driver Package Installer with only-English one
  • Introduced proper versioning, starting with 0.2.6
  • Build with WDK 10.0.10586.15, to hopefully fix connectivity issues with Windows 10 Version 1511 (November Update)

08.09.2015

  • Windows 10 Desktop Build

13.07.2015

  • Fixed LED Battery Level display for Wii U Pro Controller
  • Each Classic Controller (Pro) & Wii U Pro Controller Trigger has its own input axis

16.06.2015

  • Hotfix for IR-Mouse to enable “-TR” Wii Remotes

01.06.2015

  • Input State is reset, when the connection is lost
  • New IR-Mouse Version
    • Lets you control your Mouse Pointer by pointing at your screen
    • IR-Source like Sensor Bar is needed

20.04.2015

    • Nunchuck, Classic Controller (Pro) and Wii U Pro Controller are now supported
    • Added more Axis, Buttons and a Hat Switch
    • Unfortunately no more Vista Builds
    • Windows 8.1 Build

12.10.2014

    • Added another installer, so Windows will use HID Wiimote as default driver for the Wii Remote
    • PDad-Mouse Build (See this Blog)
    • There will be Vista builds from now on as well.

01.07.2014

  • Added support of the newer Wii Remotes (RVL-CNT-01-TR)
  • Added second X/Y axes representing tilt (Currently only tracked by the accelerometer) 

26.06.2014

  • D-Pad is now represented as X/Y-axis.
  • LEDs now represent the battery level.
  • Added an Installer.

20.06.2014

  • Fixed the binaries (there was some test code left when building, last time, so the old binaries aren’t working)

Download List

Source Code

The Source code is available on Github:
https://github.com/jloehr/HID-Wiimote

Feel free to add Bug Reports or even contribute through Pull Request!

How does it work?

This Part is for those of you, who does not only want to use HID Wiimote, but want to take a peak inside a driver and how i fixed the problem.

Detailed Problem

The communication of the Wii Remote with its host is based on HID. HID is a protocol for input devices without a fixed setup. The protocol is self describing, which means every device is telling the host what kinds of input and outputs it got. E.g. one game controller can have only four buttons, whereas another can have two analog sticks without any buttons, both are using HID and are handled by the same driver.

As said the Wii Remote communication is just based on it, but not strictly followed. So the protocol standard is violated at some points, for example the Wii Remote does not describes itself properly. That’s the reason why Windows knows its a game controller but does not know what kinds of input and output the Wii Remote has.

Solution

So the solution is to put a driver somewhere between the Wii Remote and the HID Class Driver to fix the communication. This driver presents a HID conform game controller to the upper HID Class Driver. Fortunately the HID Class Driver is paired with a minidriver. Those minidrivers handle the transport specific communication with the device. E.g. if the device is connected via USB the HIDUSB driver is loaded to handle the USB specific communication, or if it’s Bluetooth HIDBTH is loaded, to do all the Bluetooth stuff.

The HID Wiimote replaces the minidriver for the Wii Remote and adds the additional functionality to have a fully supported game controller. It consists of three layers.

Diagram of the Driver
Diagram of the Driver

The lower Bluetooth layer handles all the Bluetooth specific stuff, like the direct communication. The middle layer Wiimote saves the Wii Remotes state and handles its specific needs in form of what kind of responses and request and how those have to be handled. The upper Layer HID is handling all request from the HID Class Driver and is translating the current state to a HID conform format.

Further reading

270 thoughts on “HID Wiimote – A Windows Device Driver for the Nintendo Wii Remote (Bachelor Thesis)”

  1. You have done a glorious thing here, good sir! Seriously, this is impressive and sought-after work, so thank you. I dabble in game development, and this opens up a very exciting range of possibilities. I fully intend to take a look at your source when I get a chance; I don’t have much experience with drivers, but I would love to contribute if I can, particularly towards implementing XInput support. Would it ultimately be possible to include input data from the nunchuk’s accelerometer as well?

    1. Hi. Adding to the nunchuk discussion: I found out that the button identifier for many buttons change when the nunchuk is connected. Would it be possible to add the nunchuks buttons at the end of the list?
      And speaking of more features 🙂 …. would it be possible to add the vibration feature of the controller? (maybe You should consider creating a business case here)

  2. Hello, really nice work! Unfortunately the driver will not install anymore with the Win10 anniversary Update 🙁
    It seems that some of the IDs have changed since the driver is not recognized as such.
    We hope there is a simple fix for that.

    1. To specify the problem a bit more: one machine with the driver already installed still works with the Anniversary Update and a WiiMote. On another machine the driver will not install with Windows complaining “The folder you specified doesn’t contain a compatible software driver ….”. Any idea on how to solve this?
      Best regards!

      1. So you have one computer where the driver was installed and then did the Anniversary Update. That one is still working. Whereas on another also with the Anniversary Update the driver was not installed yet and that gives you the error message?
        I am currently setting up a new VM with the Anniversary Update and’ll check that out.

        1. It seems that the Driver Signature Verification was deactivated or broken or something. We had to deactivate that again and all of a sudden your driver worked again. A bit strange since we tried that several times. Any how: now it works again also with the anniversary update.

          1. Ah ok, nice. The major Windows Updates (November Update, Anniversary Update) are basically installing a complete new Windows on your system. So every non trivial changes made, like driver signature verification, needs to be made again.

  3. Hello. I just stumbled upon your project and I have to say excellent job on making it much easier to use the Wiimotes and Controllers in a much easier method compared to the other alternatives. With that, I do have a bit of a problem with my setup.

    So I’ve followed the directions given: Installed the drivers, snyc my Wii U Pro controller and presto the drivers are working properly. However, anytime when I try to run a game or to experiment with a few of my game projects, none of them either recognize the controller or I have to do a workaround via x360ce or a joystick emulator. I was wondering if I did something wrong within the process or I just need to do a fresh start once more.

    1. Hi, my driver is currently only serving the older DirectInput API. Modern Games are using the XInput API (used for XBox Controllers). Some games still also have support for DirectInput, but those are rare.
      Anyway XInput support is on the list of future features, but that’ll take some time.

  4. Why not just get Microsoft to give you a proper signature. I’m sure if you did it for a college thesis as you said, you shouldn’t have too much trouble getting Microsoft to sign it for you. I mean just find a Microsoft employee, tell him your situation and then ask him to create a cert for your driver. I DO NOT want to compromize my security by having to boot into a less secure mode EVERY TIME I use this driver. If I got a virus on my PC, it could take advantage of this less secure mode, and install a malicious driver on my PC and cause major damage. And your driver uses a self-signed certificate, it obviously will require using this less safe mode of WIndows operation, EVERY time I want to use the Wiimote on my PC.

  5. Hello there,
    I haven’t touched games for a few weeks and yesterday, I put myself back to it (my family was watching the Olympics on my HTPC), I noticed that I need to force your driver on the Bluetooth HID device. I did rerun the tinyinstaller but it remains the same. There was no change in configuration except maybe for the Windows Anniversary update. I recon that I did not use the wiimote since it was updated and yesterday was the first time.
    So now, I do the usual, push on the sync button, wait for it to appear, request to pair, and click next when it asks for a passcode, then while it’s pairing, go to the system device manager and switch the driver.
    After that it works, but I am curious if anyone has the same issue as I have, how can I be sure the tinyinstaller is correctly pushing the driver ranking?
    Thanks

    1. Hi,
      i have not yet upgraded to the Anniversary update, so i have not encountered such problem.
      When pairing the Wiimote (without changing the driver) you can check the Events Tab of the Device Properties for details about the driver ranks.
      It may be the case that they either change the ranking system or the default driver now is simply a newer one and therefore gets a higher rank.

  6. I use dolphin emulator to play my Wii games on pc but it doesnt detect the wiimote when these drives are installed, I have to map everything and there are features that this driver is missing such as shaking, what can I do so i dont have to uninstall this driver to play Dolphin and install it again to play pc games with my wiimote? Is it possible to have 2 bluetooth recievers on my pc so that one is for Dolphin and the other one for pc games?

    1. Yeah, in its current state it blocks access to the Wiimotes for third-party applications. The next updates will include modes to grant third-party applications access.
      Until then there is currently no workaround 🙁

  7. Hello. I have been working on getting this installed. I have everything done, but for some reason in the Apps & Features it says that the driver is “Unavailable.” Do you possibly know what’s causing this, and how to fix it….?

    1. That “Unavailable” is referring to the App/Package size, that is simply not set by the installer. The driver should work anyways.

      1. Thank you.

        The reason I thought that might be a problem is because the driver is not sowing up when I try to update the driver software….

        1. On Windows 8 and above the driver should be used automatically as default driver. The correct device node is under “Human Interface Device”. Either as “Wiimote Device” or “HID-compliant game controller”, the former one means the driver was successfully picked as driver. There is also a “Nintendo RVL-CNT-01[-TR/-WB-/UC]” node under Bluetooth but that is not the correct one.

  8. Hi,
    I’m trying to connect my Wii Remote (with MotionPlus), but it keeps on telling me that I need a passcode in order to pair. Any ideas on what’s happening?

    1. Hi, just leave the text field empty and press next. It simply works without any PIN. Sometime the next button is inactive, in that case simply press cancel and retry the pairing.

  9. Hello, I have a problem, and I´m not good at english, but maybe you can understand this, I´m using BlueSoleil on a windows 10 pc, but It stills having the problem with the code 10, and I don´t know why, I already tried all the ways that I know.

    1. Hi, my driver only supports the Microsoft Bluetooth Stack.
      I haven’t tested the BlueSoleil stack, but i would guess it is providing its own API (as the Tohsiba Stack does as well). Therefore drivers written for the Microsoft Stack won’t work.
      As long as you don’t need the BlueSoleil stack for other devices you should change back to the Microsoft one.

  10. This is an awesome piece of software! I was trying to figure out how to use an older Wii Guitar Hero World Tour drum set on the PC and this is by far the easiest solution. It’s pretty challenging to track down all of the other software that I would need to make this work however with your driver I no longer need any of that stuff.

    The only issue that I’m having is that Windows 10 will not recognize the bass pedal input. I’m using a USB Bluetooth adapter and the LED light on it flashes, indicating an input, when the bass pedal is hit but Windows doesn’t register a button press. Any help would be greatly appreciated.

    1. Hi, thanks for your feedback.
      The drums set is not fully supported yet (it seems the Guitar implementation covers the Drum Set in some parts but not all). So there is work required on my side to implement the missing features. I’ll put that on my list.

Leave a Reply