File indexing completed on 2025-03-16 08:15:01
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 }