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 supports the Nunchuck, Classic Controller, Classic Controller Pro Extensions. Furthermore it is Working with the Wii U Pro Controller, Wii Balance Board and some Guitar Hero accessories. The button and input mapping dynamically changes when an Extension is plugged in or out. For update notifications follow me on Twitter.

Download

HID Wiimote 0.3.0.3 (gamepad mode)

64 Bit 32 Bit
Windows 7, 8, 8.1, 10 Windows 7, 8, 8.1, 10

Latest Changes

  • Upgrade to Visual Studio 2017 and current Fall Creators Update SDK and WDK (10.0.16299)
  • Add an unhandled exception handler to the Control Center
  • Fix #38: Change unit from Radians to Degree
  • Fix #40: Change guitar whammy bar and touchbar mapping from RX and RY to Z and RZ
  • Fix #41: Home button mapped to wrong output when using Nunchuck

How do i use it?

Install Instructions for HID Wiimote

  1. Make sure you have the Microsoft Visual C++ Redistributable 2017 installed (64 Bit Download, 32Bit Download)
  2. Download the HID Wiimote driver package matching your Windows.
  3. Unpack the files.
  4. Run “ControlCenter.exe”. That will bring up the HID Wiimote Installer.
  5. Optionally enable “Test Mode” (requires reboot)
  6. Install the certificate.
  7. Install the “Device Driver”.
  8. Afterwards close the Installer to bring up the Control Center.
  9. Connect your Wii Remote or Wii U Pro Controller to your PC. Leave the PIN empty. If Windows doesn’t allow an empty PIN see skip PIN request.
  10. If Windows still uses the default driver, see below to change the driver.
  11. Select one device in the Control Center and apply settings.
  12. Start using your Wii Remote like a generic game controller.

Uninstall Instructions

  • Open the HID Wiimote Control Center. Bring up the Installer Window via Tools -> Installer. Uninstall the driver package.
  • Or open Windows “Programs and Features” settings. On Windows 10 open “Apps and Features” and scroll down to Related settings. It seems the “Apps and Features” entry is currently not working. Search for “HID Wiimote 0.X.Y.Z” and uninstall it.

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.
  • You have to manually remove the Wii Remote device from Windows Devices each time it has disconnected.
  • If the HID Wiimote Control Center shows an error or doesn’t start at all, make sure you have the Microsoft Visual C++ Redistributable 2017 installed  (64 Bit Download, 32Bit Download)
  • 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).
  • Incompatible with Toshiba Bluetooth Stack or any other Bluetooth Stack with proprietary API.
  • Driver Signature Verification may be a hard requirement for certain AntiCheat engines.

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).

Permanently deactivate Driver Signature Verification

Start the HID Wiimote Control Center. Open the HID Wiimote Installer via Tools -> Installer. On the installer Window enable Test Mode and reboot your system.

Alternatively you can also manually enable Test Mode. Open a CMD Window with Admin Rights. Then run the following command and restart your System.

Bcdedit.exe -set TESTSIGNING ON

