diff options
Diffstat (limited to 'src/dbusHAL.h')
-rw-r--r-- | src/dbusHAL.h | 214 |
1 files changed, 214 insertions, 0 deletions
diff --git a/src/dbusHAL.h b/src/dbusHAL.h new file mode 100644 index 0000000..9346f0a --- /dev/null +++ b/src/dbusHAL.h @@ -0,0 +1,214 @@ + /************************************************************************** + * 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 dbusHAL.h +* \brief Headerfile for dbusHAL.cpp and the class \ref dbusHAL. +*/ +/*! +* \class dbusHAL +* \brief class for connection to HAL via D-Bus +* \author Danny Kukawka, <dkukawka@suse.de>, <danny.kukawka@web.de> +* \date 2006-2007 +*/ + +#ifndef _DBUSHAL_H_ +#define _DBUSHAL_H_ + +#ifndef DBUS_API_SUBJECT_TO_CHANGE +#define DBUS_API_SUBJECT_TO_CHANGE +#endif + +// Global Header +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +// QT - Header +#include <qstring.h> + +// D-Bus Header +#include <dbus/dbus.h> // needed for dbus_bool_t +#include <dbus/message.h> +#include <dbus/connection.h> + +// HAL Library +#include <hal/libhal.h> + +// kpowersave - Header +#include "kpowersave_debug.h" + +#define HAL_SERVICE "org.freedesktop.Hal" +#define HAL_PM_IFACE "org.freedesktop.Hal.Device.SystemPowerManagement" +#define HAL_LPANEL_IFACE "org.freedesktop.Hal.Device.LaptopPanel" +#define HAL_CPUFREQ_IFACE "org.freedesktop.Hal.Device.CPUFreq" +#define HAL_COMPUTER_UDI "/org/freedesktop/Hal/devices/computer" +#define CK_SERVICE "org.freedesktop.ConsoleKit" +#define CK_MANAGER_IFACE "org.freedesktop.ConsoleKit.Manager" +#define CK_MANAGER_OBJECT "/org/freedesktop/ConsoleKit/Manager" +#define CK_SESSION_IFACE "org.freedesktop.ConsoleKit.Session" + +enum msg_type { + ACPI_EVENT, + DBUS_EVENT, + HAL_DEVICE, + HAL_PROPERTY_CHANGED, + HAL_CONDITION, + CONSOLEKIT_SESSION_ACTIVE, + POLICY_POWER_OWNER_CHANGED +}; + +class dbusHAL : public QObject{ + Q_OBJECT + +private: + + //! QT connection to D-Bus + DBusQt::Connection* m_dBusQtConnection; + //! real connection to D-Bus + DBusConnection *dbus_connection; + //! HAL context + LibHalContext *hal_ctx; + + //! to store information if KPowersave is connected to D-Bus + /*! + * This boolean represent information about the state of the connection to D-Bus + * \li true: if connected + * \li false: if disconnected + */ + bool dbus_is_connected; + //! to store information if KPowersave is connected to HAL + /*! + * This boolean represent information about the state of the connection to HAL + * \li true: if connected + * \li false: if disconnected + */ + bool hal_is_connected; + + //! if we could claim the org.freedesktop.Policy.Power interface + /*! + * This boolean represent information if KPowersave could claim the + * org.freedesktop.Policy.Power interface from the D-Bus + * \li true: if aquired + * \li false: if not + */ + bool aquiredPolicyPower; + + /* D-Bus helper functions */ + //! to initialise the connection to D-Bus + bool initDBUS(); + //! to call a methode on a dbus interface with reply + bool dbusMethodCall( QString interface, QString path, QString object, QString method, + DBusBusType dbus_type, void *retvalue, int retval_type, + int first_arg_type, va_list var_args); + + //! function to be called back by DBusPendingCall::dbus_pending_call_set_notify() + static void callBackSuspend (DBusPendingCall* pcall, void* /*data*/); + + /* HAL helper functions */ + //! to initialise the connection to HAL + bool initHAL(); + //! to free the HAL context + void freeHAL(); + +public: + + //! default constructor + dbusHAL(); + //! default destructor + ~dbusHAL(); + + //! to reconnect to D-Bus and HAL + bool reconnect(); + //! to reconnect only HAL + bool reconnectHAL(); + //! to close the connection to D-Bus and HAL + bool close(); + + //! to aquire the org.freedesktop.Policy.Power interface + bool aquirePolicyPowerIface(); + //! to release the org.freedesktop.Policy.Power interface + bool releasePolicyPowerIface(); + //! to check if the org.freedesktop.Policy.Power interface has an owner + bool isPolicyPowerIfaceOwned(); + + // --- helper to get private members of the class --- // + //! to get information if KPowersave is connected to D-Bus + bool isConnectedToDBUS(); + //! to get information if KPowersave is connected to HAL + bool isConnectedToHAL(); + //! to get info about claim org.freedesktop.Policy.Power interface + bool aquiredPolicyPowerInterface(); + + //! return the current HAL context + LibHalContext *get_HAL_context(); + //! return the current DBus connection + DBusConnection *get_DBUS_connection(); + + /* HAL device information stuff */ + //! Query a integer device property from HAL + bool halGetPropertyInt(QString udi, QString property, int *returnval); + //! Query a bolean device property from HAL + bool halGetPropertyBool(QString udi, QString property, bool *returnval); + //! Query a string device property from HAL + bool halGetPropertyString(QString udi, QString property, QString *returnval); + //! Query a string list device property from HAL + bool halGetPropertyStringList (QString udi, QString property, QStringList *devices); + //! Query a capability for a HAL device + bool halQueryCapability(QString udi, QString capability, bool *returnval); + + /* functions to find devices and check stuff */ + //! check if a property exist on a device + bool halDevicePropertyExist(QString udi, QString property); + //! to find a device by capability + bool halFindDeviceByCapability (QString capability, QStringList *devices); + //! to find a device by a string property + bool halFindDeviceByString (QString property, QString keyval, QStringList *devices); + + /* D-Bus helper functions */ + + /* functions to call methodes */ + //! to call a methode on a dbus system bus method without reply + bool dbusSystemMethodCall( QString interface, QString path, QString object, QString method, + int first_arg_type, ... ); + //! to call a methode on a dbus system bus method with reply + bool dbusSystemMethodCall( QString interface, QString path, QString object, QString method, + void *retvalue, int retval_type, int first_arg_type, ... ); + + //! to call a suspend method on HAL + bool dbusMethodCallSuspend ( const char *suspend ); + + /* PolicyKit call helper */ + //! check if the user has a requested privilege + int isUserPrivileged( QString privilege, QString udi, QString ressource = "", QString user = QString()); + + //! wrapper to emit a signal with a event from HAL + void emitMsgReceived( msg_type type, QString message, QString string ); + +signals: + //! signal with message to forward from D-Bus to HAL + void msgReceived_withStringString( msg_type, QString, QString ); + //! signal if we resumed! + void backFromSuspend( int result ); +}; + +//! filter function to filter out needed information from D-Bus messages +DBusHandlerResult filterFunction (DBusConnection *connection, DBusMessage *message, void *data); + +#endif |