diff --git a/Source/Core/Core/HW/WiimoteReal/IODummy.cpp b/Source/Core/Core/HW/WiimoteReal/IODummy.cpp index 1c778e6d2c..5b14f9012b 100644 --- a/Source/Core/Core/HW/WiimoteReal/IODummy.cpp +++ b/Source/Core/Core/HW/WiimoteReal/IODummy.cpp @@ -64,4 +64,9 @@ int Wiimote::IOWrite(const u8* buf, size_t len) return 0; } +void Wiimote::EnablePowerAssertionInternal() +{} +void Wiimote::DisablePowerAssertionInternal() +{} + }; diff --git a/Source/Core/Core/HW/WiimoteReal/IONix.cpp b/Source/Core/Core/HW/WiimoteReal/IONix.cpp index d322fb4a7f..b94ce5db9a 100644 --- a/Source/Core/Core/HW/WiimoteReal/IONix.cpp +++ b/Source/Core/Core/HW/WiimoteReal/IONix.cpp @@ -255,4 +255,9 @@ int Wiimote::IOWrite(u8 const* buf, size_t len) return write(int_sock, buf, (int)len); } +void Wiimote::EnablePowerAssertionInternal() +{} +void Wiimote::DisablePowerAssertionInternal() +{} + }; // WiimoteReal diff --git a/Source/Core/Core/HW/WiimoteReal/IOWin.cpp b/Source/Core/Core/HW/WiimoteReal/IOWin.cpp index 219c2cd421..e08870d9c9 100644 --- a/Source/Core/Core/HW/WiimoteReal/IOWin.cpp +++ b/Source/Core/Core/HW/WiimoteReal/IOWin.cpp @@ -783,6 +783,11 @@ int Wiimote::IOWrite(const u8* buf, size_t len) return _IOWrite(dev_handle, hid_overlap_write, stack, buf, len, nullptr); } +void Wiimote::EnablePowerAssertionInternal() +{} +void Wiimote::DisablePowerAssertionInternal() +{} + // invokes callback for each found wiimote bluetooth device template void ProcessWiimotes(bool new_scan, T& callback) diff --git a/Source/Core/Core/HW/WiimoteReal/IOdarwin.mm b/Source/Core/Core/HW/WiimoteReal/IOdarwin.mm index 06a566fa5a..d2b450dc6b 100644 --- a/Source/Core/Core/HW/WiimoteReal/IOdarwin.mm +++ b/Source/Core/Core/HW/WiimoteReal/IOdarwin.mm @@ -72,7 +72,6 @@ memcpy(wm->input, data, length); wm->inputlen = length; - (void)UpdateSystemActivity(UsrActivity); CFRunLoopStop(CFRunLoopGetCurrent()); } @@ -195,6 +194,7 @@ void Wiimote::InitInternal() m_connected = false; m_wiimote_thread_run_loop = nullptr; btd = nil; + m_pm_assertion = kIOPMNullAssertionID; } void Wiimote::TeardownInternal() @@ -328,4 +328,22 @@ int Wiimote::IOWrite(const unsigned char *buf, size_t len) return 0; } +void Wiimote::EnablePowerAssertionInternal() +{ + if (m_pm_assertion == kIOPMNullAssertionID) + { + if (IOReturn ret = IOPMAssertionCreateWithName(kIOPMAssertPreventUserIdleDisplaySleep, kIOPMAssertionLevelOn, CFSTR("Dolphin Wiimote activity"), &m_pm_assertion)) + ERROR_LOG(WIIMOTE, "Could not create power management assertion: %08x", ret); + } +} + +void Wiimote::DisablePowerAssertionInternal() +{ + if (m_pm_assertion != kIOPMNullAssertionID) + { + if (IOReturn ret = IOPMAssertionRelease(m_pm_assertion)) + ERROR_LOG(WIIMOTE, "Could not release power management assertion: %08x", ret); + } +} + } diff --git a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp index bcd4501f7b..1eb3e88003 100644 --- a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp +++ b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp @@ -48,6 +48,7 @@ Wiimote::Wiimote() Wiimote::~Wiimote() { + DisablePowerAssertionInternal(); StopThread(); ClearReadQueue(); m_write_reports.Clear(); @@ -334,6 +335,7 @@ bool Wiimote::PrepareOnThread() void Wiimote::EmuStart() { DisableDataReporting(); + EnablePowerAssertionInternal(); } void Wiimote::EmuStop() @@ -343,6 +345,8 @@ void Wiimote::EmuStop() DisableDataReporting(); NOTICE_LOG(WIIMOTE, "Stopping Wiimote data reporting."); + + DisablePowerAssertionInternal(); } void Wiimote::EmuResume() @@ -358,6 +362,8 @@ void Wiimote::EmuResume() QueueReport(WM_REPORT_MODE, &rpt, sizeof(rpt)); NOTICE_LOG(WIIMOTE, "Resuming Wiimote data reporting."); + + EnablePowerAssertionInternal(); } void Wiimote::EmuPause() @@ -371,6 +377,8 @@ void Wiimote::EmuPause() QueueReport(WM_REPORT_MODE, &rpt, sizeof(rpt)); NOTICE_LOG(WIIMOTE, "Pausing Wiimote data reporting."); + + DisablePowerAssertionInternal(); } static unsigned int CalculateConnectedWiimotes() diff --git a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h index 1cd34b5e8d..fa167a81a2 100644 --- a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h +++ b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h @@ -47,6 +47,9 @@ public: void EmuResume(); void EmuPause(); + void EnablePowerAssertionInternal(); + void DisablePowerAssertionInternal(); + // connecting and disconnecting from physical devices // (using address inserted by FindWiimotes) // these are called from the wiimote's thread. @@ -80,6 +83,7 @@ public: int inputlen; bool m_connected; CFRunLoopRef m_wiimote_thread_run_loop; + IOPMAssertionID m_pm_assertion; #elif defined(__linux__) && HAVE_BLUEZ bdaddr_t bdaddr; // Bluetooth address int cmd_sock; // Command socket diff --git a/Source/Core/Core/HW/WiimoteReal/WiimoteRealBase.h b/Source/Core/Core/HW/WiimoteReal/WiimoteRealBase.h index 4d1f6a2d36..847720ba98 100644 --- a/Source/Core/Core/HW/WiimoteReal/WiimoteRealBase.h +++ b/Source/Core/Core/HW/WiimoteReal/WiimoteRealBase.h @@ -15,6 +15,7 @@ #define NS_ENUM_AVAILABLE(...) // end hack #import + #include #elif defined(__linux__) && HAVE_BLUEZ #include #endif