One Time Deactivation

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

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 enforcement” (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.

Skip PIN Request

On Windows 10 Creators Update and above the “Settings – Bluetooth & other devices”  panel does not let one skip the PIN input. In order to pair your Wii Remote nonetheless, scroll down to “Related Settings” and open “Devices and Printers”. Its “Add a device” dialog still accepts an empty PIN entry. The “Devices and Printers” Window can also be opened by right clicking the Bluetooth system tray and select “Join a Personal Area Network”.

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. Therefore it is recommended to install the 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

Expand

0.3.0.3

  • Upgrade to Visual Studio 2017 and current Fall Creators Update SDK and WDK (10.0.16299)
  • Add an unhandled exception handler to the Control Center
  • Fix #38: Change unit from Radians to Degree
  • Fix #40: Change guitar whammy bar and touchbar mapping from RX and RY to Z and RZ
  • Fix #41: Home button mapped to wrong output when using Nunchuck

0.3.0.2

  • Change checking Extension subtype
  • Add Product and Serial string support
  • Add minor delay to update process for UX
  • Change wording from “Switch” to “Swap”

0.3.0.1

  • Fix #24 & Fix #31: Fix Guitar Hero Buttons, Whammy and Touch bar
  • Fix not detecting certain GH Accessories
  • Change default settings for new unknown devices to have accelerometer and trigger axis enabled

0.3.0.0

  • Implement #2: Basic Tool for device specific settings, including an installer replacing TinyInstaller
  • Fix phony button presses when connecting extension

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

617 Replies to “HID Wiimote – A Windows Device Driver for the Nintendo Wii Remote (Bachelor Thesis)”

  1. there are two xbox 360 controller emulators x360ce and rewasd and thy are not working with the wii u pro controller driver, so in many games for windows 10 the controller is not recognized nor disguised as 360 one. would it be possible to disguise it as 360 from your software? regards.

  2. “Errors were encountered while installing the software for your devices”. Status: Install failed. When I try to manually install the HIDWiimote.inf driver through the Device Manager, Windows tells me that this is not an appropriate driver for my Nintendo RVL-CNT-01 device. I’m using the Microsoft BT drivers for my ASUS motherboard. It would be nice if there was an error log.
    Thx (Win10/64/Pro)

      1. yeah it works but it still wont connect it just keeps flashing after its says it successfully updated the drivers until it stops like normal

  3. Hey man what the hell. Controlcenter? Tinyinstaller? Neither of these are in the download- you are telling us to use files you haven’t told us how to get or referred to in any way previous to telling us to run them. Not included in the HID-Wiimote download. Come on! Thousands of people and you’re just wasting their time. wth.

  4. Hi! i’m having this huge problem!
    I installed your driver wanting to play some rocket league using the wiimote but then i wanted to play using the dolphin emulator and i found that my wiimote would not work anymore.
    I found this blog where you replied to someone that had the same problem as me, i followed your instructions but when i pressed the “uninstall” button, nothing happened. I finally uninstalled the driver using your program but i the other driver that i had for my wiimote before had also disappeared. Now i cannot connect my wiimote to dolphin because i have no driver. What should i do?

  5. Hey, great work over here! But im actually having problems when trying to enable test mode. Every time I activate it and restart my PC, the option is still disabled. Any idea as to why? How can I fix this?

  6. Awesome work!
    Was looking for a way to get the classic controller running for way too long before stumbling across this.
    Definitely an A from me; I hope your profs saw it the same way.

  7. I keep getting this message in the device status:
    Windows cannot verify the digital signature for the drivers required for this device. A recent hardware or software change might have installed a file that is signed incorrectly or damaged, or that might be malicious software from an unknown source. (Code 52)
    What do I do?

    1. Read the “Driver Signature Verification” part again.
      I had the same thing, but activating Test mode did the trick for me. Since this is a student project the drivers are not officially signed (or rather the signature is not officially trusted), so Windows doesn’t load them and just uses the (non-functioning) default drivers.

      Hope it helps

  8. Hi Julian, I’m using your IR-mouse Driver to Connect 2 wiimotes as mice and use them as “lightguns” in arcade emulators like mame. Works quite well so far!Thank you for your great work! Is there an option to remap the Wii Buttons in this Driver? For example, i would like to map wiimote Button B as left Mouse Button and Button A as right Mouse Button. Br Christian

  9. I’ve a problem, when i’m going to add the wiimote to the windows, windows says me “driver error” is by the digital signature, i tried to uninstall the driver and reinstall the driver and the windows still give me the same problem

  10. Hello,

    I have a problem changing the driver like you describe above. The device manager window doesn’t let me choose “Wiimote” in the list of drivers, only “Bluetooh device”. Also it says “Treiberfehler” / “Driver issue” in the Bluethooth devices window. So the new driver seems to be installed already? When I install the default driver, it doesn’t say “driver issue”. Anything that can be done from here?

    All the best and thanks,
    Jan

    1. I am also seeing the same issue, “Wiimote” is not in the list of drivers, but only “Bluetooth Device.” No other error shows up though, and the wiimote lights are constantly flashing. How do I fix this? Thanks!

Leave a Reply

Your email address will not be published. Required fields are marked *