WiimoteReal: Split WiimoteScannerDarwin
This moves out the HID code into a separate scanner.
This commit is contained in:
parent
3305a923e1
commit
9c02e327b7
|
@ -84,6 +84,16 @@ public:
|
|||
void FindWiimotes(std::vector<Wiimote*>&, Wiimote*&) override;
|
||||
void Update() override{}; // not needed
|
||||
};
|
||||
|
||||
class WiimoteScannerDarwinHID final : public WiimoteScannerBackend
|
||||
{
|
||||
public:
|
||||
WiimoteScannerDarwinHID() = default;
|
||||
~WiimoteScannerDarwinHID() override = default;
|
||||
bool IsReady() const override;
|
||||
void FindWiimotes(std::vector<Wiimote*>&, Wiimote*&) override;
|
||||
void Update() override{}; // not needed
|
||||
};
|
||||
}
|
||||
|
||||
#else
|
||||
|
@ -91,5 +101,6 @@ public:
|
|||
namespace WiimoteReal
|
||||
{
|
||||
using WiimoteScannerDarwin = WiimoteScannerDummy;
|
||||
using WiimoteScannerDarwinHID = WiimoteScannerDummy;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -26,34 +26,18 @@ void WiimoteScannerDarwin::FindWiimotes(std::vector<Wiimote*>& found_wiimotes,
|
|||
// TODO: find the device in the constructor and save it for later
|
||||
IOBluetoothHostController* bth;
|
||||
IOBluetoothDeviceInquiry* bti;
|
||||
IOHIDManagerRef hid;
|
||||
SearchBT* sbt;
|
||||
NSEnumerator* en;
|
||||
found_board = nullptr;
|
||||
|
||||
bool btFailed = false;
|
||||
bool hidFailed = false;
|
||||
|
||||
bth = [[IOBluetoothHostController alloc] init];
|
||||
btFailed = [bth addressAsString] == nil;
|
||||
bool btFailed = [bth addressAsString] == nil;
|
||||
if (btFailed)
|
||||
WARN_LOG(WIIMOTE, "No Bluetooth host controller");
|
||||
|
||||
hid = IOHIDManagerCreate(NULL, kIOHIDOptionsTypeNone);
|
||||
hidFailed = CFGetTypeID(hid) != IOHIDManagerGetTypeID();
|
||||
if (hidFailed)
|
||||
WARN_LOG(WIIMOTE, "No HID manager");
|
||||
|
||||
if (hidFailed && btFailed)
|
||||
{
|
||||
CFRelease(hid);
|
||||
WARN_LOG(WIIMOTE, "No Bluetooth host controller");
|
||||
[bth release];
|
||||
return;
|
||||
}
|
||||
|
||||
if (!btFailed)
|
||||
{
|
||||
sbt = [[SearchBT alloc] init];
|
||||
SearchBT* sbt = [[SearchBT alloc] init];
|
||||
sbt->maxDevices = 32;
|
||||
bti = [[IOBluetoothDeviceInquiry alloc] init];
|
||||
[bti setDelegate:sbt];
|
||||
|
@ -77,7 +61,7 @@ void WiimoteScannerDarwin::FindWiimotes(std::vector<Wiimote*>& found_wiimotes,
|
|||
if (found_devices)
|
||||
NOTICE_LOG(WIIMOTE, "Found %i Bluetooth devices", found_devices);
|
||||
|
||||
en = [[bti foundDevices] objectEnumerator];
|
||||
NSEnumerator* en = [[bti foundDevices] objectEnumerator];
|
||||
for (int i = 0; i < found_devices; i++)
|
||||
{
|
||||
IOBluetoothDevice* dev = [en nextObject];
|
||||
|
@ -101,8 +85,26 @@ void WiimoteScannerDarwin::FindWiimotes(std::vector<Wiimote*>& found_wiimotes,
|
|||
[sbt release];
|
||||
}
|
||||
|
||||
if (!hidFailed)
|
||||
bool WiimoteScannerDarwin::IsReady() const
|
||||
{
|
||||
// TODO: only return true when a BT device is present
|
||||
return true;
|
||||
}
|
||||
|
||||
void WiimoteScannerDarwinHID::FindWiimotes(std::vector<Wiimote*>& found_wiimotes,
|
||||
Wiimote*& found_board)
|
||||
{
|
||||
found_board = nullptr;
|
||||
|
||||
IOHIDManagerRef hid = IOHIDManagerCreate(NULL, kIOHIDOptionsTypeNone);
|
||||
bool hidFailed = CFGetTypeID(hid) != IOHIDManagerGetTypeID();
|
||||
if (hidFailed)
|
||||
{
|
||||
CFRelease(hid);
|
||||
WARN_LOG(WIIMOTE, "No HID manager");
|
||||
return;
|
||||
}
|
||||
|
||||
NSArray* criteria = @[
|
||||
@{ @kIOHIDVendorIDKey : @0x057e,
|
||||
@kIOHIDProductIDKey : @0x0306 },
|
||||
|
@ -131,11 +133,10 @@ void WiimoteScannerDarwin::FindWiimotes(std::vector<Wiimote*>& found_wiimotes,
|
|||
}
|
||||
CFRelease(hid);
|
||||
}
|
||||
}
|
||||
|
||||
bool WiimoteScannerDarwin::IsReady() const
|
||||
bool WiimoteScannerDarwinHID::IsReady() const
|
||||
{
|
||||
// TODO: only return true when a BT device is present
|
||||
// TODO: only return true when !hidFailed
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -639,6 +639,7 @@ void Initialize(::Wiimote::InitializeMode init_mode)
|
|||
g_wiimote_scanner.AddScannerBackend(std::make_unique<WiimoteScannerAndroid>());
|
||||
g_wiimote_scanner.AddScannerBackend(std::make_unique<WiimoteScannerWindows>());
|
||||
g_wiimote_scanner.AddScannerBackend(std::make_unique<WiimoteScannerDarwin>());
|
||||
g_wiimote_scanner.AddScannerBackend(std::make_unique<WiimoteScannerDarwinHID>());
|
||||
g_wiimote_scanner.StartThread();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue