WiiremoteReal for Mac: Find Wiimotes by name.

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.
This commit is contained in:
Andrew de los Reyes 2012-03-22 20:55:41 -07:00
parent 93b78d7139
commit d3361494ce
3 changed files with 21 additions and 6 deletions

View File

@ -127,11 +127,6 @@ int FindWiimotes(Wiimote **wm, int max_wiimotes)
bti = [[IOBluetoothDeviceInquiry alloc] init];
[bti setDelegate: sbt];
[bti setInquiryLength: 5];
[bti setSearchCriteria: kBluetoothServiceClassMajorAny
majorDeviceClass: kBluetoothDeviceClassMajorPeripheral
minorDeviceClass: kBluetoothDeviceClassMinorPeripheral2Joystick
];
[bti setUpdateNewDeviceNames: NO];
if ([bti start] == kIOReturnSuccess)
[bti retain];
@ -149,6 +144,9 @@ int FindWiimotes(Wiimote **wm, int max_wiimotes)
en = [[bti foundDevices] objectEnumerator];
for (int i = 0; i < found_devices; i++)
{
IOBluetoothDevice *dev = [en nextObject];
if (!IsValidBluetoothName([[dev name] UTF8String]))
continue;
// Find an unused slot
for (int k = 0; k < MAX_WIIMOTES; k++) {
if (wm[k] != NULL ||
@ -156,7 +154,7 @@ int FindWiimotes(Wiimote **wm, int max_wiimotes)
continue;
wm[k] = new Wiimote(k);
wm[k]->btd = [en nextObject];
wm[k]->btd = dev;
found_wiimotes++;
break;
}

View File

@ -512,4 +512,19 @@ void StateChange(EMUSTATE_CHANGE newState)
// TODO: disable/enable auto reporting, maybe
}
#define ARRAYSIZE(_arr) (sizeof(_arr)/(sizeof(_arr[0])))
bool IsValidBluetoothName(const char* name) {
static const char* kValidWiiRemoteBluetoothNames[] = {
"Nintendo RVL-CNT-01",
"Nintendo RVL-CNT-01-TR",
"Nintendo RVL-WBC-01",
};
for (size_t i = 0; i < ARRAYSIZE(kValidWiiRemoteBluetoothNames); i++)
if (strcmp(name, kValidWiiRemoteBluetoothNames[i]) == 0)
return true;
return false;
}
}; // end of namespace

View File

@ -113,6 +113,8 @@ void StateChange(EMUSTATE_CHANGE newState);
int FindWiimotes(Wiimote** wm, int max_wiimotes);
bool IsValidBluetoothName(const char* name);
}; // WiimoteReal
#endif