File indexing completed on 2024-04-28 16:42:44
0001 /* 0002 * SPDX-FileCopyrightText: 2022 Aleix Pol i Gonzalez <aleixpol@kde.org> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #pragma once 0008 0009 #include <QDebug> 0010 #include <QThread> 0011 #include <QSet> 0012 #include <Solid/Device> 0013 0014 #include "../device.h" 0015 #include <libevdev/libevdev.h> 0016 #include "evdevdbusinterface.h" 0017 0018 class EvdevDeviceThread; 0019 class EvdevDbusInterface; 0020 class EvdevController : public QObject 0021 { 0022 public: 0023 explicit EvdevController(); 0024 bool addDevice(const Solid::Device &device); 0025 0026 EvdevDbusInterface m_dbusInterface; 0027 }; 0028 0029 class EvdevDevice : public Device 0030 { 0031 Q_OBJECT 0032 0033 public: 0034 explicit EvdevDevice(const QString &udi, libevdev *device, EvdevController* controller); 0035 ~EvdevDevice() override; 0036 0037 libevdev *device() const { 0038 return m_device; 0039 } 0040 void readNow(); 0041 0042 signals: 0043 void keyPress(int keyCode, bool pressed); 0044 0045 private: 0046 void processEvent(struct input_event &ev); 0047 void setKey(int key, bool pressed); 0048 0049 EvdevController *const m_controller; 0050 QSet<int> m_pressedKeys; 0051 void deviceRemoved(const QString &udi); 0052 libevdev *const m_device; 0053 const QString m_udi; 0054 const QMap<int, QList<int>> m_buttons; 0055 }; 0056 0057