summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorOatmealDome <julian@oatmealdome.me>2021-06-23 22:55:15 -0400
committerOatmealDome <julian@oatmealdome.me>2021-06-23 22:55:15 -0400
commit0de30fa0bb57458726d7a5aab5eea02411b2a17f (patch)
tree857c3680c8441ffd355e0630a2b19a8f6af46a5e /Source/Core
parenteb7b70b48d7d3caa381d8431265c43142dbd220b (diff)
WiimoteScannerDarwin: Initialize IOBluetoothHostController in constructor
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/HW/WiimoteReal/IOdarwin.h10
-rw-r--r--Source/Core/Core/HW/WiimoteReal/IOdarwin.mm40
2 files changed, 34 insertions, 16 deletions
diff --git a/Source/Core/Core/HW/WiimoteReal/IOdarwin.h b/Source/Core/Core/HW/WiimoteReal/IOdarwin.h
index 315b414d9d..2c862e5511 100644
--- a/Source/Core/Core/HW/WiimoteReal/IOdarwin.h
+++ b/Source/Core/Core/HW/WiimoteReal/IOdarwin.h
@@ -7,17 +7,25 @@
#ifdef __APPLE__
#include "Core/HW/WiimoteReal/WiimoteReal.h"
+#ifdef __OBJC__
+#import <IOBluetooth/IOBluetooth.h>
+#else
+// IOBluetooth's types won't be defined in pure C++ mode.
+typedef void IOBluetoothHostController;
+#endif
+
namespace WiimoteReal
{
class WiimoteScannerDarwin final : public WiimoteScannerBackend
{
public:
- WiimoteScannerDarwin() = default;
+ WiimoteScannerDarwin();
~WiimoteScannerDarwin() override;
bool IsReady() const override;
void FindWiimotes(std::vector<Wiimote*>&, Wiimote*&) override;
void Update() override {} // not needed
private:
+ IOBluetoothHostController* m_host_controller;
bool m_stop_scanning = false;
};
} // namespace WiimoteReal
diff --git a/Source/Core/Core/HW/WiimoteReal/IOdarwin.mm b/Source/Core/Core/HW/WiimoteReal/IOdarwin.mm
index deafb51203..d650ea0105 100644
--- a/Source/Core/Core/HW/WiimoteReal/IOdarwin.mm
+++ b/Source/Core/Core/HW/WiimoteReal/IOdarwin.mm
@@ -21,27 +21,40 @@
namespace WiimoteReal
{
+WiimoteScannerDarwin::WiimoteScannerDarwin()
+{
+ m_host_controller = [IOBluetoothHostController defaultController];
+ if (![m_host_controller addressAsString])
+ {
+ WARN_LOG_FMT(WIIMOTE, "No Bluetooth host controller");
+
+ [m_host_controller release];
+ m_host_controller = nil;
+
+ return;
+ }
+
+ [m_host_controller retain];
+}
+
WiimoteScannerDarwin::~WiimoteScannerDarwin()
{
+ [m_host_controller release];
+ m_host_controller = nil;
+
m_stop_scanning = true;
}
void WiimoteScannerDarwin::FindWiimotes(std::vector<Wiimote*>& found_wiimotes,
Wiimote*& found_board)
{
- // TODO: find the device in the constructor and save it for later
- IOBluetoothHostController* bth;
- IOBluetoothDeviceInquiry* bti;
- found_board = nullptr;
-
- bth = [[IOBluetoothHostController alloc] init];
- bool btFailed = [bth addressAsString] == nil;
- if (btFailed)
+ if (!m_host_controller)
{
- WARN_LOG_FMT(WIIMOTE, "No Bluetooth host controller");
- [bth release];
return;
}
+
+ IOBluetoothDeviceInquiry* bti;
+ found_board = nullptr;
SearchBT* sbt = [[SearchBT alloc] init];
sbt->maxDevices = 32;
@@ -52,7 +65,6 @@ void WiimoteScannerDarwin::FindWiimotes(std::vector<Wiimote*>& found_wiimotes,
if ([bti start] != kIOReturnSuccess)
{
ERROR_LOG_FMT(WIIMOTE, "Unable to do Bluetooth discovery");
- [bth release];
[sbt release];
return;
@@ -86,16 +98,14 @@ void WiimoteScannerDarwin::FindWiimotes(std::vector<Wiimote*>& found_wiimotes,
found_wiimotes.push_back(wm);
}
}
-
- [bth release];
+
[bti release];
[sbt release];
}
bool WiimoteScannerDarwin::IsReady() const
{
- // TODO: only return true when a BT device is present
- return true;
+ return m_host_controller != nil;
}
WiimoteDarwin::WiimoteDarwin(IOBluetoothDevice* device) : m_btd(device)