diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 16:49:04 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 16:49:04 +0000 |
commit | 16f504a9dca3fe3b70568f67b7d41241ae485288 (patch) | |
tree | c60f36ada0496ba928b7161059ba5ab1ab224f9d /src/VBox/Main/include/HostPower.h | |
parent | Initial commit. (diff) | |
download | virtualbox-16f504a9dca3fe3b70568f67b7d41241ae485288.tar.xz virtualbox-16f504a9dca3fe3b70568f67b7d41241ae485288.zip |
Adding upstream version 7.0.6-dfsg.upstream/7.0.6-dfsgupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/VBox/Main/include/HostPower.h')
-rw-r--r-- | src/VBox/Main/include/HostPower.h | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/src/VBox/Main/include/HostPower.h b/src/VBox/Main/include/HostPower.h new file mode 100644 index 00000000..e157d6da --- /dev/null +++ b/src/VBox/Main/include/HostPower.h @@ -0,0 +1,136 @@ +/* $Id: HostPower.h $ */ +/** @file + * + * VirtualBox interface to host's power notification service + */ + +/* + * Copyright (C) 2006-2022 Oracle and/or its affiliates. + * + * This file is part of VirtualBox base platform packages, as + * available from https://www.virtualbox.org. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, in version 3 of the + * License. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see <https://www.gnu.org/licenses>. + * + * SPDX-License-Identifier: GPL-3.0-only + */ + +#ifndef MAIN_INCLUDED_HostPower_h +#define MAIN_INCLUDED_HostPower_h +#ifndef RT_WITHOUT_PRAGMA_ONCE +# pragma once +#endif + +#ifdef RT_OS_DARWIN /* first, so we can undef pVM in iprt/cdefs.h */ +# include <IOKit/pwr_mgt/IOPMLib.h> +# include <Carbon/Carbon.h> +#endif + +#include "VirtualBoxBase.h" + +#include <vector> + +#ifdef RT_OS_LINUX +# include <VBox/dbus.h> +#endif + +class HostPowerService +{ + public: + HostPowerService(VirtualBox *aVirtualBox); + virtual ~HostPowerService(); + void notify(Reason_T aReason); + + protected: + VirtualBox *mVirtualBox; + std::vector<ComPtr<IInternalSessionControl> > mSessionControls; +}; + +# if defined(RT_OS_WINDOWS) || defined(DOXYGEN_RUNNING) +/** + * The Windows hosted Power Service. + */ +class HostPowerServiceWin : public HostPowerService +{ +public: + + HostPowerServiceWin(VirtualBox *aVirtualBox); + virtual ~HostPowerServiceWin(); + +private: + + static DECLCALLBACK(int) NotificationThread(RTTHREAD ThreadSelf, void *pInstance); + static LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); + + HWND mHwnd; + RTTHREAD mThread; +}; +# endif +# if defined(RT_OS_LINUX) || defined(DOXYGEN_RUNNING) +/** + * The Linux hosted Power Service. + */ +class HostPowerServiceLinux : public HostPowerService +{ +public: + + HostPowerServiceLinux(VirtualBox *aVirtualBox); + virtual ~HostPowerServiceLinux(); + +private: + + static DECLCALLBACK(int) powerChangeNotificationThread(RTTHREAD ThreadSelf, void *pInstance); + + /* Private member vars */ + /** Our message thread. */ + RTTHREAD mThread; + /** Our (private) connection to the DBus. Closing this will cause the + * message thread to exit. */ + DBusConnection *mpConnection; +}; + +# endif +# if defined(RT_OS_DARWIN) || defined(DOXYGEN_RUNNING) +/** + * The Darwin hosted Power Service. + */ +class HostPowerServiceDarwin : public HostPowerService +{ +public: + + HostPowerServiceDarwin(VirtualBox *aVirtualBox); + virtual ~HostPowerServiceDarwin(); + +private: + + static DECLCALLBACK(int) powerChangeNotificationThread(RTTHREAD ThreadSelf, void *pInstance); + static void powerChangeNotificationHandler(void *pvData, io_service_t service, natural_t messageType, void *pMessageArgument); + static void lowPowerHandler(void *pvData); + + void checkBatteryCriticalLevel(bool *pfCriticalChanged = NULL); + + /* Private member vars */ + RTTHREAD mThread; /* Our message thread. */ + + io_connect_t mRootPort; /* A reference to the Root Power Domain IOService */ + IONotificationPortRef mNotifyPort; /* Notification port allocated by IORegisterForSystemPower */ + io_object_t mNotifierObject; /* Notifier object, used to deregister later */ + CFRunLoopRef mRunLoop; /* A reference to the local thread run loop */ + + bool mCritical; /* Indicate if the battery was in the critical state last checked */ +}; +# endif + +#endif /* !MAIN_INCLUDED_HostPower_h */ +/* vi: set tabstop=4 shiftwidth=4 expandtab: */ |