Signed-off-by: Emanoil Kotsev <deloptes@gmail.com>feat/new_hwcontrol
parent
b02c573742
commit
b0364451f7
@ -0,0 +1,72 @@
|
|||||||
|
/*
|
||||||
|
* BrightnessService.cpp
|
||||||
|
*
|
||||||
|
* Created on: Feb 1, 2021
|
||||||
|
* Author: emanoil
|
||||||
|
*
|
||||||
|
* hardwarecontrol Copyright (C) 2021 trinity desktop development team
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2
|
||||||
|
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
#include <tqregexp.h>
|
||||||
|
|
||||||
|
#include "BrightnessService.h"
|
||||||
|
|
||||||
|
BrightnessService::BrightnessService(TQT_DBusConnection &conn)
|
||||||
|
: DeviceServiceBase(conn)
|
||||||
|
{
|
||||||
|
// TODO Auto-generated constructor stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
BrightnessService::~BrightnessService()
|
||||||
|
{
|
||||||
|
// TODO Auto-generated destructor stub
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Implement virtual methods
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
bool BrightnessService::CanSetBrightness(const TQString& device, bool& value, TQT_DBusError& error) {
|
||||||
|
|
||||||
|
if (device.find( TQRegExp("^/sys/devices.*/brightness$"),0) == 0 ) {
|
||||||
|
value = canSetDeviceValue(device, error);
|
||||||
|
} else {
|
||||||
|
error = TQT_DBusError::stdInvalidArgs(TQString ("Invalid argument for device: " + device));
|
||||||
|
}
|
||||||
|
if (error.isValid()) {
|
||||||
|
tqDebug(error.message().local8Bit());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool BrightnessService::SetBrightness(const TQString& device, const TQString& brightness, bool& value, TQT_DBusError& error) {
|
||||||
|
|
||||||
|
if (device.find( TQRegExp("^/sys/devices.*/brightness$"),0) == 0) {
|
||||||
|
value = setDeviceValue(device, brightness, error);
|
||||||
|
} else {
|
||||||
|
error = TQT_DBusError::stdInvalidArgs(TQString ("Invalid argument for device: " + device));
|
||||||
|
}
|
||||||
|
if (error.isValid()) {
|
||||||
|
tqDebug(error.message().local8Bit());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void BrightnessService::handleMethodReply(const TQT_DBusMessage& reply) {
|
||||||
|
m_connection->send(reply);
|
||||||
|
}
|
@ -0,0 +1,49 @@
|
|||||||
|
/*
|
||||||
|
* BrightnessService.h
|
||||||
|
*
|
||||||
|
* Created on: Feb 1, 2021
|
||||||
|
* Author: emanoil
|
||||||
|
*
|
||||||
|
* hardwarecontrol Copyright (C) 2021 trinity desktop development team
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2
|
||||||
|
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
#ifndef BRIGHTNESSSERVICE_H_
|
||||||
|
#define BRIGHTNESSSERVICE_H_
|
||||||
|
|
||||||
|
#include <tqdbusconnection.h>
|
||||||
|
|
||||||
|
#include "interfaces/brightnessInterface.h"
|
||||||
|
#include "DeviceServiceBase.h"
|
||||||
|
|
||||||
|
class BrightnessService: public org::trinitydesktop::hardwarecontrol::BrightnessInterface,
|
||||||
|
public DeviceServiceBase
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
BrightnessService(TQT_DBusConnection&);
|
||||||
|
virtual ~BrightnessService();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual bool CanSetBrightness(const TQString& device, bool& value, TQT_DBusError& error);
|
||||||
|
|
||||||
|
virtual bool SetBrightness(const TQString& device, const TQString& brightness, bool& value, TQT_DBusError& error);
|
||||||
|
|
||||||
|
protected: // implement sending replies
|
||||||
|
void handleMethodReply(const TQT_DBusMessage& reply);
|
||||||
|
//
|
||||||
|
// virtual void BrightnessServiceAsync(int asyncCallId, const TQT_DBusObjectPath& device, const TQString& uuid);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* BRIGHTNESSSERVICE_H_ */
|
@ -0,0 +1,74 @@
|
|||||||
|
#################################################
|
||||||
|
#
|
||||||
|
# (C) 2020 Emanoil Kotsev
|
||||||
|
# deloptes (AT) gmail.com
|
||||||
|
#
|
||||||
|
# Improvements and feedback are welcome
|
||||||
|
#
|
||||||
|
# This file is released under GPL >= 3
|
||||||
|
#
|
||||||
|
#################################################
|
||||||
|
|
||||||
|
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TQT_CXX_FLAGS}" )
|
||||||
|
set( CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined" )
|
||||||
|
#-Wl,--whole-archive
|
||||||
|
set( CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--no-undefined" )
|
||||||
|
|
||||||
|
##### configure checks ##########################
|
||||||
|
if( NOT DBUS_SYS_DIR )
|
||||||
|
set( DBUS_SYS_DIR ${SYSCONF_INSTALL_DIR}/dbus-1/system.d )
|
||||||
|
endif( )
|
||||||
|
|
||||||
|
|
||||||
|
if( WITH_GCC_VISIBILITY )
|
||||||
|
if( NOT UNIX )
|
||||||
|
tde_message_fatal(FATAL_ERROR "\ngcc visibility support was requested, but your system is not *NIX" )
|
||||||
|
endif( NOT UNIX )
|
||||||
|
set( __KDE_HAVE_GCC_VISIBILITY 1 )
|
||||||
|
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden -fvisibility-inlines-hidden")
|
||||||
|
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -fvisibility-inlines-hidden")
|
||||||
|
endif( )
|
||||||
|
|
||||||
|
add_definitions(
|
||||||
|
# -DQT_THREAD_SUPPORT
|
||||||
|
${TQT_CFLAGS_OTHER}
|
||||||
|
)
|
||||||
|
|
||||||
|
add_subdirectory( interfaces )
|
||||||
|
|
||||||
|
include_directories(
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}
|
||||||
|
${CMAKE_SOURCE_DIR}
|
||||||
|
${CMAKE_BINARY_DIR}
|
||||||
|
${CMAKE_BINARY_DIR}/interfaces
|
||||||
|
${TDE_INCLUDE_DIR}
|
||||||
|
${TQT_INCLUDE_DIRS}
|
||||||
|
${DBUS_TQT_INCLUDE_DIRS}
|
||||||
|
)
|
||||||
|
|
||||||
|
link_directories(
|
||||||
|
${TQT_LIBRARY_DIRS}
|
||||||
|
${TDE_LIB_DIR}
|
||||||
|
)
|
||||||
|
|
||||||
|
##### tde_dbus_hardwarecontrol ##################
|
||||||
|
tde_add_executable( tde_dbus_hardwarecontrol AUTOMOC
|
||||||
|
SOURCES HardwareControl.cpp main.cpp hardwarecontrolService.cpp
|
||||||
|
BrightnessService.cpp CPUGovernorService.cpp DeviceServiceBase.cpp
|
||||||
|
InputEventsService.cpp PowerService.cpp PropertiesService.cpp
|
||||||
|
LINK ${DBUS_TQT_LIBRARIES} hwcontrolinterfaces-static tdecore-shared
|
||||||
|
DESTINATION ${BIN_INSTALL_DIR}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
##### other data ################################
|
||||||
|
|
||||||
|
configure_file( org.trinitydesktop.hardwarecontrol.service.cmake org.trinitydesktop.hardwarecontrol.service @ONLY )
|
||||||
|
|
||||||
|
install( FILES
|
||||||
|
org.trinitydesktop.hardwarecontrol.conf
|
||||||
|
DESTINATION ${DBUS_SYSTEM_CONF_DIRECTORY} )
|
||||||
|
|
||||||
|
install( FILES
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/org.trinitydesktop.hardwarecontrol.service
|
||||||
|
DESTINATION ${DBUS_SERVICE_DIRECTORY} )
|
@ -0,0 +1,73 @@
|
|||||||
|
/*
|
||||||
|
* CPUGovernorService.cpp
|
||||||
|
*
|
||||||
|
* Created on: Feb 1, 2021
|
||||||
|
* Author: emanoil
|
||||||
|
*
|
||||||
|
* hardwarecontrol Copyright (C) 2021 trinity desktop development team
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2
|
||||||
|
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
#include "CPUGovernorService.h"
|
||||||
|
|
||||||
|
CPUGovernorService::CPUGovernorService(TQT_DBusConnection &conn)
|
||||||
|
: DeviceServiceBase(conn)
|
||||||
|
{
|
||||||
|
// TODO Auto-generated constructor stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
CPUGovernorService::~CPUGovernorService()
|
||||||
|
{
|
||||||
|
// TODO Auto-generated destructor stub
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Implement virtual methods
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
bool CPUGovernorService::CanSetCPUGovernor(TQ_INT32 cpu, bool& value, TQT_DBusError& error) {
|
||||||
|
// do something
|
||||||
|
TQString dev = TQString("/sys/devices/system/cpu/cpu%1/cpufreq/scaling_governor").arg(cpu);
|
||||||
|
if ((cpu>-1)) {
|
||||||
|
value = canSetDeviceValue(dev, error);
|
||||||
|
} else {
|
||||||
|
error = TQT_DBusError::stdInvalidArgs(TQString ("Invalid argument cpu: %1, governor: %2").arg(cpu).arg(dev));
|
||||||
|
}
|
||||||
|
if (error.isValid()) {
|
||||||
|
tqDebug(error.message().local8Bit());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPUGovernorService::SetCPUGovernor(TQ_INT32 cpu, const TQString& governor, bool& value, TQT_DBusError& error) {
|
||||||
|
|
||||||
|
TQString dev = TQString("/sys/devices/system/cpu/cpu%1/cpufreq/scaling_governor").arg(cpu);
|
||||||
|
if ((cpu>-1) && !governor.isEmpty()) {
|
||||||
|
value = setDeviceValue(dev, governor, error);
|
||||||
|
} else {
|
||||||
|
error = TQT_DBusError::stdInvalidArgs(TQString ("Invalid argument cpu: %1, governor: %2").arg(cpu).arg(governor));
|
||||||
|
}
|
||||||
|
if (error.isValid()) {
|
||||||
|
tqDebug(error.message().local8Bit());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPUGovernorService::handleMethodReply(const TQT_DBusMessage& reply) {
|
||||||
|
m_connection->send(reply);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* CPUGovernorService.h
|
||||||
|
*
|
||||||
|
* Created on: Feb 1, 2021
|
||||||
|
* Author: emanoil
|
||||||
|
*
|
||||||
|
* hardwarecontrol Copyright (C) 2021 trinity desktop development team
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2
|
||||||
|
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
#ifndef CPUGOVERNORSERVICE_H_
|
||||||
|
#define CPUGOVERNORSERVICE_H_
|
||||||
|
|
||||||
|
#include "interfaces/cpugovernorInterface.h"
|
||||||
|
#include "DeviceServiceBase.h"
|
||||||
|
|
||||||
|
class CPUGovernorService: public org::trinitydesktop::hardwarecontrol::CPUGovernorInterface,
|
||||||
|
public DeviceServiceBase
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CPUGovernorService(TQT_DBusConnection&);
|
||||||
|
virtual ~CPUGovernorService();
|
||||||
|
protected:
|
||||||
|
virtual bool CanSetCPUGovernor(TQ_INT32 cpu, bool& value, TQT_DBusError& error) ;
|
||||||
|
|
||||||
|
virtual bool SetCPUGovernor(TQ_INT32 cpu, const TQString& governor, bool& value, TQT_DBusError& error);
|
||||||
|
|
||||||
|
protected: // implement sending replies
|
||||||
|
void handleMethodReply(const TQT_DBusMessage& reply);
|
||||||
|
|
||||||
|
//
|
||||||
|
// virtual void CPUGovernorServiceAsync(int asyncCallId, const TQT_DBusObjectPath& device, const TQString& uuid);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* CPUGOVERNORSERVICE_H_ */
|
@ -0,0 +1,68 @@
|
|||||||
|
/*
|
||||||
|
* DeviceServiceBase.cpp
|
||||||
|
*
|
||||||
|
* Created on: Feb 1, 2021
|
||||||
|
* Author: emanoil
|
||||||
|
*
|
||||||
|
* hardwarecontrol Copyright (C) 2021 trinity desktop development team
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2
|
||||||
|
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <tqfile.h>
|
||||||
|
#include <tqtextstream.h>
|
||||||
|
|
||||||
|
#include <tqdbuserror.h>
|
||||||
|
|
||||||
|
#include "DeviceServiceBase.h"
|
||||||
|
|
||||||
|
DeviceServiceBase::DeviceServiceBase(TQT_DBusConnection &conn)
|
||||||
|
: m_connection(&conn)
|
||||||
|
{
|
||||||
|
// TODO Auto-generated constructor stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
DeviceServiceBase::~DeviceServiceBase()
|
||||||
|
{
|
||||||
|
if (m_connection)
|
||||||
|
delete m_connection;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DeviceServiceBase::canSetDeviceValue(const TQString& device, TQT_DBusError& error) {
|
||||||
|
// check if path is writable
|
||||||
|
int rval = access (device.latin1(), W_OK);
|
||||||
|
if (rval != 0)
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DeviceServiceBase::setDeviceValue(const TQString& device, const TQString& param, TQT_DBusError& error) {
|
||||||
|
// make sure path is writable
|
||||||
|
if (canSetDeviceValue(device, error)) {
|
||||||
|
TQFile file(device);
|
||||||
|
if (!file.open( IO_WriteOnly ) ) {
|
||||||
|
error = TQT_DBusError::stdFailed(TQString ("Could not open device %1").arg(device));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
TQTextStream stream( &file );
|
||||||
|
stream << param;
|
||||||
|
file.close();
|
||||||
|
} else {
|
||||||
|
error = TQT_DBusError::stdFailed(TQString ("Could not access device %1").arg(device));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
@ -0,0 +1,45 @@
|
|||||||
|
/*
|
||||||
|
* DeviceServiceBase.h
|
||||||
|
*
|
||||||
|
* Created on: Feb 1, 2021
|
||||||
|
* Author: emanoil
|
||||||
|
*
|
||||||
|
* hardwarecontrol Copyright (C) 2021 trinity desktop development team
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2
|
||||||
|
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
#ifndef DEVICESERVICEBASE_H_
|
||||||
|
#define DEVICESERVICEBASE_H_
|
||||||
|
|
||||||
|
#include <tqstring.h>
|
||||||
|
#include <tqdbusconnection.h>
|
||||||
|
|
||||||
|
class DeviceServiceBase
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
DeviceServiceBase(TQT_DBusConnection&);
|
||||||
|
virtual ~DeviceServiceBase();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
bool canSetDeviceValue(const TQString& device, TQT_DBusError& error);
|
||||||
|
bool setDeviceValue(const TQString& device, const TQString& param, TQT_DBusError& error);
|
||||||
|
|
||||||
|
protected: // implement sending replies
|
||||||
|
virtual void handleMethodReply(const TQT_DBusMessage& reply) = 0;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
TQT_DBusConnection *m_connection;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* DEVICESERVICEBASE_H_ */
|
@ -0,0 +1,118 @@
|
|||||||
|
/*
|
||||||
|
* HardwareControl.cpp
|
||||||
|
*
|
||||||
|
* Created on: Feb 2, 2021
|
||||||
|
* Author: emanoil
|
||||||
|
*
|
||||||
|
* hardwarecontrol Copyright (C) 2021 trinity desktop development team
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2
|
||||||
|
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <tqtimer.h>
|
||||||
|
#include <tqdbusmessage.h>
|
||||||
|
|
||||||
|
#include "HardwareControl.h"
|
||||||
|
|
||||||
|
#define DBUS_HWCTRL_SERVICE_NAME "org.trinitydesktop.hardwarecontrol"
|
||||||
|
#define DBUS_CONNECTION_TIMEOUT 4000
|
||||||
|
#define DBUS_CONNECTION_RETRY 3
|
||||||
|
|
||||||
|
HardwareControl::HardwareControl(int &argc, char **argv, bool GUIenabled, bool SMenabled) :
|
||||||
|
TQApplication(argc, argv, GUIenabled, SMenabled)
|
||||||
|
{
|
||||||
|
retryCount=0;
|
||||||
|
// init session connection to dbus
|
||||||
|
if (!initDBUS()) {
|
||||||
|
tqDebug("Failed to initialize the connection to DBus");
|
||||||
|
TQTimer::singleShot(DBUS_CONNECTION_TIMEOUT, this, TQT_SLOT(slotReconnect()));
|
||||||
|
retryCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
HardwareControl::~HardwareControl()
|
||||||
|
{
|
||||||
|
// close D-Bus connection
|
||||||
|
close();
|
||||||
|
|
||||||
|
delete hardwarecontrolService;
|
||||||
|
delete trinitydesktopService;
|
||||||
|
delete orgService;
|
||||||
|
delete rootService;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool HardwareControl::initDBUS(){
|
||||||
|
m_connection = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus, DBUS_HWCTRL_SERVICE_NAME);
|
||||||
|
|
||||||
|
if ( !m_connection.isConnected() ) {
|
||||||
|
tqDebug("Failed to open connection to system message bus: "
|
||||||
|
+ m_connection.lastError().message());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// try to get a specific service name
|
||||||
|
if (!m_connection.requestName(DBUS_HWCTRL_SERVICE_NAME, TQT_DBusConnection::NoReplace))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
m_connection.scheduleDispatch();
|
||||||
|
m_connection.connect(this, TQT_SLOT(slotDbusSignal(const TQT_DBusMessage&)));
|
||||||
|
|
||||||
|
TQTimer::singleShot(10, this, TQT_SLOT(slotConnectionCheck()));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void HardwareControl::close() {
|
||||||
|
if(m_connection.isConnected()) {
|
||||||
|
m_connection.disconnect(this, TQT_SLOT(slotDbusSignal(const TQT_DBusMessage&)));
|
||||||
|
m_connection.closeConnection(DBUS_HWCTRL_SERVICE_NAME);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void HardwareControl::slotReconnect() {
|
||||||
|
|
||||||
|
close();
|
||||||
|
|
||||||
|
if (!initDBUS()) {
|
||||||
|
if (DBUS_CONNECTION_RETRY > retryCount) {
|
||||||
|
tqFatal("Failed to initialize the connection to DBus");
|
||||||
|
}
|
||||||
|
TQTimer::singleShot(DBUS_CONNECTION_TIMEOUT, this, TQT_SLOT(slotReconnect()));
|
||||||
|
retryCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void HardwareControl::slotDbusSignal(const TQT_DBusMessage& message) {
|
||||||
|
if (message.interface() != TQString("org.freedesktop.DBus"))
|
||||||
|
return;
|
||||||
|
if (message.member() != TQString("NameAcquired"))
|
||||||
|
return;
|
||||||
|
tqDebug("Name acquired: " + message[0].toString());
|
||||||
|
serviceName = message[0].toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
void HardwareControl::slotConnectionCheck() {
|
||||||
|
|
||||||
|
if (serviceName != DBUS_HWCTRL_SERVICE_NAME) {
|
||||||
|
tqFatal("TDEHW service already running or no unique name possible.");
|
||||||
|
}
|
||||||
|
|
||||||
|
rootService = new RootNodeService(m_connection);
|
||||||
|
orgService = new OrgNodeService(m_connection);
|
||||||
|
trinitydesktopService = new TrinityDesktopNodeService(m_connection);
|
||||||
|
hardwarecontrolService = new HardwareControlNodeService(m_connection);
|
||||||
|
tqDebug("TDEHW service setup done.");
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "HardwareControl.moc"
|
@ -0,0 +1,81 @@
|
|||||||
|
/*
|
||||||
|
* HardwareControl.h
|
||||||
|
*
|
||||||
|
* Created on: Feb 2, 2021
|
||||||
|
* Author: emanoil
|
||||||
|
*
|
||||||
|
* hardwarecontrol Copyright (C) 2021 trinity desktop development team
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2
|
||||||
|
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
#ifndef HARDWARECONTROL_H_
|
||||||
|
#define HARDWARECONTROL_H_
|
||||||
|
|
||||||
|
#include <tqapplication.h>
|
||||||
|
|
||||||
|
#include "hardwarecontrolService.h"
|
||||||
|
|
||||||
|
class HardwareControl: public TQApplication
|
||||||
|
{
|
||||||
|
TQ_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
HardwareControl(int &argc, char **argv, bool GUIenabled, bool SMenabled);
|
||||||
|
virtual ~HardwareControl();
|
||||||
|
|
||||||
|
private:
|
||||||
|
/*!
|
||||||
|
* This function initialise the connection to the D-Bus daemon.
|
||||||
|
* \return boolean with the result of the operation
|
||||||
|
* \retval true if successful initialised D-Bus connection
|
||||||
|
* \retval false if unsuccessful
|
||||||
|
*/
|
||||||
|
bool initDBUS();
|
||||||
|
//! to close the connection to D-Bus
|
||||||
|
void close();
|
||||||
|
|
||||||
|
RootNodeService *rootService;
|
||||||
|
OrgNodeService *orgService;
|
||||||
|
TrinityDesktopNodeService *trinitydesktopService;
|
||||||
|
HardwareControlNodeService *hardwarecontrolService;
|
||||||
|
int retryCount;
|
||||||
|
TQString serviceName;
|
||||||
|
TQT_DBusConnection m_connection;
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
/*!
|
||||||
|
* This function does a reconnect to D-Bus.
|
||||||
|
* \return void
|
||||||
|
*/
|
||||||
|
void slotReconnect();
|
||||||
|
/*!
|
||||||
|
* This function is to process D-Bus signals.
|
||||||
|
* \return void
|
||||||
|
*/
|
||||||
|
void slotDbusSignal(const TQT_DBusMessage&);
|
||||||
|
/*!
|
||||||
|
* This function is to check D-Bus connection.
|
||||||
|
* and if the name is the unique name prepare the receivers
|
||||||
|
* If the name is not the unique name it mans the service
|
||||||
|
* is already running or unique name can not be obtained from
|
||||||
|
* DBus. In this latter case the application will terminate.
|
||||||
|
*
|
||||||
|
* \return void
|
||||||
|
*/
|
||||||
|
void slotConnectionCheck();
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* HARDWARECONTROL_H_ */
|
@ -0,0 +1,112 @@
|
|||||||
|
/*
|
||||||
|
* InputEventsService.cpp
|
||||||
|
*
|
||||||
|
* Created on: Feb 1, 2021
|
||||||
|
* Author: emanoil
|
||||||
|
*
|
||||||
|
* hardwarecontrol Copyright (C) 2021 trinity desktop development team
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2
|
||||||
|
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <tqfile.h>
|
||||||
|
#include <tqtextstream.h>
|
||||||
|
|
||||||
|
// Input devices
|
||||||
|
#include <linux/input.h>
|
||||||
|
|
||||||
|
#include <tqvaluelist.h>
|
||||||
|
|
||||||
|
#include "InputEventsService.h"
|
||||||
|
|
||||||
|
#define BITS_PER_LONG (sizeof(long) * 8)
|
||||||
|
#define NUM_BITS(x) ((((x) - 1) / BITS_PER_LONG) + 1)
|
||||||
|
|
||||||
|
InputEventsService::InputEventsService(TQT_DBusConnection &conn)
|
||||||
|
: m_connection(&conn)
|
||||||
|
{
|
||||||
|
// TODO Auto-generated constructor stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
InputEventsService::~InputEventsService()
|
||||||
|
{
|
||||||
|
if (m_connection)
|
||||||
|
delete m_connection;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Implement virtual methods
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
TQValueList< TQ_UINT32 > InputEventsService::getSwitches(const TQString& device, bool active, TQT_DBusError& error) {
|
||||||
|
int r;
|
||||||
|
unsigned long switches[NUM_BITS(EV_CNT)];
|
||||||
|
TQValueList< TQ_UINT32 > value = TQValueList< TQ_UINT32 >();
|
||||||
|
|
||||||
|
if (!device.isEmpty() && (device.find("/dev/input/event") == 0) ) {
|
||||||
|
|
||||||
|
TQFile file( device );
|
||||||
|
if ( !file.open( IO_ReadOnly ) ) {
|
||||||
|
error = TQT_DBusError::stdFailed(TQString ("Could not open device %1").arg(device));
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( active ) {
|
||||||
|
r = ioctl(file.handle(), EVIOCGSW(sizeof(switches)), switches);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
r = ioctl(file.handle(), EVIOCGBIT(EV_SW, EV_CNT), switches);
|
||||||
|
}
|
||||||
|
if( r > 0 ) {
|
||||||
|
// add the arguments to the reply
|
||||||
|
for( int i = 0; i < sizeof(switches)/sizeof(switches[0]); i++ ) {
|
||||||
|
value.append( switches[i] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
error = TQT_DBusError::stdFailed(TQString ("Failed to handle IOCTL for device: " + device));
|
||||||
|
}
|
||||||
|
file.close();
|
||||||
|
} else {
|
||||||
|
error = TQT_DBusError::stdInvalidArgs(TQString ("Invalid argument for device: " + device));
|
||||||
|
}
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool InputEventsService::GetProvidedSwitches(const TQString& device, TQValueList< TQ_UINT32 >& value, TQT_DBusError& error) {
|
||||||
|
value = getSwitches(device, false, error);
|
||||||
|
if (error.isValid()) {
|
||||||
|
tqDebug(error.message().local8Bit());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool InputEventsService::GetActiveSwitches(const TQString& device, TQValueList< TQ_UINT32 >& value, TQT_DBusError& error) {
|
||||||
|
value = getSwitches(device, true, error);
|
||||||
|
if (error.isValid()) {
|
||||||
|
tqDebug(error.message().local8Bit());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void InputEventsService::handleMethodReply(const TQT_DBusMessage& reply) {
|
||||||
|
m_connection->send(reply);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
* InputEventsService.h
|
||||||
|
*
|
||||||
|
* Created on: Feb 1, 2021
|
||||||
|
* Author: emanoil
|
||||||
|
*
|
||||||
|
* hardwarecontrol Copyright (C) 2021 trinity desktop development team
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2
|
||||||
|
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
#ifndef INPUTEVENTSSERVICE_H_
|
||||||
|
#define INPUTEVENTSSERVICE_H_
|
||||||
|
|
||||||
|
#include <tqdbusconnection.h>
|
||||||
|
|
||||||
|
#include "interfaces/inputeventsInterface.h"
|
||||||
|
|
||||||
|
class InputEventsService: public org::trinitydesktop::hardwarecontrol::InputEventsInterface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
InputEventsService(TQT_DBusConnection&);
|
||||||
|
virtual ~InputEventsService();
|
||||||
|
protected:
|
||||||
|
|
||||||
|
TQValueList< TQ_UINT32 > getSwitches(const TQString& device, bool active, TQT_DBusError& error);
|
||||||
|
|
||||||
|
virtual bool GetProvidedSwitches(const TQString& device, TQValueList< TQ_UINT32 >& value, TQT_DBusError& error);
|
||||||
|
|
||||||
|
virtual bool GetActiveSwitches(const TQString& device, TQValueList< TQ_UINT32 >& value, TQT_DBusError& error);
|
||||||
|
|
||||||
|
protected: // implement sending replies
|
||||||
|
virtual void handleMethodReply(const TQT_DBusMessage& reply);
|
||||||
|
//
|
||||||
|
// virtual void InputEventsServiceAsync(int asyncCallId, const TQT_DBusObjectPath& device, const TQString& uuid);
|
||||||
|
|
||||||
|
private:
|
||||||
|
TQT_DBusConnection *m_connection;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* INPUTEVENTSSERVICE_H_ */
|
@ -0,0 +1,277 @@
|
|||||||
|
/*
|
||||||
|
* PowerService.cpp
|
||||||
|
*
|
||||||
|
* Created on: Feb 1, 2021
|
||||||
|
* Author: emanoil
|
||||||
|
*
|
||||||
|
* hardwarecontrol Copyright (C) 2021 trinity desktop development team
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2
|
||||||
|
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
//#include <kdebug.h>
|
||||||
|
#include <tqfile.h>
|
||||||
|
#include <tqtextstream.h>
|
||||||
|
|
||||||
|
#include "PowerService.h"
|
||||||
|
|
||||||
|
#define POWER_STATE_PATH "/sys/power/state"
|
||||||
|
#define POWER_DISK_PATH "/sys/power/disk"
|
||||||
|
|
||||||
|
PowerService::PowerService(TQT_DBusConnection &conn)
|
||||||
|
: DeviceServiceBase(conn)
|
||||||
|
{
|
||||||
|
// TODO Auto-generated constructor stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
PowerService::~PowerService()
|
||||||
|
{
|
||||||
|
// TODO Auto-generated destructor stub
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PowerService::canSetPower(TQString state, TQT_DBusError& error) {
|
||||||
|
|
||||||
|
bool method = false;
|
||||||
|
if (canSetDeviceValue(POWER_STATE_PATH,error)) {
|
||||||
|
TQFile file1( POWER_STATE_PATH );
|
||||||
|
if ( file1.open( IO_ReadOnly ) ) {
|
||||||
|
TQTextStream stream( &file1 );
|
||||||
|
TQString line = stream.readLine(); // line of text excluding '\n'
|
||||||
|
if ( line.find(state, 0) != -1 )
|
||||||
|
method = true;
|
||||||
|
file1.close();
|
||||||
|
} else {
|
||||||
|
error = TQT_DBusError::stdInvalidArgs(TQString ("Can not write device: ").append(POWER_STATE_PATH));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// send reply
|
||||||
|
return method;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PowerService::setPower(TQString state, TQT_DBusError& error) {
|
||||||
|
|
||||||
|
bool written = false;
|
||||||
|
if (canSetPower(state,error)) {
|
||||||
|
if ( setDeviceValue(POWER_STATE_PATH, state, error) ) {
|
||||||
|
written = true;
|
||||||
|
} else {
|
||||||
|
error = TQT_DBusError::stdFailed(TQString ("Can not set state: " + state));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
error = TQT_DBusError::stdFailed(TQString ("Can not write device: ").append(POWER_STATE_PATH));
|
||||||
|
}
|
||||||
|
|
||||||
|
return written;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PowerService::canSetHibernation(TQString state, TQT_DBusError& error) {
|
||||||
|
|
||||||
|
// check if path is writable
|
||||||
|
bool state_writable = canSetDeviceValue(POWER_STATE_PATH,error);
|
||||||
|
bool disk_writable = canSetDeviceValue(POWER_DISK_PATH,error);
|
||||||
|
|
||||||
|
// check if method is supported
|
||||||
|
bool method1 = false, method2 = false;
|
||||||
|
if (state_writable && disk_writable) {
|
||||||
|
TQFile file1( POWER_STATE_PATH );
|
||||||
|
if ( file1.open( IO_ReadOnly ) ) {
|
||||||
|
TQTextStream stream( &file1 );
|
||||||
|
TQString line = stream.readLine(); // line of text excluding '\n'
|
||||||
|
if ( line.find("disk", 0) != -1 )
|
||||||
|
method1 = true;
|
||||||
|
file1.close();
|
||||||
|
// kdDebug() << "Method1 for " << state << " is " << method1 << "\n";
|
||||||
|
} else {
|
||||||
|
error = TQT_DBusError::stdInvalidArgs(TQString ("Could not open ").append(POWER_STATE_PATH));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
TQFile file2(POWER_DISK_PATH);
|
||||||
|
if ( file2.open( IO_ReadOnly ) ) {
|
||||||
|
TQTextStream stream( &file2 );
|
||||||
|
TQString line = stream.readLine(); // line of text excluding '\n'
|
||||||
|
if ( line.find(state, 0) != -1 )
|
||||||
|
method2 = true;
|
||||||
|
file2.close();
|
||||||
|
} else {
|
||||||
|
error = TQT_DBusError::stdInvalidArgs(TQString ("Could not open ").append(POWER_DISK_PATH));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// send reply
|
||||||
|
return state_writable && disk_writable && method1 && method2;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PowerService::setHibernation(TQString state, TQT_DBusError& error) {
|
||||||
|
|
||||||
|
// set hibernation state
|
||||||
|
bool written1 = false, written2 = false;
|
||||||
|
|
||||||
|
if (canSetHibernation(state,error)) {
|
||||||
|
TQFile file1(POWER_DISK_PATH);
|
||||||
|
if (!file1.open( IO_WriteOnly ) ) {
|
||||||
|
error = TQT_DBusError::stdFailed(TQString ("Could not open device ").append(POWER_DISK_PATH));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
TQTextStream stream1( &file1 );
|
||||||
|
stream1 << state;
|
||||||
|
file1.close();
|
||||||
|
written1 = true;
|
||||||
|
|
||||||
|
TQFile file2(POWER_STATE_PATH);
|
||||||
|
if (!file2.open( IO_WriteOnly ) ) {
|
||||||
|
error = TQT_DBusError::stdFailed(TQString ("Could not open device ").append(POWER_STATE_PATH));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
TQTextStream stream2( &file2 );
|
||||||
|
stream2 << "disk";
|
||||||
|
file2.close();
|
||||||
|
written2 = true;
|
||||||
|
} else {
|
||||||
|
error = TQT_DBusError::stdFailed(TQString ("Could not set state: " + state));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return written1 && written2;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Implement virtual methods
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
bool PowerService::CanStandby(bool& value, TQT_DBusError& error) {
|
||||||
|
value = canSetPower("standby", error);
|
||||||
|
if (error.isValid()) {
|
||||||
|
tqDebug(error.message().local8Bit());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PowerService::Standby(bool& value, TQT_DBusError& error) {
|
||||||
|
value = setPower("standby", error);
|
||||||
|
if (error.isValid()) {
|
||||||
|
tqDebug(error.message().local8Bit());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PowerService::CanFreeze(bool& value, TQT_DBusError& error) {
|
||||||
|
value = canSetPower("freeze", error);
|
||||||
|
if (error.isValid()) {
|
||||||
|
tqDebug(error.message().local8Bit());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PowerService::Freeze(bool& value, TQT_DBusError& error) {
|
||||||
|
value = setPower("freeze", error);
|
||||||
|
if (error.isValid()) {
|
||||||
|
tqDebug(error.message().local8Bit());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PowerService::CanSuspend(bool& value, TQT_DBusError& error) {
|
||||||
|
value = canSetPower("mem", error);
|
||||||
|
if (error.isValid()) {
|
||||||
|
tqDebug(error.message().local8Bit());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PowerService::Suspend(bool& value, TQT_DBusError& error) {
|
||||||
|
value = setPower("mem", error);
|
||||||
|
if (error.isValid()) {
|
||||||
|
tqDebug(error.message().local8Bit());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PowerService::CanHibernate(bool& value, TQT_DBusError& error) {
|
||||||
|
value = canSetHibernation("platform", error);
|
||||||
|
if (error.isValid()) {
|
||||||
|
tqDebug(error.message().local8Bit());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PowerService::Hibernate(bool& value, TQT_DBusError& error) {
|
||||||
|
value = setHibernation("platform", error);
|
||||||
|
if (error.isValid()) {
|
||||||
|
tqDebug(error.message().local8Bit());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PowerService::CanHybridSuspend(bool& value, TQT_DBusError& error) {
|
||||||
|
value = canSetHibernation("suspend", error);
|
||||||
|
if (error.isValid()) {
|
||||||
|
tqDebug(error.message().local8Bit());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PowerService::HybridSuspend(bool& value, TQT_DBusError& error) {
|
||||||
|
value = setHibernation("suspend", error);
|
||||||
|
if (error.isValid()) {
|
||||||
|
tqDebug(error.message().local8Bit());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PowerService::CanSetHibernationMethod(bool& value, TQT_DBusError& error) {
|
||||||
|
value = canSetDeviceValue(POWER_DISK_PATH, error);
|
||||||
|
if (error.isValid()) {
|
||||||
|
tqDebug(error.message().local8Bit());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PowerService::SetHibernationMethod(const TQString& method, bool& value, TQT_DBusError& error) {
|
||||||
|
// set hibernation method
|
||||||
|
if (!method.isEmpty()) {
|
||||||
|
value = setDeviceValue(POWER_DISK_PATH, method, error);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
value = false;
|
||||||
|
error = TQT_DBusError::stdInvalidArgs(TQString ("Invalid argument for method: " + method));
|
||||||
|
}
|
||||||
|
if (error.isValid()) {
|
||||||
|
tqDebug(error.message().local8Bit());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PowerService::handleMethodReply(const TQT_DBusMessage& reply) {
|
||||||
|
m_connection->send(reply);
|
||||||
|
}
|
@ -0,0 +1,73 @@
|
|||||||
|
/*
|
||||||
|
* PowerService.h
|
||||||
|
*
|
||||||
|
* Created on: Feb 1, 2021
|
||||||
|
* Author: emanoil
|
||||||
|
*
|
||||||
|
* hardwarecontrol Copyright (C) 2021 trinity desktop development team
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2
|
||||||
|
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
#ifndef POWERSERVICE_H_
|
||||||
|
#define POWERSERVICE_H_
|
||||||
|
|
||||||
|
#include "interfaces/powerInterface.h"
|
||||||
|
#include "DeviceServiceBase.h"
|
||||||
|
|
||||||
|
class PowerService: public org::trinitydesktop::hardwarecontrol::PowerInterface,
|
||||||
|
public DeviceServiceBase
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
PowerService(TQT_DBusConnection&);
|
||||||
|
virtual ~PowerService();
|
||||||
|
protected:
|
||||||
|
bool canSetPower(TQString state, TQT_DBusError& error);
|
||||||
|
|
||||||
|
bool setPower(TQString state, TQT_DBusError& error);
|
||||||
|
|
||||||
|
bool canSetHibernation(TQString state, TQT_DBusError& error);
|
||||||
|
|
||||||
|
bool setHibernation(TQString state, TQT_DBusError& error);
|
||||||
|
|
||||||
|
virtual bool CanStandby(bool& value, TQT_DBusError& error);
|
||||||
|
|
||||||
|
virtual bool Standby(bool& value, TQT_DBusError& error);
|
||||||
|
|
||||||
|
virtual bool CanFreeze(bool& value, TQT_DBusError& error);
|
||||||
|
|
||||||
|
virtual bool Freeze(bool& value, TQT_DBusError& error);
|
||||||
|
|
||||||
|
virtual bool CanSuspend(bool& value, TQT_DBusError& error);
|
||||||
|
|
||||||
|
virtual bool Suspend(bool& value, TQT_DBusError& error);
|
||||||
|
|
||||||
|
virtual bool CanHibernate(bool& value, TQT_DBusError& error);
|
||||||
|
|
||||||
|
virtual bool Hibernate(bool& value, TQT_DBusError& error);
|
||||||
|
|
||||||
|
virtual bool CanHybridSuspend(bool& value, TQT_DBusError& error);
|
||||||
|
|
||||||
|
virtual bool HybridSuspend(bool& value, TQT_DBusError& error);
|
||||||
|
|
||||||
|
virtual bool CanSetHibernationMethod(bool& value, TQT_DBusError& error);
|
||||||
|
|
||||||
|
virtual bool SetHibernationMethod(const TQString& method, bool& value, TQT_DBusError& error);
|
||||||
|
|
||||||
|
protected: // implement sending replies
|
||||||
|
void handleMethodReply(const TQT_DBusMessage& reply);
|
||||||
|
//
|
||||||
|
// virtual void PowerServiceAsync(int asyncCallId, const TQT_DBusObjectPath& device, const TQString& uuid);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* POWERSERVICE_H_ */
|
@ -0,0 +1,63 @@
|
|||||||
|
/*
|
||||||
|
* PropertiesService.cpp
|
||||||
|
*
|
||||||
|
* Created on: Feb 7, 2021
|
||||||
|
* Author: emanoil
|
||||||
|
*
|
||||||
|
* hardwarecontrol Copyright (C) 2009 hardwarecontrol development team
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2
|
||||||
|
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
#include "PropertiesService.h"
|
||||||
|
|
||||||
|
PropertiesService::PropertiesService(TQT_DBusConnection &conn)
|
||||||
|
: m_connection(&conn)
|
||||||
|
{
|
||||||
|
// TODO Auto-generated constructor stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
PropertiesService::~PropertiesService()
|
||||||
|
{
|
||||||
|
// TODO Auto-generated destructor stub
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PropertiesService::handleSignalSend(const TQT_DBusMessage& reply) {
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
TQString PropertiesService::objectPath() const {
|
||||||
|
|
||||||
|
return TQString();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PropertiesService::Get(const TQString& interface, const TQString& name, TQT_DBusVariant& value, TQT_DBusError& error) {
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PropertiesService::Set(const TQString& interface, const TQString& name, const TQT_DBusVariant& value, TQT_DBusError& error) {
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PropertiesService::GetAll(const TQString& interface, TQMap< TQString, TQT_DBusVariant >& properties, TQT_DBusError& error) {
|
||||||
|
|
||||||
|
properties = TQMap< TQString, TQT_DBusVariant >();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PropertiesService::handleMethodReply(const TQT_DBusMessage& reply){
|
||||||
|
m_connection->send(reply);
|
||||||
|
}
|
@ -0,0 +1,56 @@
|
|||||||
|
/*
|
||||||
|
* PropertiesService.h
|
||||||
|
*
|
||||||
|
* Created on: Feb 7, 2021
|
||||||
|
* Author: emanoil
|
||||||
|
*
|
||||||
|
* hardwarecontrol Copyright (C) 2009 hardwarecontrol development team
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2
|
||||||
|
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
#ifndef PROPERTIESSERVICE_H_
|
||||||
|
#define PROPERTIESSERVICE_H_
|
||||||
|
|
||||||
|
#include <tqmap.h>
|
||||||
|
|
||||||
|
#include <tqdbusconnection.h>
|
||||||
|
#include <tqdbusvariant.h>
|
||||||
|
|
||||||
|
#include "interfaces/propertiesInterface.h"
|
||||||
|
|
||||||
|
class PropertiesService: public org::freedesktop::DBus::PropertiesInterface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
PropertiesService(TQT_DBusConnection&);
|
||||||
|
virtual ~PropertiesService();
|
||||||
|
|
||||||
|
protected: // implement sending signals
|
||||||
|
virtual bool handleSignalSend(const TQT_DBusMessage& reply);
|
||||||
|
virtual TQString objectPath() const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual bool Get(const TQString& interface, const TQString& name, TQT_DBusVariant& value, TQT_DBusError& error);
|
||||||
|
|
||||||
|
virtual bool Set(const TQString& interface, const TQString& name, const TQT_DBusVariant& value, TQT_DBusError& error);
|
||||||
|
|
||||||
|
virtual bool GetAll(const TQString& interface, TQMap< TQString, TQT_DBusVariant >& properties, TQT_DBusError& error);
|
||||||
|
|
||||||
|
protected: // implement sending replies
|
||||||
|
virtual void handleMethodReply(const TQT_DBusMessage& reply);
|
||||||
|
|
||||||
|
private:
|
||||||
|
TQT_DBusConnection *m_connection;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* PROPERTIESSERVICE_H_ */
|
@ -0,0 +1,123 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* HardwareControl DBus Service implementation
|
||||||
|
*
|
||||||
|
* Copyright (C) 2020 Emanoil Kotsev <deloptes@gmail.com>
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* This file is part of tdecore/tdehw.
|
||||||
|
*
|
||||||
|
* hardwarecontrol 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; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* hardwarecontrol 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 tdelibs; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
// TQt includes
|
||||||
|
#include <tqdbusobjectpath.h>
|
||||||
|
|
||||||
|
#include "hardwarecontrolService.h"
|
||||||
|
#include "interfaces/introspectableInterface.h"
|
||||||
|
#include "interfaces/propertiesInterface.h"
|
||||||
|
|
||||||
|
#include "DeviceServiceBase.h"
|
||||||
|
#include "BrightnessService.h"
|
||||||
|
#include "CPUGovernorService.h"
|
||||||
|
#include "InputEventsService.h"
|
||||||
|
#include "PowerService.h"
|
||||||
|
#include "PropertiesService.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Implementing node services for /org/trinitydesktop/hardwarecontrol
|
||||||
|
*/
|
||||||
|
#define DBUS_HWCTRL_SERVICE_PATH "/org/trinitydesktop/hardwarecontrol"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Root Node
|
||||||
|
*/
|
||||||
|
RootNodeService::RootNodeService(TQT_DBusConnection &connection )
|
||||||
|
: DBusBaseNode(), m_connection(connection)
|
||||||
|
{
|
||||||
|
addChildNode(TQString("org"));
|
||||||
|
registerObject(m_connection,TQString("/"));
|
||||||
|
}
|
||||||
|
|
||||||
|
RootNodeService::~RootNodeService(){
|
||||||
|
}
|
||||||
|
|
||||||
|
TQT_DBusObjectBase* RootNodeService::createInterface(const TQString& interfaceName)
|
||||||
|
{
|
||||||
|
return (TQT_DBusObjectBase*) m_interfaces[interfaceName];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Org Node
|
||||||
|
*/
|
||||||
|
OrgNodeService::OrgNodeService(TQT_DBusConnection &connection )
|
||||||
|
: DBusBaseNode(), m_connection(connection)
|
||||||
|
{
|
||||||
|
addChildNode(TQString("trinitydesktop"));
|
||||||
|
registerObject(m_connection,TQString("/org"));
|
||||||
|
}
|
||||||
|
|
||||||
|
OrgNodeService::~OrgNodeService(){
|
||||||
|
}
|
||||||
|
|
||||||
|
TQT_DBusObjectBase* OrgNodeService::createInterface(const TQString& interfaceName)
|
||||||
|
{
|
||||||
|
return (TQT_DBusObjectBase*) m_interfaces[interfaceName];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* TrinityDesktop Node
|
||||||
|
*/
|
||||||
|
TrinityDesktopNodeService::TrinityDesktopNodeService(TQT_DBusConnection &connection )
|
||||||
|
: DBusBaseNode(), m_connection(connection)
|
||||||
|
{
|
||||||
|
addChildNode(TQString("hardwarecontrol"));
|
||||||
|
registerObject(m_connection,TQString("/org/trinitydesktop"));
|
||||||
|
}
|
||||||
|
|
||||||
|
TrinityDesktopNodeService::~TrinityDesktopNodeService(){
|
||||||
|
}
|
||||||
|
|
||||||
|
TQT_DBusObjectBase* TrinityDesktopNodeService::createInterface(const TQString& interfaceName)
|
||||||
|
{
|
||||||
|
return (TQT_DBusObjectBase*) m_interfaces[interfaceName];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* HardwareControl Node
|
||||||
|
*/
|
||||||
|
HardwareControlNodeService::HardwareControlNodeService(TQT_DBusConnection &conn)
|
||||||
|
: org::trinitydesktop::hardwarecontrolNode(),
|
||||||
|
m_connection(conn)
|
||||||
|
{
|
||||||
|
m_interfaces.insert("org.freedesktop.DBus.Introspectable", this);
|
||||||
|
m_interfaces.insert("org.freedesktop.DBus.Properties", new PropertiesService(m_connection));
|
||||||
|
m_interfaces.insert("org.trinitydesktop.hardwarecontrol.Brightness", new BrightnessService(m_connection));
|
||||||
|
m_interfaces.insert("org.trinitydesktop.hardwarecontrol.CPUGovernor", new CPUGovernorService(m_connection));
|
||||||
|
m_interfaces.insert("org.trinitydesktop.hardwarecontrol.InputEvents", new InputEventsService(m_connection));
|
||||||
|
m_interfaces.insert("org.trinitydesktop.hardwarecontrol.Power", new PowerService(m_connection));
|
||||||
|
registerObject(m_connection,TQString(DBUS_HWCTRL_SERVICE_PATH));
|
||||||
|
}
|
||||||
|
|
||||||
|
HardwareControlNodeService::~HardwareControlNodeService(){
|
||||||
|
}
|
||||||
|
|
||||||
|
TQT_DBusObjectBase* HardwareControlNodeService::createInterface(const TQString& interfaceName)
|
||||||
|
{
|
||||||
|
return (TQT_DBusObjectBase*) m_interfaces[interfaceName];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -0,0 +1,114 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* HardwareControl DBus Service implementation
|
||||||
|
*
|
||||||
|
* Copyright (C) 2020 Emanoil Kotsev <deloptes@gmail.com>
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* This file is part of tdecore/tdehw.
|
||||||
|
*
|
||||||
|
* hardwarecontrol 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; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* hardwarecontrol 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 tdelibs; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#ifndef HARDWARECONTROLSERVICE_H
|
||||||
|
#define HARDWARECONTROLSERVICE_H
|
||||||
|
|
||||||
|
#include <tqmap.h>
|
||||||
|
#include <tqdbusconnection.h>
|
||||||
|
|
||||||
|
#include "interfaces/hardwarecontrolNode.h"
|
||||||
|
#include "interfaces/dbusbaseNode.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RootNodeService
|
||||||
|
* Service: -
|
||||||
|
* Path : /
|
||||||
|
* Children: org
|
||||||
|
*/
|
||||||
|
class RootNodeService : public DBusBaseNode
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
RootNodeService(TQT_DBusConnection&);
|
||||||
|
~RootNodeService();
|
||||||
|
protected:
|
||||||
|
virtual TQT_DBusObjectBase* createInterface(const TQString&);
|
||||||
|
private:
|
||||||
|
TQMap<TQString, TQT_DBusObjectBase*> m_interfaces;
|
||||||
|
TQT_DBusConnection m_connection;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* OrgNodeService
|
||||||
|
* Service: -
|
||||||
|
* Path : /org
|
||||||
|
* Children: trinitydesktop
|
||||||
|
*/
|
||||||
|
class OrgNodeService : public DBusBaseNode
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
OrgNodeService(TQT_DBusConnection&);
|
||||||
|
~OrgNodeService();
|
||||||
|
protected:
|
||||||
|
virtual TQT_DBusObjectBase* createInterface(const TQString&);
|
||||||
|
private:
|
||||||
|
TQMap<TQString, TQT_DBusObjectBase*> m_interfaces;
|
||||||
|
TQT_DBusConnection m_connection;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TrinityDesktopNodeService
|
||||||
|
* Service: -
|
||||||
|
* Path : /org/trinitydesktop
|
||||||
|
* Children: hardwarecontrol
|
||||||
|
*/
|
||||||
|
class TrinityDesktopNodeService : public DBusBaseNode
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
TrinityDesktopNodeService(TQT_DBusConnection&);
|
||||||
|
~TrinityDesktopNodeService();
|
||||||
|
protected:
|
||||||
|
virtual TQT_DBusObjectBase* createInterface(const TQString&);
|
||||||
|
private:
|
||||||
|
TQMap<TQString, TQT_DBusObjectBase*> m_interfaces;
|
||||||
|
TQT_DBusConnection m_connection;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* HardwareControlNodeService
|
||||||
|
* Service: org.freedesktop.DBus.Introspectable
|
||||||
|
* Service: org.freedesktop.DBus.Properties
|
||||||
|
* Service: org.trinitydesktop.hardwarecontrol.Brightness
|
||||||
|
* Service: org.trinitydesktop.hardwarecontrol.CPUGovernor
|
||||||
|
* Service: org.trinitydesktop.hardwarecontrol.InputEvents
|
||||||
|
* Service: org.trinitydesktop.hardwarecontrol.Power
|
||||||
|
* Path : /org/trinitydesktop/hardwarecontrol
|
||||||
|
* Children: -
|
||||||
|
*/
|
||||||
|
class HardwareControlNodeService : public org::trinitydesktop::hardwarecontrolNode
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
HardwareControlNodeService(TQT_DBusConnection&);
|
||||||
|
~HardwareControlNodeService();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual TQT_DBusObjectBase* createInterface(const TQString&);
|
||||||
|
|
||||||
|
private:
|
||||||
|
TQMap<TQString, TQT_DBusObjectBase*> m_interfaces;
|
||||||
|
TQT_DBusConnection m_connection;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif // HARDWARECONTROLSERVICE_H
|
@ -0,0 +1,52 @@
|
|||||||
|
#################################################
|
||||||
|
#
|
||||||
|
# (C) 2020 Emanoil Kotsev
|
||||||
|
# deloptes (AT) gmail.com
|
||||||
|
#
|
||||||
|
# Improvements and feedback are welcome
|
||||||
|
#
|
||||||
|
# This file is released under GPL >= 3
|
||||||
|
#
|
||||||
|
#################################################
|
||||||
|
|
||||||
|
include_directories(
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}
|
||||||
|
${TQT_INCLUDE_DIRS}
|
||||||
|
${DBUS_TQT_INCLUDE_DIRS}
|
||||||
|
)
|
||||||
|
|
||||||
|
set( INTROSPECTIONPATH ${CMAKE_SOURCE_DIR}/tdecore/tdehw/hwlibdaemons/tdedbus/interfaces )
|
||||||
|
set( DBUSXML2QT3_EXECUTABLE dbusxml2qt3 )
|
||||||
|
|
||||||
|
set( HardwareControl_HDRS brightnessInterface.h brightnessProxy.h cpugovernorInterface.h cpugovernorProxy.h dbusbaseNode.h hardwarecontrolNode.h inputeventsInterface.h inputeventsProxy.h introspectableInterface.h powerInterface.h powerProxy.h propertiesInterface.h propertiesProxy.h )
|
||||||
|
set( HardwareControl_SRCS brightnessInterface.cpp brightnessProxy.cpp cpugovernorInterface.cpp cpugovernorProxy.cpp dbusbaseNode.cpp hardwarecontrolNode.cpp inputeventsInterface.cpp inputeventsProxy.cpp introspectableInterface.cpp powerInterface.cpp powerProxy.cpp propertiesInterface.cpp propertiesProxy.cpp)
|
||||||
|
|
||||||
|
function( make_moc fileinput )
|
||||||
|
add_custom_command( OUTPUT ${fileinput}.moc
|
||||||
|
COMMAND ${TMOC_EXECUTABLE} ${fileinput}.h -o ${fileinput}.moc
|
||||||
|
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${fileinput}.h
|
||||||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||||
|
)
|
||||||
|
set_property( SOURCE ${CMAKE_CURRENT_BINARY_DIR}/${fileinput}.cpp APPEND
|
||||||
|
PROPERTY OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${fileinput}.moc )
|
||||||
|
endfunction( )
|
||||||
|
|
||||||
|
##### HardwareControl #########################
|
||||||
|
add_custom_command(
|
||||||
|
OUTPUT ${HardwareControl_HDRS} ${HardwareControl_SRCS}
|
||||||
|
COMMAND ${DBUSXML2QT3_EXECUTABLE} ${INTROSPECTIONPATH}/org.trinitydesktop.hardwarecontrol.xml 2>/dev/null
|
||||||
|
DEPENDS ${INTROSPECTIONPATH}/org.trinitydesktop.hardwarecontrol.xml
|
||||||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||||
|
)
|
||||||
|
|
||||||
|
make_moc ( brightnessProxy )
|
||||||
|
make_moc ( cpugovernorProxy )
|
||||||
|
make_moc ( inputeventsProxy)
|
||||||
|
make_moc ( powerProxy )
|
||||||
|
make_moc ( propertiesProxy )
|
||||||
|
|
||||||
|
tde_add_library( hwcontrolinterfaces STATIC_PIC
|
||||||
|
SOURCES ${HardwareControl_SRCS}
|
||||||
|
LINK ${DBUS_TQT_LIBRARIES}
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,96 @@
|
|||||||
|
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
|
||||||
|
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
|
||||||
|
<node name="/org/trinitydesktop/hardwarecontrol">
|
||||||
|
<interface name="org.trinitydesktop.hardwarecontrol.Brightness">
|
||||||
|
<method name="CanSetBrightness">
|
||||||
|
<arg name="device" direction="in" type="s" />
|
||||||
|
<arg name="value" direction="out" type="b" />
|
||||||
|
</method>
|
||||||
|
<method name="SetBrightness">
|
||||||
|
<arg name="device" direction="in" type="s" />
|
||||||
|
<arg name="brightness" direction="in" type="s" />
|
||||||
|
<arg name="value" direction="out" type="b" />
|
||||||
|
</method>
|
||||||
|
</interface>
|
||||||
|
<interface name="org.trinitydesktop.hardwarecontrol.CPUGovernor">
|
||||||
|
<method name="CanSetCPUGovernor">
|
||||||
|
<arg name="cpu" direction="in" type="i" />
|
||||||
|
<arg name="value" direction="out" type="b" />
|
||||||
|
</method>
|
||||||
|
<method name="SetCPUGovernor">
|
||||||
|
<arg name="cpu" direction="in" type="i" />
|
||||||
|
<arg name="governor" direction="in" type="s" />
|
||||||
|
<arg name="value" direction="out" type="b" />
|
||||||
|
</method>
|
||||||
|
</interface>
|
||||||
|
<interface name="org.trinitydesktop.hardwarecontrol.InputEvents">
|
||||||
|
<method name="GetProvidedSwitches">
|
||||||
|
<arg name="device" direction="in" type="s" />
|
||||||
|
<arg name="value" direction="out" type="au" />
|
||||||
|
</method>
|
||||||
|
<method name="GetActiveSwitches">
|
||||||
|
<arg name="device" direction="in" type="s" />
|
||||||
|
<arg name="value" direction="out" type="au" />
|
||||||
|
</method>
|
||||||
|
</interface>
|
||||||
|
<interface name="org.trinitydesktop.hardwarecontrol.Power">
|
||||||
|
<method name="CanStandby">
|
||||||
|
<arg name="value" direction="out" type="b" />
|
||||||
|
</method>
|
||||||
|
<method name="Standby">
|
||||||
|
<arg name="value" direction="out" type="b" />
|
||||||
|
</method>
|
||||||
|
<method name="CanFreeze">
|
||||||
|
<arg name="value" direction="out" type="b" />
|
||||||
|
</method>
|
||||||
|
<method name="Freeze">
|
||||||
|
<arg name="value" direction="out" type="b" />
|
||||||
|
</method>
|
||||||
|
<method name="CanSuspend">
|
||||||
|
<arg name="value" direction="out" type="b" />
|
||||||
|
</method>
|
||||||
|
<method name="Suspend">
|
||||||
|
<arg name="value" direction="out" type="b" />
|
||||||
|
</method>
|
||||||
|
<method name="CanHibernate">
|
||||||
|
<arg name="value" direction="out" type="b" />
|
||||||
|
</method>
|
||||||
|
<method name="Hibernate">
|
||||||
|
<arg name="value" direction="out" type="b" />
|
||||||
|
</method>
|
||||||
|
<method name="CanHybridSuspend">
|
||||||
|
<arg name="value" direction="out" type="b" />
|
||||||
|
</method>
|
||||||
|
<method name="HybridSuspend">
|
||||||
|
<arg name="value" direction="out" type="b" />
|
||||||
|
</method>
|
||||||
|
<method name="CanSetHibernationMethod">
|
||||||
|
<arg name="value" direction="out" type="b" />
|
||||||
|
</method>
|
||||||
|
<method name="SetHibernationMethod">
|
||||||
|
<arg name="method" direction="in" type="s" />
|
||||||
|
<arg name="value" direction="out" type="b" />
|
||||||
|
</method>
|
||||||
|
</interface>
|
||||||
|
<interface name="org.freedesktop.DBus.Properties">
|
||||||
|
<method name="Get">
|
||||||
|
<arg name="interface" type="s" direction="in"/>
|
||||||
|
<arg name="name" type="s" direction="in"/>
|
||||||
|
<arg name="value" type="v" direction="out"/>
|
||||||
|
</method>
|
||||||
|
<method name="Set">
|
||||||
|
<arg name="interface" type="s" direction="in"/>
|
||||||
|
<arg name="name" type="s" direction="in"/>
|
||||||
|
<arg name="value" type="v" direction="in"/>
|
||||||
|
</method>
|
||||||
|
<method name="GetAll">
|
||||||
|
<arg name="interface" type="s" direction="in"/>
|
||||||
|
<arg name="properties" type="a{sv}" direction="out"/>
|
||||||
|
</method>
|
||||||
|
<signal name="PropertiesChanged">
|
||||||
|
<arg name="interface" type="s"/>
|
||||||
|
<arg name="changed_properties" type="a{sv}"/>
|
||||||
|
<arg name="invalidated_properties" type="as"/>
|
||||||
|
</signal>
|
||||||
|
</interface>
|
||||||
|
</node>
|
@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* HardwareControl.h
|
||||||
|
*
|
||||||
|
* Created on: Feb 2, 2021
|
||||||
|
* Author: emanoil
|
||||||
|
*
|
||||||
|
* hardwarecontrol Copyright (C) 2021 trinity desktop development team
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2
|
||||||
|
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
#include "HardwareControl.h"
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
HardwareControl a( argc, argv, false, false ) ;// no gui and session management
|
||||||
|
return a.exec();
|
||||||
|
}
|
@ -0,0 +1,62 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> <!-- -*- XML -*- -->
|
||||||
|
|
||||||
|
<!DOCTYPE busconfig PUBLIC
|
||||||
|
"-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
|
||||||
|
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
|
||||||
|
<busconfig>
|
||||||
|
<!-- Only root can own the service -->
|
||||||
|
<policy user="root">
|
||||||
|
<allow own="org.trinitydesktop.hardwarecontrol"/>
|
||||||
|
</policy>
|
||||||
|
|
||||||
|
<policy at_console="true">
|
||||||
|
<!-- Users with physical access to the machine are allowed access -->
|
||||||
|
<allow send_destination="org.trinitydesktop.hardwarecontrol"
|
||||||
|
send_interface="org.freedesktop.DBus.Introspectable"/>
|
||||||
|
|
||||||
|
<allow send_destination="org.trinitydesktop.hardwarecontrol"
|
||||||
|
send_interface="org.freedesktop.DBus.Properties"/>
|
||||||
|
|
||||||
|
<allow send_destination="org.trinitydesktop.hardwarecontrol"
|
||||||
|
send_interface="org.trinitydesktop.hardwarecontrol"/>
|
||||||
|
<allow send_destination="org.trinitydesktop.hardwarecontrol"
|
||||||
|
send_interface="org.trinitydesktop.hardwarecontrol.Brightness"/>
|
||||||
|
<allow send_destination="org.trinitydesktop.hardwarecontrol"
|
||||||
|
send_interface="org.trinitydesktop.hardwarecontrol.CPUGovernor"/>
|
||||||
|
<allow send_destination="org.trinitydesktop.hardwarecontrol"
|
||||||
|
send_interface="org.trinitydesktop.hardwarecontrol.InputEvents"/>
|
||||||
|
<allow send_destination="org.trinitydesktop.hardwarecontrol"
|
||||||
|
send_interface="org.trinitydesktop.hardwarecontrol.Power"/>
|
||||||
|
</policy>
|
||||||
|
|
||||||
|
<policy group="plugdev">
|
||||||
|
<!-- Users who are members of the plugdev group are allowed access -->
|
||||||
|
<allow send_destination="org.trinitydesktop.hardwarecontrol"
|
||||||
|
send_interface="org.freedesktop.DBus.Introspectable"/>
|
||||||
|
|
||||||
|
<allow send_destination="org.trinitydesktop.hardwarecontrol"
|
||||||
|
send_interface="org.freedesktop.DBus.Properties"/>
|
||||||
|
|
||||||
|
<allow send_destination="org.trinitydesktop.hardwarecontrol"
|
||||||
|
send_interface="org.trinitydesktop.hardwarecontrol"/>
|
||||||
|
<allow send_destination="org.trinitydesktop.hardwarecontrol"
|
||||||
|
send_interface="org.trinitydesktop.hardwarecontrol.Brightness"/>
|
||||||
|
<allow send_destination="org.trinitydesktop.hardwarecontrol"
|
||||||
|
send_interface="org.trinitydesktop.hardwarecontrol.CPUGovernor"/>
|
||||||
|
<allow send_destination="org.trinitydesktop.hardwarecontrol"
|
||||||
|
send_interface="org.trinitydesktop.hardwarecontrol.InputEvents"/>
|
||||||
|
<allow send_destination="org.trinitydesktop.hardwarecontrol"
|
||||||
|
send_interface="org.trinitydesktop.hardwarecontrol.Power"/>
|
||||||
|
</policy>
|
||||||
|
|
||||||
|
<policy context="default">
|
||||||
|
<!-- Everyone else is denied access -->
|
||||||
|
<deny own="org.trinitydesktop.hardwarecontrol"/>
|
||||||
|
|
||||||
|
<deny send_destination="org.trinitydesktop.hardwarecontrol"/>
|
||||||
|
|
||||||
|
<!-- Allow to read input switches -->
|
||||||
|
<allow send_destination="org.trinitydesktop.hardwarecontrol"
|
||||||
|
send_interface="org.trinitydesktop.hardwarecontrol.InputEvents"/>
|
||||||
|
</policy>
|
||||||
|
</busconfig>
|
@ -0,0 +1,4 @@
|
|||||||
|
[D-BUS Service]
|
||||||
|
Name=org.trinitydesktop.hardwarecontrol
|
||||||
|
Exec=@BIN_INSTALL_DIR@/tde_dbus_hardwarecontrol
|
||||||
|
User=root
|
Loading…
Reference in new issue