summaryrefslogtreecommitdiffstats
path: root/src/hardware.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/hardware.h')
-rw-r--r--src/hardware.h502
1 files changed, 502 insertions, 0 deletions
diff --git a/src/hardware.h b/src/hardware.h
new file mode 100644
index 0000000..826deb6
--- /dev/null
+++ b/src/hardware.h
@@ -0,0 +1,502 @@
+ /**************************************************************************
+ * Copyright (C) 2006-2007 by Danny Kukawka *
+ * <dkukawka@suse.de>, <danny.kukawka@web.de> *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of version 2 of the GNU General Public License *
+ * as published by the Free Software Foundation. *
+ * *
+ * 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, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+/*!
+* \file hardware.h
+* \brief Headerfile for hardwareinfo.cpp. This file collect/hold all
+* Hardware information as e.g. battery and ac state.
+*/
+
+/*!
+* \class HardwareInfo
+* \brief class for hardware information related funtionality
+* \author Danny Kukawka, <dkukawka@suse.de>, <danny.kukawka@web.de>
+* \date 2006-2007
+*/
+
+#ifndef _HARDWARE_H_
+#define _HARDWARE_H_
+
+// Global Header
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// QT - Header
+#include <qstring.h>
+#include <qobject.h>
+#include <qvaluelist.h>
+#include <qptrlist.h>
+#include <qdict.h>
+
+// HAL Library
+#include <hal/libhal.h>
+
+#include "dbusHAL.h"
+#include "hardware_battery.h"
+#include "hardware_batteryCollection.h"
+
+enum suspend_type {
+ SUSPEND2DISK,
+ SUSPEND2RAM,
+ STANDBY
+};
+
+enum cpufreq_type {
+ UNKNOWN_CPUFREQ = -1,
+ PERFORMANCE,
+ DYNAMIC,
+ POWERSAVE
+};
+
+enum device_type {
+ BATTERY,
+ AC_ADAPTER,
+ BUTTON_SLEEP,
+ BUTTON_POWER,
+ LID,
+ LAPTOP_PANEL,
+ UNKNOWN_DEVICE
+};
+
+enum ERROR_MSG {
+ DBUS_NO_RIGHTS,
+ DBUS_NOT_RUNNING,
+ DBUS_RUNNING
+};
+
+//! hold information if suspend/standby/pm actions are supported and allowed
+/*!
+* This dictionary contains information about the available pm capabilities and
+* the related interfaces in HAL.
+*/
+typedef struct SuspendStates {
+ //! true if the machine support suspend2ram and the interface is available
+ bool suspend2ram;
+ //! true if the machine support suspend2ram, but no interface available
+ bool suspend2ram_can;
+ //! true if the machine support suspend2ram and PolicyKit allow to call the interface
+ int suspend2ram_allowed;
+ //! true if the machine support suspend2disk and the interface is available
+ bool suspend2disk;
+ //! true if the machine support suspend2disk, but no interface available
+ bool suspend2disk_can;
+ //! true if the machine support suspend2disk and PolicyKit allow to call the interface
+ int suspend2disk_allowed;
+ //! true if the machine support standby and the interface is available
+ bool standby;
+ //! true if the machine support standby, but no interface available
+ bool standby_can;
+ //! true if the machine support standby and PolicyKit allow to call the interface
+ int standby_allowed;
+
+ SuspendStates () {
+ suspend2ram = false;
+ suspend2ram_can = false;
+ suspend2ram_allowed = -1;
+ suspend2disk = false;
+ suspend2disk_can = false;
+ suspend2disk_allowed = -1;
+ standby = false;
+ standby_can = false;
+ standby_allowed = -1;
+ }
+} SuspendStates;
+
+class HardwareInfo : public QObject{
+
+ Q_OBJECT
+
+private:
+ //! pointer to the dbusHAL connection class
+ dbusHAL *dbus_HAL;
+
+ //! hold udis of special hardware execpt batteries represented by a QString pairs (name,udi)
+ /*!
+ * This directory handle udis for known fixed devices as e.g ac adapter. This devices are
+ * currently available:
+ * \li acadapter
+ * \li lidclose
+ * \li laptop_panel
+ */
+ QDict<QString> udis;
+
+ //! hold the UDIs of all hardware we handle atm
+ /*!
+ * This QStringList contains the list of UDIs we handle at the moment in this
+ * class. This should be used to handle device events from HAL for devices we
+ * want to monitor
+ */
+ QStringList allUDIs;
+
+ //! hold information if suspend/standby/pm actions are supported and allowed
+ /*!
+ * This dictionary contains information about the available pm capabilities and
+ * the related interfaces in HAL.
+ */
+ SuspendStates suspend_states;
+
+ QTime calledSuspend;
+
+ //! hold the list of pointers to all relevant batteries
+ QPtrList<Battery> BatteryList;
+ //! hold the information about all primary batteries
+ BatteryCollection *primaryBatteries;
+
+ //! hold the name of the CPU Freq governor from the last check
+ QString cpuFreqGovernor;
+
+ //! hold the ConsoleKit name/path of the actual session
+ QString consoleKitSession;
+
+ //! enum with the currently active CPU Freq policy
+ /*! This enum contains the enum with the currently set CPU Freq Policy. */
+ cpufreq_type currentCPUFreqPolicy;
+
+ //! the state of the ac adapter
+ /*!
+ * This boolean represent information about the AC adapter state.
+ * \li true: if AC adapter is present
+ * \li false: it AC adapter is not present
+ */
+ bool acadapter;
+ //! the state of the lidclose button
+ /*!
+ * This boolean represent information about the Lid button state.
+ * \li true: if lid is closed
+ * \li false: else
+ */
+ bool lidclose;
+ //! if the machine support APM
+ /*!
+ * This boolean represent information if the machine support APM or not.
+ * \li true: if APM supported
+ * \li false: else
+ */
+ bool has_APM;
+ //! if the machine support ACPI
+ /*!
+ * This boolean represent information if the machine support ACPI or not.
+ * \li true: if ACPI supported
+ * \li false: else
+ */
+ bool has_ACPI;
+ //! if the machine support PMU (ppc power management)
+ /*!
+ * This boolean represent information if the machine support PMU or not.
+ * \li true: if PMU supported
+ * \li false: else
+ */
+ bool has_PMU;
+ //! if the machine support change CPU Freq via HAL interface
+ /*!
+ * This boolean represent information if the machine support change the
+ * CPU freqency via HAL.
+ * \li true: if supported
+ * \li false: else
+ */
+ bool cpuFreq;
+ //! if the machine support change *SchedPowerSavings methodes via HAL interface
+ /*!
+ * This boolean represent information if the machine support change the
+ * SchedPowerSavings methodes via HAL.
+ * \li true: if supported
+ * \li false: else
+ */
+ bool schedPowerSavings;
+ //! if the machine support change brightness
+ /*!
+ * This boolean represent information if the machine support brightness changes.
+ * \li true: if supported
+ * \li false: else
+ */
+ bool brightness;
+ //! if brightness get controled via keyevents in hardware
+ /*!
+ * This boolean represent information if the machine handle brightness button
+ * and keyevents in hardware. If so KPowersave should ignore key events.
+ * \li true: if handled in hardware
+ * \li false: else
+ */
+ bool brightness_in_hardware;
+ //! if the machine is a laptop
+ /*!
+ * This boolean represent information if the machine is a laptop.
+ * \li true: if the machine is a laptop
+ * \li false: else
+ */
+ bool laptop;
+
+ //! if the current desktop session is active
+ /*!
+ * This boolean represent information if the current desktop session in
+ * Which KPowersave runs is marked in ConsoleKit as active or not.
+ * \li true: if active
+ * \li false: else
+ */
+ bool sessionIsActive;
+
+ //! if the current user can use the CPU Freq interface
+ /*!
+ * This integer tell if the current user is allowed to change the
+ * CPU Frequency policy via the HAL interface
+ * \li 1: if allowed
+ * \li 0: if not allowed
+ * \li -1: if unknown (e.g. there is no policy/PolicyKit)
+ */
+ int cpuFreqAllowed;
+ //! if the current user can use the brightness interface
+ /*!
+ * This integer tell if the current user is allowed to change the
+ * brightness via the HAL interface
+ * \li 1: if allowed
+ * \li 0: if not allowed
+ * \li -1: if unknown (e.g. there is no policy/PolicyKit)
+ */
+ int brightnessAllowed;
+
+
+ //! Integer with the number of current brightness
+ /*! This contains the current brighness level. */
+ int currentBrightnessLevel;
+ //! Integer with the number of availabl brightness level
+ /*! This contains the number of available brightness levels for internal usage. */
+ int availableBrightnessLevels;
+
+ //! interger with the current warning level
+ int primaryBatteriesWarnLevel;
+ //! interger with the current low level
+ int primaryBatteriesLowLevel;
+ //! interger with the current critical level
+ int primaryBatteriesCriticalLevel;
+
+ // --> functions
+ //! check if the machine support ACPI/APM/PMU or not
+ void checkPowermanagement();
+ //! check the possible suspend/standby states
+ void checkSuspend();
+ //! check if the machine support change CPU Freq via HAL
+ void checkCPUFreq();
+ //! check the current brightness level
+ void checkCurrentBrightness();
+ //! check if the machine is a laptop
+ void checkIsLaptop();
+
+ //! initalise all hardware information
+ bool intialiseHWInfo();
+ //! reinit all hardware information
+ bool reinitHardwareInfos();
+ //! to check the current ConsoleKit session
+ bool checkConsoleKitSession();
+ //! to check if we should handle a device
+ bool checkIfHandleDevice ( QString _udi, int *type );
+ //! to set the CPUFreq governor
+ bool setCPUFreqGovernor( const char *governor );
+ //! to get the state of SchedPowerSave setting of kernel/HAL
+ bool getSchedPowerSavings();
+ //! to set the state of SchedPowerSave setting of kernel/HAL
+ bool setSchedPowerSavings( bool enable );
+
+ //! find and update a battery information
+ void updateBatteryValues (QString udi, QString property);
+
+private slots:
+
+ //! to fetch events from D-Bus and handle them
+ void processMessage (msg_type type, QString message, QString value);
+ //! to update \ref primaryBatteries
+ void updatePrimaryBatteries ();
+ //! to set \ref update_info_primBattery_changed
+ void setPrimaryBatteriesChanges ();
+ //! check the state of the lidclose button
+ void checkLidcloseState();
+ //! check the state of the AC adapter
+ void checkACAdapterState();
+ //! check if brightness change is possible
+ void checkBrightness();
+
+ //! SLOT to handle the reconnect to D-Bus
+ void reconnectDBUS();
+
+ //! SLOT to forward signal about changed battery warning state
+ void emitBatteryWARNState (int type, int state);
+
+ //! SLOT to handle resume and forward a signal for resume
+ void handleResumeSignal (int result);
+
+ //! to emit signal for power button
+ void emitPowerButtonPressed();
+ //! to emit signal for sleep button
+ void emitSleepButtonPressed();
+ //! to emit signal for s2disk button
+ void emitS2diskButtonPressed();
+ //! to emit signal for session state
+ void emitSessionActiveState();
+
+ //! to handle signal for brightness Up buttons/keys
+ void brightnessUpPressed();
+ //! to handle signal for brightness Down buttons/keys
+ void brightnessDownPressed();
+
+signals:
+ //! signal for larger data changes
+ void generalDataChanged();
+ //! emited if the CPU Freq Policy changed
+ void currentCPUFreqPolicyChanged();
+
+ //! signal the AC adapter
+ void ACStatus( bool );
+ //! signal for the lidclose button
+ void lidcloseStatus ( bool );
+ //! signal for pressed the power button
+ void powerButtonPressed ();
+ //! signal for pressed sleep (suspend2ram) button
+ void sleepButtonPressed ();
+ //! signal for pressed the suspend2disk (hibernate) button
+ void s2diskButtonPressed ();
+
+ // battery related signals
+ //! signal if the primary battery collection changed
+ void primaryBatteryChanged();
+ //! signal to inform about reaching a warning state
+ void batteryWARNState(int type, int state);
+
+ // Error signals
+ //! signal if the HAL daemon terminate and restart
+ void halRunning( bool );
+ //! signal if the D-Bus daemon terminate and restart
+ void dbusRunning( int );
+
+ //! signal if the IsActive state of
+ void desktopSessionIsActive (bool);
+
+ //! signal if we are back from resume
+ void resumed ( int success );
+
+public:
+
+ // update related info --> need to be reset if the data was read
+ //! tells if the CPUFreq Policy changed
+ /*!
+ * This boolean represent information about CPUFreq Policy changes.
+ * \li true: if something changed
+ * \li false: if nothing changed (or this is reset to false if the message was consumed)
+ */
+ bool update_info_cpufreq_policy_changed;
+ //! tells if the AC status changed
+ /*!
+ * This boolean represent information about AC status changes.
+ * \li true: if something changed
+ * \li false: if nothing changed (or this is reset to false if the message was consumed)
+ */
+ bool update_info_ac_changed;
+ //! tells if the primary battery collection changed some values
+ /*!
+ * This boolean represent information about primary battery changes.
+ * \li true: if something changed
+ * \li false: if nothing changed (or this is reset to false if the message was consumed)
+ */
+ bool update_info_primBattery_changed;
+
+ //! boolean which tell us if the D-Bus daemon was terminated
+ /*!
+ * This boolean contains information if the D-Bus daemon terminated and
+ * we recieved "dbus.terminate"
+ * \li true: If D-Bus terminated
+ * \li false: If D-Bus not terminated
+ */
+ bool dbus_terminated;
+ //! boolean which tell us if the HAL daemon was terminated
+ /*!
+ * This boolean contains information if the HAL daemon terminated and
+ * we recieved "hal.terminate"
+ * \li true: If HAL terminated
+ * \li false: If HAL not terminated
+ */
+ bool hal_terminated;
+
+ // --> functions
+ //! default constructor
+ HardwareInfo();
+ //! default destructor
+ ~HardwareInfo();
+
+ // to get private members
+ //! get info about support of suspend/standby
+ SuspendStates getSuspendSupport() const;
+ //! get a pointer to the primary batteries
+ BatteryCollection* getPrimaryBatteries() const;
+ //! get all batteries
+ QPtrList<Battery> getAllBatteries() const;
+
+ //! check the currently set CPU Frequency Policy
+ cpufreq_type checkCurrentCPUFreqPolicy();
+
+ //! get max brightness level
+ int getMaxBrightnessLevel() const;
+ //! get current brightness level
+ int getCurrentBrightnessLevel() const;
+ //! get currently CPU Frequency Policy
+ int getCurrentCPUFreqPolicy() const;
+ //! if the user is allowed to change CPU Freq PolicyKit
+ int isCpuFreqAllowed ();
+
+ //! if org.freedesktop.Policy.Power has a owner
+ bool isPolicyPowerIfaceOwned();
+
+ //! get state of the AC adapter
+ bool getAcAdapter() const;
+ //! get the state of the lid button
+ bool getLidclose() const;
+ //! check if the machine is a latop
+ bool isLaptop() const;
+ //! check if there is a connection to D-Bus _and_ HAL
+ bool isOnline() const;
+ //! check if the machine support ACPI
+ bool hasACPI() const;
+ //! check if the machine support APM
+ bool hasAPM() const;
+ //! check if the machine support PMU
+ bool hasPMU() const;
+ //! check if the machine support change the CPU frequency
+ bool supportCPUFreq() const;
+ //! check if the machine support brightness changes
+ bool supportBrightness() const;
+ //! check if the current session is active
+ bool currentSessionIsActive() const;
+
+ // --> functions to call a HAL interface and trigger an action
+ //! execute/trigger a suspend via the HAL interface
+ bool suspend ( suspend_type suspend );
+ //! set the brightness via HAL interface
+ bool setBrightness ( int level, int percent = -1);
+ //! to set the brightness down
+ bool setBrightnessDown(int percentageStep = -1);
+ //! to set the brightness up
+ bool setBrightnessUp(int percentageStep = -1);
+ //! set the CPU frequency policy/speed
+ bool setCPUFreq ( cpufreq_type cpufreq, int limit = 51 );
+ //! call SetPowerSave method on HAL.
+ bool setPowerSave( bool on );
+
+ //! function to set warning states for the primary battery collection
+ void setPrimaryBatteriesWarningLevel (int _warn = -1, int _low = -1, int _crit = -1 );
+};
+
+#endif