kodi
Win32PowerSyscall.h
1 /*
2  * Copyright (C) 2005-2018 Team Kodi
3  * This file is part of Kodi - https://kodi.tv
4  *
5  * SPDX-License-Identifier: GPL-2.0-or-later
6  * See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 #include "powermanagement/IPowerSyscall.h"
12 #include "powermanagement/PowerTypes.h"
13 #include "threads/Event.h"
14 #include "threads/Thread.h"
15 
16 #include <atomic>
17 
19 {
20 public:
21  CWin32PowerStateWorker() : CThread("CWin32PowerStateWorker"), m_queryEvent(true), m_state(POWERSTATE_NONE) {}
22  bool QueryStateChange(PowerState State);
23 
24 protected:
25  virtual void Process(void);
26  virtual void OnStartup() { SetPriority(ThreadPriority::LOWEST); }
27 
28 private:
29  static bool PowerManagement(PowerState State);
30 
31  std::atomic<PowerState> m_state;
32  CEvent m_queryEvent;
33 };
34 
36 {
37 public:
40 
41  static IPowerSyscall* CreateInstance();
42  static void Register();
43 
44  virtual bool Powerdown();
45  virtual bool Suspend();
46  virtual bool Hibernate();
47  virtual bool Reboot();
48 
49  virtual bool CanPowerdown();
50  virtual bool CanSuspend();
51  virtual bool CanHibernate();
52  virtual bool CanReboot();
53  virtual int BatteryLevel();
54 
55  virtual bool PumpPowerEvents(IPowerEventsCallback *callback);
56 
57  static void SetOnResume() { m_OnResume = true; }
58  static void SetOnSuspend() { m_OnSuspend = true; }
59  static bool IsSuspending() { return m_OnSuspend; }
60 
61 private:
62  BOOLEAN m_hascapabilities;
63  SYSTEM_POWER_CAPABILITIES m_capabilities;
64  CWin32PowerStateWorker m_worker;
65 
66  static bool m_OnResume;
67  static bool m_OnSuspend;
68 
69 };
This is an Event class built from a ConditionVariable.
Definition: Event.h:35
Definition: Thread.h:44
Definition: IPowerSyscall.h:70
Definition: IPowerSyscall.h:11
Definition: Win32PowerSyscall.h:18
Definition: IPowerSyscall.h:25
Definition: Win32PowerSyscall.h:35
bool SetPriority(const ThreadPriority &priority)
Set the threads priority. This uses the platforms native threading library to do so.
Definition: Thread.cpp:196