File indexing completed on 2024-05-12 05:38:44

0001 /*
0002     SPDX-FileCopyrightText: 2009 Benjamin K. Stuhl <bks24@cornell.edu>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005 */
0006 
0007 #pragma once
0008 
0009 extern "C" {
0010 #define LIBUDEV_I_KNOW_THE_API_IS_SUBJECT_TO_CHANGE
0011 #include <libudev.h>
0012 }
0013 
0014 class QByteArray;
0015 class QSocketNotifier;
0016 
0017 namespace UdevQt
0018 {
0019 class DevicePrivate
0020 {
0021 public:
0022     explicit DevicePrivate(struct udev_device *udev_, bool ref = true);
0023     ~DevicePrivate();
0024     DevicePrivate &operator=(const DevicePrivate &other);
0025 
0026     QString decodePropertyValue(const QByteArray &encoded) const;
0027 
0028     struct udev_device *udev;
0029 };
0030 
0031 class Client;
0032 class ClientPrivate
0033 {
0034 public:
0035     enum ListenToWhat {
0036         ListenToList,
0037         ListenToNone,
0038     };
0039 
0040     explicit ClientPrivate(Client *q_);
0041     ~ClientPrivate();
0042 
0043     void init(const QStringList &subsystemList, ListenToWhat what);
0044     void setWatchedSubsystems(const QStringList &subsystemList);
0045     void _uq_monitorReadyRead(int fd);
0046     DeviceList deviceListFromEnumerate(struct udev_enumerate *en);
0047 
0048     struct udev *udev;
0049     struct udev_monitor *monitor;
0050     Client *q;
0051     QSocketNotifier *monitorNotifier;
0052     QStringList watchedSubsystems;
0053 };
0054 
0055 inline QStringList listFromListEntry(struct udev_list_entry *list)
0056 {
0057     QStringList ret;
0058     struct udev_list_entry *entry;
0059 
0060     udev_list_entry_foreach(entry, list)
0061     {
0062         ret << QString::fromLatin1(udev_list_entry_get_name(entry));
0063     }
0064     return ret;
0065 }
0066 
0067 }