Hi!
I managed to make my 3rd party Wiimote work with Dolphin in-game.
The symptom was that that my 3rd party Wiimote ( http://cgi.ebay.ie/ws/eBayISAPI.dll?View...0393544125 ) was able to sync with Dolphin, but only games that use the main buttons of the wiimote worked (there aren't many of those, I suppose). Anything that uses motion sensing or the nunchuk wouldn't
After some head/wall encounters, I realized that the remote wasn't even replying to the first packet a game is sending it. E.g., in Mario Kart, I see "a2 17 00 00 17 70 00 01".
Turns out that this Wiimote (and probably most other 3rd parties, I wouldn't be surprised if all used the same chipset) doesn't understand DATA packets (the `a' in a2). No reply ever comes out.
That "a2 17 00 00 17 70 00 01" is actually an eeprom read request. If you look at
http://wiibrew.org/wiki/Wiimote , you'll see that a2 packets aren't even documented. It documents using 52 (5 == set report) instead. By making the real wiimote code swap those a2's for 52's, the 3rd party Wiimote starts working perfectly. I also tested with a real Nintendo Wiimote (one of those with a builtin motionplus), and I can confirm that it still works after the change.
52 is also what libcwiid sends, and that's the reason that wmgui works out of the box with this wiimote.
I can only imagine that since this Wiimote supposedly works work the real Wii, that if we sniffed the bluetooth traffic between the Wii and this Wiimote, we'd indeed see 52's instead of a2's.
I'm attaching the minimal fix I came up with.
BTW, I'm on Linux (x86_64-linux ubuntu 11.04).
Sonic1 pointed me that the old wiiuse code also used to do this translation.
http://www.google.com/codesearch#fwGbquB....com&l=325
I managed to make my 3rd party Wiimote work with Dolphin in-game.
The symptom was that that my 3rd party Wiimote ( http://cgi.ebay.ie/ws/eBayISAPI.dll?View...0393544125 ) was able to sync with Dolphin, but only games that use the main buttons of the wiimote worked (there aren't many of those, I suppose). Anything that uses motion sensing or the nunchuk wouldn't
After some head/wall encounters, I realized that the remote wasn't even replying to the first packet a game is sending it. E.g., in Mario Kart, I see "a2 17 00 00 17 70 00 01".
Turns out that this Wiimote (and probably most other 3rd parties, I wouldn't be surprised if all used the same chipset) doesn't understand DATA packets (the `a' in a2). No reply ever comes out.
That "a2 17 00 00 17 70 00 01" is actually an eeprom read request. If you look at
http://wiibrew.org/wiki/Wiimote , you'll see that a2 packets aren't even documented. It documents using 52 (5 == set report) instead. By making the real wiimote code swap those a2's for 52's, the 3rd party Wiimote starts working perfectly. I also tested with a real Nintendo Wiimote (one of those with a builtin motionplus), and I can confirm that it still works after the change.
52 is also what libcwiid sends, and that's the reason that wmgui works out of the box with this wiimote.
I can only imagine that since this Wiimote supposedly works work the real Wii, that if we sniffed the bluetooth traffic between the Wii and this Wiimote, we'd indeed see 52's instead of a2's.
I'm attaching the minimal fix I came up with.
BTW, I'm on Linux (x86_64-linux ubuntu 11.04).
Sonic1 pointed me that the old wiiuse code also used to do this translation.
http://www.google.com/codesearch#fwGbquB....com&l=325