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

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

  1. Following instructions…disabling driver sig verification asks me to restart. On restart driver shows yellow exclamation Device cannot start (10). If I uninstall it reinstalls default Bluetooth HID Driver which doesn’t show any errors.

    1. Try disabling Driver Signature Verification and then install my driver through “TinyInstaller.exe” while the Driver Signature Verification is disabled.
      If that is not helping, what Windows and Bluetooth Dongle do you use? The Error 10 is unfortunately a very generic “there is a problem” error, but doesn’t give any hint about whats wrong :/

      1. I’ve narrowed it down to something having to do with Bluesoleil. After disabling it and using MS Windows native BT stack it installs fin and works properly. Troubleshooting it is a pain however because of the Driver signing verification and restarts.

          1. So with even more experimenting, upgrading to a newer version of BlueSoleil. Results found so far, the driver installs seemingly normally, but then after about half a minute ?Windows re-enables Driver Sig Verification?

            Upon restart, the original driver is active. Same loop.

            Disappointing, since I actually use BlueSoleil features, that’s why I have it installed.

            Tried connecting an additional BT adapter, perhaps I could have Windows stack manage one and BSol do the other. but that doesn’t work. BSol doesn’t work at all and Windows BT function is sporadic.

            If anyone has a different solution, would love to hear it.

            Thanks

          2. If the Diver Signature Verification is the problem, you might try to disable it permanently.

            Start a CMD with Admin Rights, type in “Bcdedit.exe -set TESTSIGNING ON” and restart. Now Windows is running in a Testmode with permanently disabled Driver Signing Verification.
            You can revert that by simply executing “Bcdedit.exe -set TESTSIGNING OFF” again in a Admin CMD.

    1. XP is not supported. Reason is simply put, it would require some special handling and additional work and i think no one is using XP anymore, so in my opinion it’s not worth the work.
      You can try the Windows 7 Build. The WDK Drivers might be compatible with XP but it is not guaranteed.

      1. Sadly the windows 7 version didn’t work, it says tiny installer is not a win32 program. Is there at all anyway around this. The only other option for me is glovepie and it’s not the easiest thing to use

    1. I’ve already answered on Youtube, but so others might see my answer as well:

      Windows does not remove the Wii Remote itself when disconnecting it. So check the device list/connected Bluetooth devices and remove it manually. After that it should show up again in the search for Bluetooth devices.

  2. Dear Julian,

    I just wanted to drop a line and thank you for this awesome piece of work. I think your drivers need a lot more attention, because it is working really, really well. There are so many other guides on the web that rely on the Toshiba Bluetooth Stack, which is really subpar however. I managed to get it working, but it took quite some time but eventually it even permanently messed up by BT drivers.

    Anyway, just to let you and others know: the gamepad driver also works perfectly fine with Windows 10 (tested with preview builds 106xx and RTM).

    Concerning the driver signatures there is also the possibilty to permanently disable the Driver Signature Enforcement in Windows. Just open the command line as administrator and enter

    bcdedit -set TESTSIGNING ON

    Note, that if your mainboard comes with UEFI make sure to disable secure boot. Otherwise the command won’t work. This works for both Win 8.1 and Win 10.

    All the best

    Christoph

    1. Hey Chris (another Chris :D)

      thanks for your feedback. Feel free to spread the word, or at least a link to this project site 🙂
      For the Toshiba Bluetooth Stack (or other recommend the Bluesoil)…for me the default MS Stack works perfectly, so i recommend to test it first with the MS Stack. Only if it doesn’t work at all, one should fall back to 3rd party stacks.

      I am not surprised it is already working on Windows 10. Thats the beauty of the Windows Driver Framework; same code for all systems from Vista and up. Although there are different binaries they’re all almost or even may be completely the same. Anyway official Windows 10 will be uploaded in the near future, when Windows 10 is officially released with its Driver Development Kit and i can catch some spare time.

  3. I’m not sure if this is a bug or if I’m doing something wrong, but I installed your driver (Windows 7 64bit) and it picked up the Wii Remote, but it doesn’t register any extensions, and the axis and button mapping seems off.

    The Wii Remote shows LED 2,3, and 4 lit, but LED 1 is off.

    Wii Remote’s Game Controller properties shows the following:
    X Axis/Y Axis (responds to D-Pad presses)
    Z Axis (Always shows 0, doesn’t respond to movement on the Wii Remote)
    X Rotation (Shows 50% when Wii Remote is level, 100% when Remote is sitting upright on the expansion port, 0% when sitting on the IR lens)
    Y Rotation (Shows 50% when Wii Remote is level, 100% when Remote is sitting on its right side, 0% on the left side)
    Z Rotation (Always shows 0%, same as Z Axis)
    Button 1 > Wii Remote Button 1
    Button 2 > Wii Remote Button 2
    Button 3 > Wii Remote Button A
    Button 4 > Wii Remote Button B
    Button 5 > Wii Remote Button +
    Button 6 > Wii Remote Button –
    Button 7 > Wii Remote Button Home
    Button 8, 9, 10, 11, 12, 13 > No response
    PoV Hat > No response

    The properties box does not change or respond differently if a Classic Controller or Nunchuk are connected.

    1. Hey Chris,

      currently there is no visual feedback, when an extension is plugged in/registered, instead the button mapping changes internal. This is due to the fact, that you can’t add new buttons or remove some after the device is connected and loaded. So there are as much as needed, when a Classic Controller/Wii U Pro Controller is connected. But not all inputs are used for the Wii Remote and the Nunchuk.

      The LEDs show the remaining battery power. When no extension is plugged in, it is meant to hold the Wii Remote horizontally.
      If the input of an extension is not reported at all, try removing and plugging it in again several times until it works. I had a similar problem with one of my Wii Remotes, but thought it may be a loose contact.

  4. i havent bothered to check all the other comments because there are so many of them, so sorry for wasting your time, but-
    when I connect the wiimote, in the “devices and printers” page it shows the wiimote greyed out like a device that is registered but not connected.
    i am running windows 7 64 bit I already disabled the driver signature thing, this happens with both the old wiimote and the wiimote -TR
    do you know how i might fix this?
    cheers

    1. Does it grey it out every time, even when you remove the device manually and then try to pair the Wii Remote?
      Could you check the Device Manager, if the Wii Remote Device (Found under HID/Human Input Devices) throws any error.

    1. The Driver Installer creates an entry in “Programs and Feature” (where all installed programs are listed and you can remove them).It’s named “Windows Driver Package – Julian Löhr (HIDWiimote) …” or something similiar translated to your OS language. Uninstall it and the driver is removed from your system.

  5. Hello Julian!
    First of all, i’d like to thank you for the great work you did here, i was trying to find something to just make my fake Classic Controller work in emulators like Nestopia, and the only one thing on the entire web succeded to do that is your HID driver.

    And here comes my problem/question.
    I do have an official “TR” remote and using Microsoft BT Stack. To connect it to the PC i follow the next steps.
    1. Press 1+2 at once (temporary sync, since i don’t want to unsync mote from my Wii)
    2. Init the device search on PC while LEDs are blinking, PC finds the remote.
    3. Wait until LEDs stop blinking, then i do press A (could be any button) and proceed with connecting on PC.
    4. Ask it to pair without a code. Voila, WiiMote connected.

    After i forced your driver for the first time (using TinyInstaller) it installs the driver automatically everytime i install the remote. So all works fine until i disconnect/power off the wiimote. Since it’s present in Windows (Windows 7 Pro x64) “add the device” wizard don’t show the remote in “found devices” list. So to reconnect the Wiimote i should first remove it completely from the OS and then reinstall it. It’s not hard, but takes long enough.
    So i wonder, is there any easier way to reconnect Wiimote without completely reinstalling it?
    If not – not a big deal, but it’ll be much better if there is 🙂

    1. Hey,
      thanks 😀 Yeah, that is a known bug. Windows does not remove the Wiimote from the connected device list when it’s powered off. And i have not found a solution for that yet.
      But you can remove the Wii Remote manually through the Bluetooth Network Devices Dialog (the window that lists you the connected Bluetooth devices). Then reinitialize the device search and it should show up.

      I just tested it and was first of all astonished that the “TR” Wii Remote connects via “1+2” sync on the first pairing attempt. The WiiBrew wiki states that the “TR” Wii Remote changed their “1+2” pairing procedure, so my advice has been to use the sync button. But after disconnecting and removing it from the device list it seems to just turn off when trying to pair it again. That’s odd that it works on the first pair/connect but not a second time. I am going to look into it. Maybe you come up with a paring procedure to get it working the second time as well.

      1. Strange, second pairing after device deletion worked great for me yesterday. Now i’m at work, so can’t actually check it out once again.
        Since i have nothing to do at work i’ve been googling on issue and found this link: http://bluetoothinstaller.com/bluetooth-command-line-tools/bluetooth-sample-scripts.html
        That’s a .bat script that uses some kind of bluetooth command line tools, and that script does what we want to achieve (almost, needs some tweaks to work with TR motes cause of weirdness of sync routine). Of course it’s a workaround (even if it works, will test it 3 hours later when i come home) but still better than manually removing-resyncing it.

      2. An update!
        So i’ve found out that after PC reboot Wiimote gets automatically connected if it was paired (even 1+2) with PC. So i went ahead, disabled “microsoft bluetooth enumerator” device via device manager and after enabling it AND pressing “A” on Wiimote at the same time i got my Wiimote connected to PC again!
        So all we have to do is automatically disable and reenable bt enumerator and we’re good to go!
        So here’s the steps:
        1. Get a DevCon (Microsoft device management command-line util ) for your os, x64 or x86 (not IA64 though, it’s for Itanium). It’s included in WDK (Windows Driver Kit), so you’ll have to download it from there (or if Julian post the utils somewhere, i don’t know if it’s not against EULA though, so not posting them yet)
        2. Find out what’s the Hardware ID of your Microsoft Bluetooth Enumerator (from classic Device Manager, mine was BTH\MS_BTHBRB)
        3. Make a bat that contains the following text:

        cd \wiimote
        devcon disable BTH\MS_BTHBRB
        cls
        echo Press any button on Wiimote
        echo and
        echo on your keyboard
        pause
        devcon enable BTH\MS_BTHBRB
        (you should replace BTH\MS_BTHBRB with anything you got from previous step)
        4. Put both devcon and newly made bat file to \wiimote (or change that in the bat) and run the bat as admin.
        And that’s it, works for me – probably should for you. If somebody ever needs that but me lol.

        1. Ok, i am going to check that. What kind of Bluetooth Adapter and what Bluetooth Driver/Stack are you using?
          I thought that pairing and reconnecting through one click is not working on Windows, since the Wii Remote requires some non conform message to enable that. I’ve tested it at the very beginning and it didn’t work for me, but i am testing it again.
          Do you have any additional tools for the Wii Remote installed?

          1. Nope, nothing currently in use. Previously i had GlovePie 0.46 Test installed but it didn’t work for me (can’t work with my fake Classic Controller) so i’ve removed it. My bluetooth stack is a Microsoft one (was previously using Toshiba because of GlovePie but it’s not compatible with your driver so i’ve removed it) and my adapter is somekind of cheap-fake-don’t-even-know-where-i-got-it-but-it-was-2005-i-guess. It’s BT 2.0 though. It’s ID is USB\VID_0A12&PID_0001

          2. Oh, and one more thing. Reconnecting via disabling enumerator works even if i set “allow devices to connect to this PC” in bluetooth options to false.

          3. Seems you are right, not always but sometimes i get it reconnecting. Thanks for bringing that up. I had not enough time to test it through yet, but i will investigate it further and try to come up with a reliable procedure.

          4. Hey, just stopping by because I think I might have some valuable input:

            For me it works a little bit different, for starters I can’t pair using A, I can only pair using 1+2 or the sync button (using original wiimotes).

            Anyway, the uninstall device and then search for device method for repairing was driving me nuts and then I stumbled upon your “disable/enable Bluetooth Enumerator” trick and at first it didn’t work. I tried pressing A before, after and during the “enabling” of the enumerator. Nothing worked.

            However, I pressed 1+2 and the leds started blinking and while blinking I enabled the enumerator and BOOM paired! Tested 4 times now and 4 times paired!

            So I’m happy, for me enabling and disabling the enumerator 1 time is a lot easier than removing/adding new devices the whole time (especially with 4 wiimotes…)

            It’s also handy to save battery while not playing to just turn it off for a while.

            Anyway, good luck with your project and thanks for everything!

    1. Under “Programs and Features” should be an entry named “Windows Driver Package – Julian Löhr (HIDWiimote) …” (May be translated to your OS language) with publisher “Julian Löhr” to remove the driver.

      1. Is your driver compatible with Guitar Hero/Rock Band guitars? I was under the impression that they interfaced exactly as the Classic Controllers did, but I connected my GH guitar into the Wiimote and then paired it with my PC, but none of the buttons from the guitar worked.

        1. No, they are not supported. They do have different extension identifiers and report their data in a different way. So my driver is not able to handle them currently.
          And i think i won’t add support, at least not in the near future.

          1. Ah, I understand. Well, thanks anyway, yours is on of the best drivers out there for the wiimote. I’m stuck with GlovePIE when I play GH clones, haha.

    1. You want to map the Wiimote buttons to keyboard buttons, right? Or other way around?
      To map Wiimote buttons to keyboard you can use other programs like GlovePIE and so on (You may need to remove my driver, so those programs can access the Wiimote).
      For the other way like key to Wiimote, there is VJoy, a virtual joystick program/driver, but i never used that and don’t know what it is capable of exactly.

  6. A very useful and interesting piece of work that gives me an insight into HID. Thankyou.

    Now all I need to do is to get the controller working on a Raspberry Pi so that I can use it to control the gadgetry that I’m installing on my microscope. No touch, no extra vibration!

      1. My Pi is run semi-headless under Linux (Raspbian) – and I have found a suitable library to do the job, too. The project is going to end up groaning with microcontrollers as well as two Pi’s by the end of it – one to handle camera, focus and sample positioning, the other a (basic) spectrometer.

        It *should* keep me soldering and coding for years!

        My initial development system (just for the main logic development and the hardware test-bench ) is a Windows box.

  7. I installed the driver, and disabled the Driver Signature Verification, but when i try to pair the wii remote, My computer doesn’t pick it up!

  8. i wouldn’t say motion is a gimmick for me, as i’ve been using it for years with glovepie/ppjoy on some driving games, only certain games work well with it though – usually smoother games that are not too reflex twitchy, is also good for taming some games with too sensitive steering as turning a big plastic wheel takes longer than a thumbstick.

    also, with glovepie we can add mathematical variables to the input, such as multiplying or dividing for faster/slower responses.

    keep up the good work, i’d gladly pay for your program when it’s completed.

  9. thanks for the program julian, i got it working but there are some issues. 1st, for those wanting to calibrate or disable an axis, try DXtweak v4.30 [similar to vjoy but not virtual] to disable an axis set min -9999999, max 9999999. to calibrate try +/- in say 32 values at a time.

    2nd, for my old wiimote [RCL-CNT-01] the 3 motions are assigned to x/y/z rotation [z not working so disabled] while the d-pad is x/y axis, but most common gamepads use x/y axis + slider + z rotation so in some games no motion can be assigned. idealy the d-pad would be a hat switch or buttons, and the motions would be x/y axis + z rotation. [i could remap these with say vjoy, but some games only use 1st pad in aplhabetical order so RCL is before vjoy entry unfortunately]

    perhaps an editable .ini or registry entry to re-assign an axis number would be do-able? [like what xbox360emu has]

    1. Hi Josh,

      thanks for your feedback and the tip for the calibration tool.

      I am currently looking into how to communicate with a driver, so i am able to create such configuration tool for my driver.
      In the end you shall be able to map the input as you wish. But for the moment i took the XBox 360 Controller mapping as reference. And without any extension my thought was to use the d-pad as primary input axes.
      The problem with the motion is, it is quite unreliable. You can only track two axes, since the third axis is alongside with gravitation and won’t change when rotation around it. The values are only accurate as long as you hold it steady. When shaking the values are going crazy. So currently the motion axes are more like a gimmick.

  10. Hi, thanks for your reply. I thought there might be a workaround like this!

    However it turns out that I can’t even get the Pro controller to pair with the PC. When trying it just comes up with “that didn’t work” in the horrible windows 8 interface. Also as an experiment I sat beside my Wii U with my MacBook open. I paired the Wiimote and the Pro controller pressing the sync buttons. In the bluetooth interface on the MacBook under devices the Wiimote shows up as “Nintendo RVL-CNT-01” but the Pro controller does not show up at all. Yet they both connect successfully to my Wii U.

    Is there any reason why the controller won’t even pair or even be recognised yet still seems to work well with the Wii U itself?

  11. Hi, thanks very much for your programme! I managed to get my Wii motionplus remote connected but not my wii u pro controller. It now appears my pro controller is probably fake.

    I’m running windows 8, and instead of “Nintendo-RVL-CNT-01” appearing as it does with the Wiimote, “Unknown” simply appears. Is there anyway to get the driver to recognise this generic controller?

    Thanks for your help!

    1. Hey,

      you can check the HardwareID of your controller via the Device Manager.
      The original Wii U Pro Controllers is BTHENUM\{00001124-0000-1000-8000-00805f9b34fb}_VID&0002057e_PID&0330

      If it differs my driver won’t get loaded, but you might add your specific Hardware ID to the Driver inf file.
      To do so, uninstall my driver and open up the downloaded driver package.
      Open the HIDWiimote.inf file and locate the two lines where the two Wiimote Hardware ID are mentioned (Device Section, Line 42).
      Copy one line and replace the HardwareID at the end with yours.
      Now install the driver via TinyInstaller.exe.

      This is going to break the driver/package signing and it might give you a warning. Additionally this could mess up the drivers ranking, so you might change the driver manually every time a Wiimote or Wii U Pro Controller is conencted.

  12. Hello Julian,

    I installed your driver so I could use it with the game Rayman Legends.
    It works perfect, but when I wantt to change the controls in the game settings (which looks like this: http://pcgamingwiki.com/images/thumb/b/b9/Rayman_Legends_-_Settings.jpg/290px-Rayman_Legends_-_Settings.jpg) it instantly changed to “1- Analog 6” which is an Input from the rotation sensor. Since the rotation sensor is constantly giving information to the Computer, I can’t configure any other button. My Idea would be to just disable the rotation sensor axis, but I have no Idea how drivers work. Maybe you have a different idea or help me with mine. I’ve been trying for weeks to find a way to do it.

    Thank you in advance
    Tristan

    System information:
    Windows 8.1
    64 BIT

    1. Uff..yeah i didn’t think of that. That is indeed an issue.
      A quick fix would be to attach a Classic Controller so the sensors aren’t used and then configure you inputs.
      But since you aren’t using a Classic Controller in the first place i am assuming you don’t have one.

      Disabling the Acceleration Sensor or its input reports isn’t possible.

      Another temporary workaround might to recalibrate the controller via the calibration dialog.
      Do the calibration for the DPad, but just before the calibration starts for the X,Y & Z axes, put it somewhere on a different table so it lays completely still.
      Then click fast through the calibration for the axes so they are calibrated to just one value. Afterwards their values shouldn’t change, only when you tilt the Wiimote quite far and you are able to change the controls ingame.

      I think i am going to need a additional calibration and settings tool for my driver, so you are able to deactivate the sensors for rearranging the input in games, but that is going to take time.

      1. Thank you for your reply, but calibrating it like that doesn’t help. Now it just always takes “1- Analog 4(-)” as Input. I guess i’ll just have to wait for you to make a configuration tool. But if you have another Idea what I could try, please tell me. I really like your driver, I never had problems in any other game. Keep up the good work.

        1. Maybe you have to test the calibration a little bit, i had quite steady axes in the settings dialog, though haven’t tested it ingame.

          However thanks. I’m currently out of ideas, but get back when i have another.

  13. Hi there, how are you doing? I’m using Windows 10 Pro Insider Beta and I have followed your instructions on installation but your driver is not appearing in the list of optional updates. It said it had been successfully installed and all and I previously had Toshiba stacks working, which was not digitally signed, so is this an OS issue or maybe a hardware issue as my Bluetooth module is an Apple Broadcom. Many thanks.

    1. Hi,
      i haven’t tested the driver on Windows 10 at all yet. I am waiting for the full Windows 10 release and then provide a Driver Package. However the Windows 8.1 Driver might already work.
      What optional updates list do you mean? Do you mean the List to pick the Driver from when switching the driver, you need to uncheck the “Show only drivers for the devive” or what it is called, so it list all drivers. Then look for my Name as provider.

      However when you have installed the driver via TinyInstaller as Administrator, while the Testing Mode was already active, the Driver should be automatically loaded as the default one. If not there seems to be a problem with Windows 10. Microsoft changed the Driver Signing Requirements for Windows 10 and as said i wasn’t able to test the Driver on Windows 10 yet.

    1. Yeah, i am currently finishing up the extension support. And next will be an IR-Mouse Driver. So just give me a few weeks 🙂

        1. I see at some Point i need a configuration tool for my driver so you can map all the things by yourself 😀

  14. can you give me some help?
    I installed my wii remote just fine, and played with it for an hour or two, but later in the same day, when I reconnected it, it wouldn’t recognize the inputs!
    program I’m using: http://joytokey.net/en/
    System: 64 bit Windows 8

    1. What Windows Version do you use? Have you deactivated the driver verification?

      “Errors” is quite a generic message, so i would need some more info to help you.
      When it’s possible, can you check the Windows Event Viewer (Control Panel > (System and Security >) Administrative Tools > Event Viewer), it should give some more hints what’s wrong.

  15. I love it when things dont work! I installed your driver the wrong way. Got a bluescreen computer chrashed. Then i wanted to deinstall your driver but in the cmd it cant delete your driver package because it cannot find it. Danke für das zumüllen meines Computers! (google translate would help you to translate these german words into your language)

    1. I don’t need google translator, since i’m a native german speaker 😛

      Anyway, how did you install the driver? If you used TinyInstaller.exe, it adds an entry to the “Programs and Features” list and you can uninstall it via that entry.
      Did it crashed while installing the driver or when you tried to connect a Wiimote?

      1. Nevermind i did find it and uninstalled the driver. But for some reason my pc still detects the wiimote as a gamecontroller. I have a problem with that because i want to use one of the APIs to build my own Wiimote project. Do you know how to delete and reset the drivers manually?

        1. Is it detected as “Wiimote Device” and still loads my driver, or just as HID-compliant Gamecontroller? If the latter, that’s the default behavior when no specific driver is installed.

  16. This is Wath I’m been waiting for. A real wiimote driver for windows. Not a mouse or joystick emulator. Please I want to see the IR function. That will really take advantage of the Wiimote capabilities 🙂 great work man

  17. Great work! After trying a lot of methods from different wiimote forums this was the one that actually worked! Hope to see the classic controller expansion soon! Superthanks for your work!

  18. Salut,
    Merci pour ton travail, qui me permet d’utiliser ma Wiimote sur mon emulateur préféré 😉
    Bravo !

    Hi there,
    Thanks for your work, now I can use my Wiimote with me prefered emulator !
    Well done !

    Nrv 😉

  19. Nice work on the driver Julian. I use it when wanting extra controls when I play Elite Dangerous.

    I notice 2 problems.

    1. In time the driver stops either my bluetooth keyboard or bluetooth mouse from working. Key bashing and mouse clicking sometimes recovers from this, 50% success. Mostly have to remove Wii battery to get mouse or keyboard working again and Wii device stops working at this point. Sometimes no problem for hours, sometimes problem is within 5 minuets. If playing Elite at the time this random control failure causes disaster for me. If I had regular keyboard & mouse I get no noticeable problems, but I like my BT keys & mouse, I have unusual room based PC design built into a wall and coffee table so wireless is best for me.

    2. Whist USB detecting I have to keep Wii controller awake near end of install with flashing lights or it won’t go to solid lights and activate game controller code. This needs good timing of the user with Wii button pressings.

    Do others have this problem. IS there a cure? Thanks joe

    1. Hey Joe,

      regarding your first issue, i am not using any other Bluetooth devices, so i have not encountered such problems yet. It’s strange that the problem occurs only when other Bluetooth devices are connected, but not when the Wii Remote is used alone. However it sounds like a random bug and those are very hard to fix, since i am not able to reproduce them easily. I’ll put the issue on the known issues list and try to reproduce it. If anyone else is getting such weird behavior, any information is going to help fix it.

      For the button pressing while connecting and waiting for the driver to kick in problem currently exists no solution. The problem is Windows and the time it needs to detect the devices and loading the correct driver. The Wii Remote only stays awake for a certain time while in the connecting state. Since this time is much less than the time Windows needs to load the driver the constant button is unfortunately needed.
      My drivers already sets up the Bluetooth connection and the LEDs at the very beginning to put the Wii Remote in the connected state. Currently i do not know how to speed up the driver loading time of Windows 🙁

    1. That’s an interesting idea. I’ mainly focusing on using it like a generic game controller (without the Sensorbar), but i may look into that.

  20. Hi,

    I installed your driving to help my computer (dell e6410 core i7 running windows 7 64bit)… to help the computer to recognize the wiimote as a video game controller. It helped it to “see” it and now I am finally able to connect it for the johnny chung lee style wiimote whiteboard. Just wanted to thank you for the work you did. Works flawlessly! Thank you for putting time and effort into this.

    JD

  21. Hello Julian ! The driver works great, except for the fact that the axes are the wrong way around (unless the wii-remote is meant to be held horizontally with this driver, in which case it should have an option to be used vertically and therefore be compatible with software such as wiinmote (which misinterprets the data it receives and so the ‘A’ button acts as the ‘B’ button, and vice-versa). So as I say, a mapping option or tutorial would be greatly appreciated, but in general, KEEP UP THE GREAT WORK ! 😀

    1. Hi Albin,

      thanks for your feedback. Currently the Wii Remote is meant to be held horizontally. My thoughts were so you can reach and use all buttons (including 1 and 2) with two hands on it. But you are right i forgot a tutorial about that. My plans are to support the extensions and depending on the plugged in extension the button mapping would change. I had thought about a mapping options as well, but that would require an additional software to configure my driver, so i dismissed it for the beginning. Maybe i am going to implement such mapping options, but that’s a hell of work, so don’t expect it for the near future.
      Regarding Wiinmote and other libraries and tools; i haven’t tested those with my driver. But since my driver changes the reports by consuming the original reports from the wii remote and creating new ones, those tool and libraries should not work properly with my driver. I will take a look into it if i can fix that, but that will take a lot of time, so don’t expect it for the near future as well.

      I hope i will get some spare time soon, so i can start implementing the extension support. Then you can even use my driver for the Wii U Pro Controller.

  22. Hello Julian,

    Happy New Year!

    I have an LG Magic remote which I believe behave similar to the WiiRemote. I was wondering whether or not your driver would be able to translate the data transmitted from the magic remote as the Magic Remote is connected to PC as a Bluetooth HID device.

    Thank you so much in advance.

    1. Hi Mando,

      i don’t think my driver would work with the LG Magic remote. The Wii Remote has a very specific non generic communication protocol. Additional my driver is only loaded for Wii Remote Devices and no other generic ones.
      But my driver concept as it is may work, if the communication protocol of the Magic remote is known. The interpreting code must be replaced to be appropriate and it may work.

      1. Hi Julian,

        Thank you for the quick reply. I am attaching a link to the output I get from the Magic Remote with the generic HID plugin in Event Ghost. I am able to understand a couple of the hexadecimal numbers and their values. But can you direct me to where I can further read to understand the rest of the numbers. thank you for your help. I am willing to experiment with it to get it to work.

        http://www.eventghost.net/forum/download/file.php?id=4209&mode=view

        Thank you again for your help.

        1. Hi Mando,

          try to get the HID Report Descriptor of the Magic Remote. It will tell you the structure and meaning of those reports.
          On http://www.usb.org/developers/hidpage/ you can get the the “Device Class Definition for Human Interface Devices”. It’s the documentation including the Report Descriptor specification. At the bottom of the page download the “HID Descriptor Tool” which will help you translate the Report Descriptor from Bytes into a readable form if your tool isn’t capable of it.

          I don’t know if Event Ghost is able to retrieve the Report Descriptor, if not there are tools for that. Unfortunately i never needed such tool, so i can’t recommend one.

          However feel free to ask me back if you need additional help.

  23. When I pair the controller with the windows just only 3 leds stay solid, is there any problem with it ? Anyway, I can’t use the wiiremote with dolphin, the emulator doesn’t recognize anything. Do you have any idea to solve this problem ?

    1. I assume you installed my driver, so the leds are set to represent the battery level (all four on = full charge; one remaining = almost depleted).
      Regarding dolphin, i haven’t tested dolphin using my driver, so there might be compatibility problems. Does it work without my driver installed?

  24. Thank you Julian, your driver is fantastic! Finally I can play pc racing games with wiimote.

    Only clitch with your driver is that every time I connect wiimote I have to “update driver” to get wiimote connected.

    I’m on win7 32-bit.

    When you get this straight and nunchuck support to your driver, you are god to pc-gamers like me!

    1. Glad to hear you like my driver 🙂
      Did you use the “TinyIsntaller” to install the driver? The installer should install a workaround to get the my driver loaded over the default one.

  25. These drivers are awesome. They work flawlessly on my Win7 X64 installs. Just one question;

    Do you think we will see Support for the Nunchuck and the Classic Remote addons? As that is the ONLY thing your driver is missing.

    I even have this driver working on 2 separate paired wiimotes on the same PC 🙂

  26. COMPUTER CRASH!!! I was stupid, I tried to delete the registry key for your driver, it failed. I tried to delete a root registry key… My computer crashed. What my original question was was how to set the default driver for the wiimote because I had installed your driver wrong and my wiimote was not working right with the computer.

    1. As far as i know you can’t set the default driver directly via the registry. When connecting a device Windows creates a internal ranking list with all possible drivers. That ranking list is ordered by how good the driver fits the device and how the driver is signed (no signing, signed, trusted signing, WHQL). So to set a default driver that driver needs to have the highest score or you have to remove all with a higher score. Latter way is difficult when the Microsoft default driver has a higher score.
      However my driver is signed by a self created certificate. When installing my driver with the “tinyinstaller.exe” that certificate is installed into the trusted certificate store, so my driver gets a higher score than the Microsoft one.
      So if you want to have the Microsoft driver as default driver but still my driver installed, you can just remove the certificate from the store.
      Moreover if you just want to get rid of my driver, see the “Installation via Command Line”. You can remove my driver (if there is no Programs and Features entry) with the command prompt. Start a cmd as admin and run “pnputil -e” to get a list of all pnp drivers. Then locate my driver in the list and run “pnputil -d oemX.inf” where oemX.inf is the filename from the list.
      If you still encounter problems please let me know and i will help you.

  27. Hi! This is really cool, but i have a major problem. I tried to install your drivers without using your method, and it has screwed up the way that my computer interprets the Wii remote. is there any way to uninstall the drivers and registry information that your program has written on to my computer, so that it just recognizes it as a game controller again?

      1. Ok, i’m sorry, i do not understand directly what your problem is.
        How did you install my driver, if not with my installer? And what exactly do you want to achieve? Do you want my driver as default loaded driver or the default windows provided driver?

  28. Eh, one more thing – restarting again with enforcement ON and your drive is not in device manager at all. Not even with exclamation triangle nor the original BT HID device driver is loaded.

  29. Hi, I tried your Vista build and there are some serious problems. I had not enough time to dig in it for a long time, but this is first result:
    1) installed it with driver signature enforcement OFF = instant BSOD during driver install
    2) finished install with enforcement ON = driver installed sucessfully, but not running due bad signature
    3) restarted with turning OFF enforcement = BSOD during start up :-))))

    If you know what could be the problem, feel free to solve it. On the other hand, do not waste your time too much, I will probably switch to Win8.1 within a week or two 😉

    1. Okay, that’s very strange behavior.
      Could you send me the bluescreen log via email? Then i am able to take a look into this. It should be at C:/Windows/MEMORY.DMP or in C:/Windows/minidumps. And maybe additional or if there are no logs tell me what the Event Viewer says for the crashes (Control Panel > (System and Security >) Administrative Tools > Event Viewer; i don’t know if it is the same on Vista).

      At least then i would be able to tell if its my driver, the Toshiba BT Stack or Vista.
      The weird thing is, my driver is a Plug&Play driver. This means it is loaded the very moment the Wii Remote is connected. So on start up it shouldn’t be there at all. Or the Toshiba BT stack holds the wii remote as connected…however on my systems with the Microsoft BT stack, when i does not remove the Wii Remote properly it is still enumerated, but the physical device is not connected and for me the driver doesn’t have a problem with that.

      Anyway i’m very sorry for your inconvenience and apologize for the BSODs 🙁
      I think i have to get a Vista system and test the driver on it as well.

  30. Hi Julian, thanks for your mail and great support. I will be busy during the week, but it’s sure I will test Vista drivers next weekend at the latest and let you know. You are “last man standing” almost a hero :-), the only one person on the Internet who actually do something with wiimote except for Dolphin community. I do not feel like to emulate wii on my pc, probably never ever, but trully want to use this great gadget for other things like head tracking, pc remote and joystick… It’s possibilities are really wide and it’s a shame many good projects discontinued or stick with supporting older remotes only. Obviously, if you was able to deal with it saying it wasn’t real problem, others should too.
    Regarding my setup – yes, I turned off signature enforcement. I am using Toshiba BT stack because I red several posts, this is currently only one stack being able to connect TR remotes. But it seems to.me, that with your driver it may not be true any more.
    Again, great job man!

    1. Hmm..I haven’t tested my driver with the Toshiba BT stack yet. But it would be odd if that causes problems. I mean it should provide the same functionality like the Microsoft one.

      Regarding those post suggesting the Toshiba BT stack, on my systems the Windows BT stack is doing fine from the beginning, so i thought they fixed the driver stack.

      Thank you for your great feedback.

    1. I just released a minor update and made Vista builds just for you.
      But since you are using a 64 bit system, have you deactivated the driver signing verification on start up? And those newer “-TR” remotes need to be paired via the red sync button on the back, else the wii remote won’t accept the conenction.
      If you still have problems with the driver, please let me know and i will help you of course.

Leave a Reply