The decided way to find Wii Remotes is by their bluetooth name, so
this patch introduces common code to identify if a given string is a
valid Wiimote name.
On Mac, when scanning bluetooth, consult the function with all found
bluetooth devices.
There are two ways to send commands to Wii Remotes:
- On command channel, with a first byte of 0x52. This works on
Nintendo RVL-CNT-01, but not Nintendo RVL-CNT-01-TR wiimotes.
- On interrupt channel, with a first byte of 0xa2. This works on
Nintendo RVL-CNT-01 and Nintendo RVL-CNT-01-TR wiimotes.
This patch switches Mac from the former to the latter. Windows and
Linux remain unchanged.
This reverts commit c9dfcf8cf7.
That commit attempted to support all Wii Remotes on Mac OS X, but the
logic was incorrect, and as a result the original (non-TR) Wii Remotes
were broken by that change.
Future patches will address this problem in a better way.
Commit 9ddb67d4a9 seems to have
introduced a segfault on Mac. The issue is that it this change casts
wxConvCurrent (which is a wxMBConvLibc) to a wxCSConv. This is an
unsafe cast because wxCSConv has member variables, but wxMBConvLibc
does not.
In LogWindow.cpp, the constructor for m_SJISConv is dereferencing one
of those member variables, which is a dereference of uninitialized
memory!
This CL reverts to the older (non-crashing) constructor, but keeps the
behavior the same.
Specifically:
- Look for clang and clang++ in the new (Xcode 4.3) location first,
then the old (Xcode 4.2) location.
- Look for sysroot in the new (Xcode 4.3) location first, then the old
(Xcode 4.2) location.
This patch makes a few changes necessary for support for the new Wii
Remotes:
- For all OSes:
- Adds a new bool member variable m_motion_plus_inside to identify
the new Wii Remotes.
- If we have a new Wii Remote, use a head byte of 0xa2. We could
just change this behavior for all Wii Remotes, but an existing
comment suggests that would break 3rd party Wii Remotes.
- On Mac OS X:
- Expand the search criteria for the bluetooth scan. This is
necessary because the new Wii Remote identifies with minor class
kBluetoothDeviceClassMinorPeripheral2Gamepad, but the old Wii
Remotes use minor class
kBluetoothDeviceClassMinorPeripheral2Joystick (1).
- Send commands on the interrupt channel, not the control
channel. The new Wii Remotes require this; old ones are compatible
with this. Note: 3rd party Wii Remots are untested with this
change; the hope is they are still functional.
- Get the name of the bluetooth device and see if it ends in
"-TR". If so, set a member variable so we know it's the new kind
of Wii Remote.
This should fix issue 5011 for Mac OS X:
http://code.google.com/p/dolphin-emu/issues/detail?id=5011