File indexing completed on 2024-05-12 05:32:16

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 <QList>
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     bool isHotpluggable() const;
0042 
0043     operator udev_device *() const
0044     {
0045         return m_device;
0046     }
0047     operator udev_device *()
0048     {
0049         return m_device;
0050     }
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     std::unique_ptr<UdevDevice> 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<std::unique_ptr<UdevDevice>> listGPUs();
0086     std::unique_ptr<UdevDevice> 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 }