summaryrefslogtreecommitdiffstats
path: root/xbmc/powermanagement/IPowerSyscall.h
diff options
context:
space:
mode:
Diffstat (limited to 'xbmc/powermanagement/IPowerSyscall.h')
-rw-r--r--xbmc/powermanagement/IPowerSyscall.h111
1 files changed, 111 insertions, 0 deletions
diff --git a/xbmc/powermanagement/IPowerSyscall.h b/xbmc/powermanagement/IPowerSyscall.h
new file mode 100644
index 0000000..f54186e
--- /dev/null
+++ b/xbmc/powermanagement/IPowerSyscall.h
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2005-2018 Team Kodi
+ * This file is part of Kodi - https://kodi.tv
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ * See LICENSES/README.md for more information.
+ */
+
+#pragma once
+
+class IPowerEventsCallback
+{
+public:
+ virtual ~IPowerEventsCallback() = default;
+
+ virtual void OnSleep() = 0;
+ virtual void OnWake() = 0;
+
+ virtual void OnLowBattery() = 0;
+};
+
+class IPowerSyscall;
+using CreatePowerSyscallFunc = IPowerSyscall* (*)();
+
+class IPowerSyscall
+{
+public:
+ /**\brief Called by power manager to create platform power system adapter
+ *
+ * This method used to create platform specified power system adapter
+ */
+ static IPowerSyscall* CreateInstance();
+ static void RegisterPowerSyscall(CreatePowerSyscallFunc createFunc);
+
+ virtual ~IPowerSyscall() = default;
+ virtual bool Powerdown() = 0;
+ virtual bool Suspend() = 0;
+ virtual bool Hibernate() = 0;
+ virtual bool Reboot() = 0;
+
+// Might need to be membervariables instead for speed
+ virtual bool CanPowerdown() = 0;
+ virtual bool CanSuspend() = 0;
+ virtual bool CanHibernate() = 0;
+ virtual bool CanReboot() = 0;
+
+ virtual int CountPowerFeatures() = 0;
+
+// Battery related functions
+ virtual int BatteryLevel() = 0;
+
+ /*!
+ \brief Pump power related events back to xbmc.
+
+ PumpPowerEvents is called from Application Thread and the platform implementation may signal
+ power related events back to xbmc through the callback.
+
+ return true if an event occurred and false if not.
+
+ \param callback the callback to signal to
+ */
+ virtual bool PumpPowerEvents(IPowerEventsCallback *callback) = 0;
+
+ static const int MAX_COUNT_POWER_FEATURES = 4;
+
+private:
+ static CreatePowerSyscallFunc m_createFunc;
+};
+
+class CAbstractPowerSyscall : public IPowerSyscall
+{
+public:
+ int CountPowerFeatures() override
+ {
+ return (CanPowerdown() ? 1 : 0)
+ + (CanSuspend() ? 1 : 0)
+ + (CanHibernate() ? 1 : 0)
+ + (CanReboot() ? 1 : 0);
+ }
+};
+
+class CPowerSyscallWithoutEvents : public CAbstractPowerSyscall
+{
+public:
+ CPowerSyscallWithoutEvents() { m_OnResume = false; m_OnSuspend = false; }
+
+ bool Suspend() override { m_OnSuspend = true; return false; }
+ bool Hibernate() override { m_OnSuspend = true; return false; }
+
+ bool PumpPowerEvents(IPowerEventsCallback *callback) override
+ {
+ if (m_OnSuspend)
+ {
+ callback->OnSleep();
+ m_OnSuspend = false;
+ m_OnResume = true;
+ return true;
+ }
+ else if (m_OnResume)
+ {
+ callback->OnWake();
+ m_OnResume = false;
+ return true;
+ }
+ else
+ return false;
+ }
+private:
+ bool m_OnResume;
+ bool m_OnSuspend;
+};