summaryrefslogtreecommitdiffstats
path: root/tdecore/tdehw/hwlibdaemons/tdedbus/InputEventsService.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tdecore/tdehw/hwlibdaemons/tdedbus/InputEventsService.cpp')
-rw-r--r--tdecore/tdehw/hwlibdaemons/tdedbus/InputEventsService.cpp112
1 files changed, 112 insertions, 0 deletions
diff --git a/tdecore/tdehw/hwlibdaemons/tdedbus/InputEventsService.cpp b/tdecore/tdehw/hwlibdaemons/tdedbus/InputEventsService.cpp
new file mode 100644
index 000000000..458df9467
--- /dev/null
+++ b/tdecore/tdehw/hwlibdaemons/tdedbus/InputEventsService.cpp
@@ -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);
+}
+