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