VirtualBox

source: vbox/trunk/src/VBox/Main/include/HostPower.h@ 60952

Last change on this file since 60952 was 60952, checked in by vboxsync, 9 years ago

HostPower.h: another PVM fix (new SDK).

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.3 KB
Line 
1/* $Id: HostPower.h 60952 2016-05-12 14:26:05Z vboxsync $ */
2/** @file
3 *
4 * VirtualBox interface to host's power notification service
5 */
6
7/*
8 * Copyright (C) 2006-2013 Oracle Corporation
9 *
10 * This file is part of VirtualBox Open Source Edition (OSE), as
11 * available from http://www.virtualbox.org. This file is free software;
12 * you can redistribute it and/or modify it under the terms of the GNU
13 * General Public License (GPL) as published by the Free Software
14 * Foundation, in version 2 as it comes in the "COPYING" file of the
15 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
16 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
17 */
18
19#ifndef ____H_HOSTPOWER
20#define ____H_HOSTPOWER
21
22#ifdef RT_OS_DARWIN /* first, so we can undef pVM in iprt/cdefs.h */
23# include <IOKit/pwr_mgt/IOPMLib.h>
24# include <Carbon/Carbon.h>
25#endif
26
27#include "VirtualBoxBase.h"
28
29#include <vector>
30
31#ifdef RT_OS_LINUX
32# include <VBox/dbus.h>
33#endif
34
35class HostPowerService
36{
37 public:
38 HostPowerService(VirtualBox *aVirtualBox);
39 virtual ~HostPowerService();
40 void notify(Reason_T aReason);
41
42 protected:
43 VirtualBox *mVirtualBox;
44 std::vector<ComPtr<IInternalSessionControl> > mSessionControls;
45};
46
47# ifdef RT_OS_WINDOWS
48/**
49 * The Windows hosted Power Service.
50 */
51class HostPowerServiceWin : public HostPowerService
52{
53public:
54
55 HostPowerServiceWin(VirtualBox *aVirtualBox);
56 virtual ~HostPowerServiceWin();
57
58private:
59
60 static DECLCALLBACK(int) NotificationThread(RTTHREAD ThreadSelf, void *pInstance);
61 static LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
62
63 HWND mHwnd;
64 RTTHREAD mThread;
65};
66#elif defined(RT_OS_LINUX)
67/**
68 * The Linux hosted Power Service.
69 */
70class HostPowerServiceLinux : public HostPowerService
71{
72public:
73
74 HostPowerServiceLinux(VirtualBox *aVirtualBox);
75 virtual ~HostPowerServiceLinux();
76
77private:
78
79 static DECLCALLBACK(int) powerChangeNotificationThread(RTTHREAD ThreadSelf, void *pInstance);
80
81 /* Private member vars */
82 /** Our message thread. */
83 RTTHREAD mThread;
84 /** Our (private) connection to the DBus. Closing this will cause the
85 * message thread to exit. */
86 DBusConnection *mpConnection;
87};
88
89# elif defined(RT_OS_DARWIN) /* RT_OS_WINDOWS */
90/**
91 * The Darwin hosted Power Service.
92 */
93class HostPowerServiceDarwin : public HostPowerService
94{
95public:
96
97 HostPowerServiceDarwin(VirtualBox *aVirtualBox);
98 virtual ~HostPowerServiceDarwin();
99
100private:
101
102 static DECLCALLBACK(int) powerChangeNotificationThread(RTTHREAD ThreadSelf, void *pInstance);
103 static void powerChangeNotificationHandler(void *pvData, io_service_t service, natural_t messageType, void *pMessageArgument);
104 static void lowPowerHandler(void *pvData);
105
106 void checkBatteryCriticalLevel(bool *pfCriticalChanged = NULL);
107
108 /* Private member vars */
109 RTTHREAD mThread; /* Our message thread. */
110
111 io_connect_t mRootPort; /* A reference to the Root Power Domain IOService */
112 IONotificationPortRef mNotifyPort; /* Notification port allocated by IORegisterForSystemPower */
113 io_object_t mNotifierObject; /* Notifier object, used to deregister later */
114 CFRunLoopRef mRunLoop; /* A reference to the local thread run loop */
115
116 bool mCritical; /* Indicate if the battery was in the critical state last checked */
117};
118# endif /* RT_OS_DARWIN */
119
120#endif /* !____H_HOSTPOWER */
121/* vi: set tabstop=4 shiftwidth=4 expandtab: */
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette