File indexing completed on 2024-05-19 16:34:58

0001 /*
0002     KWin - the KDE window manager
0003     This file is part of the KDE project.
0004 
0005     SPDX-FileCopyrightText: 2014 Martin Gräßlin <mgraesslin@kde.org>
0006 
0007     SPDX-License-Identifier: GPL-2.0-or-later
0008 */
0009 #pragma once
0010 #include <kwin_export.h>
0011 #include <memory>
0012 
0013 #include <QVector>
0014 #include <vector>
0015 
0016 #include <sys/types.h>
0017 
0018 struct udev;
0019 struct udev_device;
0020 struct udev_monitor;
0021 
0022 namespace KWin
0023 {
0024 class Udev;
0025 
0026 class KWIN_EXPORT UdevDevice
0027 {
0028 public:
0029     UdevDevice(udev_device *device);
0030     ~UdevDevice();
0031 
0032     QString devNode() const;
0033     dev_t devNum() const;
0034     const char *property(const char *key);
0035     bool hasProperty(const char *key, const char *value);
0036     QString action() const;
0037 
0038     QMap<QByteArray, QByteArray> properties() const;
0039     bool isBootVga() const;
0040     QString seat() const;
0041 
0042     operator udev_device *() const
0043     {
0044         return m_device;
0045     }
0046     operator udev_device *()
0047     {
0048         return m_device;
0049     }
0050     typedef std::unique_ptr<UdevDevice> Ptr;
0051 
0052 private:
0053     udev_device *const m_device;
0054 };
0055 
0056 class KWIN_EXPORT UdevMonitor
0057 {
0058 public:
0059     explicit UdevMonitor(Udev *udev);
0060     ~UdevMonitor();
0061 
0062     int fd() const;
0063     bool isValid() const
0064     {
0065         return m_monitor != nullptr;
0066     }
0067     void filterSubsystemDevType(const char *subSystem, const char *devType = nullptr);
0068     void enable();
0069     UdevDevice::Ptr getDevice();
0070 
0071 private:
0072     udev_monitor *m_monitor;
0073 };
0074 
0075 class KWIN_EXPORT Udev
0076 {
0077 public:
0078     Udev();
0079     ~Udev();
0080 
0081     bool isValid() const
0082     {
0083         return m_udev != nullptr;
0084     }
0085     std::vector<UdevDevice::Ptr> listGPUs();
0086     UdevDevice::Ptr deviceFromSyspath(const char *syspath);
0087     std::unique_ptr<UdevMonitor> monitor();
0088     operator udev *() const
0089     {
0090         return m_udev;
0091     }
0092     operator udev *()
0093     {
0094         return m_udev;
0095     }
0096 
0097 private:
0098     struct udev *m_udev;
0099 };
0100 
0101 }