diff options
Diffstat (limited to 'src/hardware_battery.h')
-rw-r--r-- | src/hardware_battery.h | 341 |
1 files changed, 341 insertions, 0 deletions
diff --git a/src/hardware_battery.h b/src/hardware_battery.h new file mode 100644 index 0000000..99a0bc0 --- /dev/null +++ b/src/hardware_battery.h @@ -0,0 +1,341 @@ + /************************************************************************** + * 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_battery.h +* \brief Headerfile for hardware_battery.cpp and the class \ref Battery. +*/ +/*! +* \class Battery +* \brief class for Battery related funtionality +* \author Danny Kukawka, <dkukawka@suse.de>, <danny.kukawka@web.de> +* \date 2006-2007 +*/ + +#ifndef _BATTERY_H_ +#define _BATTERY_H_ + +// Global Header +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +// QT - Header +#include <qstring.h> +#include <qstringlist.h> +#include <qobject.h> + +#include "dbusHAL.h" + +class Battery : public QObject { + + Q_OBJECT + +private: + //! Internal reference to dbusHAL for communication with HAL daemon + dbusHAL* dbus_HAL; + + //! HAL udi of the battery to represent + /*! + * This QString holds the HAL udi adress of the battery. + * \li empty: all primary batteries are represented + * \li e.g. "/org/freedesktop/Hal/devices/acpi_BAT0": first acpi battery + */ + QString udi; + + //! Technologyname of the battery + /*! + * Tells the type of technologyname the battery is working with. + * \li e.g. "LION" + */ + QString technology; + //! Current charging state of this battery as reported by HAL + /*! + * This QString tells the current capacity_state HAL is reporting. + * \li as of current HAL spec: "ok", "critical" + */ + QString capacity_state; + //! Unit of charge_level_unit and charge_level_lastfull. + /*! This QString tells the physical unit the values of charge_level_unit. */ + QString charge_level_unit; + //! Serialnumber of the the battery + /*! Identifies the currently installed battery uniquely. */ + QString serial; + + //! Boolean which tells if the battery is initalized first time + /*! + * When the battery (represented by the object) is intialised the first time + * (via recheck() or init()) this value is true. + * \li true: if battery object is now intialised + * \li false: if not + */ + bool initialized; + //! Boolean which tells if the battery is present/connected + /*! + * When the battery (represented by the object) is available this is true. + * \li true: battery is available + * \li false: battery is disconnected/not available + */ + bool present; + + //! Roletype of battery + /*! + * This int/enum tells what role this battery is used as. + * \li BAT_PRIMARY: Std. battery for normal system operation + * \li BAT_MOUSE: powersupply for wireless mouse + * \li BAT_KEYBOARD: powersupply in wireless keyboards + * \li BAT_KEY_MOUSE: powersupply in combined keyboard+mouse gadgets + * \li BAT_UPS: Battery in UPS systems (step in on outage of mains) + * \li BAT_CAMERA: battery is contained in a connected digital camera + * \li UNKNOWN: Batterytype/role isn't known + */ + int type; + //! Current general state this battery is in + /*! + * This int/enum tells what rough state the battery is currently in. + * \li BAT_NORM: batterylevel is ok + * \li BAT_WARN: battery is soon getting low + * \li BAT_LOW: batterylevel is already low + * \li BAT_CRIT: batterylevel has become really critical + * \li BAT_NONE: battery state not available + * \li BAT_HAL_ERROR: battery state couldn't be retrieved because of a HAL error + */ + int state; + //! Current charging state of this battery + /*! + * This int/enum tells if the battery is charged or discharged. + * \li CHARGING: battery gets charged + * \li DISCHARGING: battery get discharged + * \li UNKNOWN_STATE: battery is neither charged nor discharged + */ + int charging_state; + //! Current level the battery is charged to + /*! + * This int tells (in physical units of Battery::charge_level_unit) + * at what charging level the battery is currently at + * \li a value >= 0 + */ + int charge_level_current; + //! Charging level of battery it could hold when fully charged + /*! + * This int tells (in physical units of Battery::charge_level_unit) the + * maximum charginglevel of the battery on its last fullcharge. + * \li a value >=0 + */ + int charge_level_lastfull; + //! Current charge level of battery in percentage + /*! + * This int tells the current charge level of the battery in percent. + * \li a value between 0 and 100 + */ + int charge_level_percentage; + //! The maximum capacity by design of the battery. + /*! + * This int tells (in physical units of Battery::charge_level_unit) + * the maximum capacity this battery was designed for by its vendor. + * \li a value > 0 + */ + int design_capacity; + //! Current charging/discharging rate + /*! + * This int tells (in physical units of Battery::charge_level_unit per + * second) the currently reported charging/discharging rate. + * \li a value >= 0 + */ + int present_rate; + //! Expected minutes unitl fully discharged/charged + /*! + * This int tells the current estimate until the battery is fully + * discharged/charged (with current discharging/charging-rate and last + * full capacity). + * \li a value >= 0 + */ + int remaining_minutes; + + //! charge_level in percent that will put battery into warning state + int warn_level; + //! charge_level in percent that will put battery into low state + int low_level; + //! charge_level in percent that will put battery into critical state + int crit_level; + + // private functions + //! function to set initial values for a battery + void initDefault(); + + //! to check battery.present + bool checkBatteryPresent(); + //! to check battery.type + bool checkBatteryType(); + //! to check battery.technology + bool checkBatteryTechnology(); + //! to check battery.charge_level.capacity_state + bool checkCapacityState(); + //! to check battery.charge_level.current + bool checkChargeLevelCurrent(); + //! to check battery.charge_level.last_full + bool checkChargeLevelLastfull(); + //! to check battery.charge_level.rate + bool checkChargeLevelRate(); + //! to check battery.charge_level.unit + bool checkChargeLevelUnit(); + //! to check battery.charge_level.design + bool checkChargeLevelDesign(); + //! to check battery.charge_level.percentage + bool checkRemainingPercentage(); + //! to check battery.remaining_time + bool checkRemainingTime(); + //! to check battery.rechargeable.is_* + bool checkChargingState(); + +signals: + //! emitted if the remaining percentage changed + void changedBatteryPercentage(); + //! emitted if the remaining time changed + void changedBatteryTime(); + //! emitted if the the present state changed + void changedBatteryPresent(); + //! emitted if the charging state changed + void changedBatteryChargingState(); + //! emitted if the battery state changed + void changedBatteryState(); + //! emitted if the Battery warning state changed + void changedBatteryWarnState (int state); + //! emitted if any Battery state changed + void changedBattery(); + +public: + + //! default constructor + Battery( dbusHAL* _dbus_HAL, QString _udi ); + //! default constructor + Battery( dbusHAL* _dbus_HAL ); + //! this constructor forces the use of init with dbuHAL pointer set! + Battery(); + //! default destructor + ~Battery(); + + //! initialize this battery object with values from HAL + void init( dbusHAL* _dbus_HAL = NULL ); + //! recheck all properties of the battery + void recheck(); + //! rechecks only minimalistic set properties + void minRecheck(); + //! update a property on HAL event + bool updateProperty(QString _udi, QString _property); + + //ro-Interface to internal data + //! reports the HAL udi of this battery + QString getUdi() const; + //! reports HAL capacity_state value + QString getCapacityState() const; + //! reports the physical unit of values like DesignCapacity, PresentRate and Lastfull + QString getChargelevelUnit() const; + //! gives the name of this battery technology + QString getTechnology() const; + + //! get availability of this battery + bool isPresent(); + + //! reports the battery type + int getType() const; + //! tells the current batterystate as enum BAT_STATE_ + int getState() const; + //! estimates the remaining minutes until fully charged/discharged + int getRemainingMinutes() const; + //! current charging/discharging rate + int getPresentRate() const; + //! maximum capacity of this battery by design + int getDesignCapacity() const; + //! current charging state as enum BAT_CHARG_STATE + int getChargingState() const; + //! reports current chargelevel in percentage + int getPercentage() const; + //! reports last full capacity of this battery when fully charged + int getLastfull() const; + //! reports current chargelevel in units reported by getChargelevelUnit() + int getCurrentLevel() const; + + //! reports the chargelevel in percent when battery goes to state warning + int getWarnLevel() const; + //! reports the chargelevel in percent when battery goes to state low + int getLowLevel() const; + //! reports the chargelevel in percent when battery goes to state critical + int getCritLevel() const; + + //writeable access to internals + //! Resets the current HAL udi used by the one given + /*! + * The given QString will be (checked and) used as new HAL udi for the battery. + * But don't forget to do a recheck of the battery afterwards. + * \li returns TRUE: if reset was successfull + * \li returns FALSE: if reset couldn't be applied + */ + bool resetUdi(QString); + + //! sets the chargelevel in percent when battery should go into state warning + void setWarnLevel(int _warn_level); + //! sets the chargelevel in percent when battery should go into state low + void setLowLevel(int _low_level); + //! sets the chargelevel in percent when battery should go into state critical + void setCritLevel(int _crit_level); + + //some convenience methods + //! check if the battery is currently charged + bool isCharging(); + //! check if the battery gets currently discharged + bool isDischarging(); + //! check it this is a primary battery + bool isPrimary() const; + //! check if the battery state is ok/normal + bool isOk(); + //! check if the battery is in warning level/state + bool isWarning(); + //! check if the battery is in a low chargingstate + bool isLow(); + //! check if the battery level is critical + bool isCritical(); +}; + + +enum BAT_TYPE { + BAT_PRIMARY, + BAT_MOUSE, + BAT_KEYBOARD, + BAT_KEY_MOUSE, + BAT_UPS, + BAT_CAMERA, + BAT_UNKNOWN +}; +enum BAT_CHARG_STATE { + CHARGING, + DISCHARGING, + UNKNOWN_STATE +}; +enum BAT_STATE { + BAT_NONE, + BAT_WARN, + BAT_LOW, + BAT_CRIT, + BAT_NORM, + BAT_HAL_ERROR +}; + +#endif |