diff options
author | Hannu Lyytinen <hannu.lyytinen@nomovok.com> | 2012-04-19 00:34:29 +0300 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-06-08 15:14:00 +0200 |
commit | 062974bf1f147ac848b095e584331f8aa7a114dd (patch) | |
tree | a3079969bbec531d612516e408a1cd8c002a30df /src/plugins/platforms/kms | |
parent | d8a6a67579fe5f3a6b70b6774b6eee00a55834d5 (diff) |
Use QUDeviceHelper instead of custom code.
Avoid duplicating udev handling code here.
Change-Id: I054b6616ead57aa8947dcf942177dfc8a14a00fe
Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
Diffstat (limited to 'src/plugins/platforms/kms')
-rw-r--r-- | src/plugins/platforms/kms/kms.pro | 6 | ||||
-rw-r--r-- | src/plugins/platforms/kms/qkmsintegration.cpp | 31 | ||||
-rw-r--r-- | src/plugins/platforms/kms/qkmsintegration.h | 14 | ||||
-rw-r--r-- | src/plugins/platforms/kms/qkmsudevdrmhandler.cpp | 66 | ||||
-rw-r--r-- | src/plugins/platforms/kms/qkmsudevdrmhandler.h | 66 | ||||
-rw-r--r-- | src/plugins/platforms/kms/qkmsudevhandler.cpp | 55 | ||||
-rw-r--r-- | src/plugins/platforms/kms/qkmsudevhandler.h | 64 | ||||
-rw-r--r-- | src/plugins/platforms/kms/qkmsudevlistener.cpp | 101 | ||||
-rw-r--r-- | src/plugins/platforms/kms/qkmsudevlistener.h | 78 |
9 files changed, 29 insertions, 452 deletions
diff --git a/src/plugins/platforms/kms/kms.pro b/src/plugins/platforms/kms/kms.pro index 711cf9e5c7..612a878736 100644 --- a/src/plugins/platforms/kms/kms.pro +++ b/src/plugins/platforms/kms/kms.pro @@ -22,9 +22,6 @@ SOURCES = main.cpp \ qkmsdevice.cpp \ qkmsbackingstore.cpp \ qkmsnativeinterface.cpp \ - qkmsudevlistener.cpp \ - qkmsudevhandler.cpp \ - qkmsudevdrmhandler.cpp \ qkmsvthandler.cpp HEADERS = qkmsintegration.h \ qkmsscreen.h \ @@ -34,9 +31,6 @@ HEADERS = qkmsintegration.h \ qkmsdevice.h \ qkmsbackingstore.h \ qkmsnativeinterface.h \ - qkmsudevlistener.h \ - qkmsudevhandler.h \ - qkmsudevdrmhandler.h \ qkmsvthandler.h OTHER_FILES += \ diff --git a/src/plugins/platforms/kms/qkmsintegration.cpp b/src/plugins/platforms/kms/qkmsintegration.cpp index 8210b54535..e0cc33a606 100644 --- a/src/plugins/platforms/kms/qkmsintegration.cpp +++ b/src/plugins/platforms/kms/qkmsintegration.cpp @@ -46,8 +46,6 @@ #include "qkmsbackingstore.h" #include "qkmscontext.h" #include "qkmsnativeinterface.h" -#include "qkmsudevlistener.h" -#include "qkmsudevdrmhandler.h" #include "qkmsvthandler.h" #include <QtPlatformSupport/private/qgenericunixeventdispatcher_p.h> @@ -62,18 +60,26 @@ QKmsIntegration::QKmsIntegration() : QPlatformIntegration(), m_fontDatabase(new QGenericUnixFontDatabase()), m_eventDispatcher(createUnixEventDispatcher()), - m_nativeInterface(new QKmsNativeInterface), - m_udevListener(new QKmsUdevListener) + m_nativeInterface(new QKmsNativeInterface) { QGuiApplicationPrivate::instance()->setEventDispatcher(m_eventDispatcher); setenv("EGL_PLATFORM", "drm",1); m_vtHandler = new QKmsVTHandler; - m_drmHandler = new QKmsUdevDRMHandler(this); - m_udevListener->addHandler(m_drmHandler); + + m_deviceDiscovery = QDeviceDiscovery::create(QDeviceDiscovery::Device_DRM, 0); + if (m_deviceDiscovery) { + QStringList devices = m_deviceDiscovery->scanConnectedDevices(); + foreach (QString device, devices) + addDevice(device); + + connect(m_deviceDiscovery, SIGNAL(deviceDetected(QString)), this, SLOT(addDevice(QString))); + connect(m_deviceDiscovery, SIGNAL(deviceRemoved(QString)), this, SLOT(removeDevice(QString))); + } } QKmsIntegration::~QKmsIntegration() { + delete m_deviceDiscovery; foreach (QKmsDevice *device, m_devices) { delete device; } @@ -81,15 +87,18 @@ QKmsIntegration::~QKmsIntegration() delete screen; } delete m_fontDatabase; - delete m_udevListener; delete m_vtHandler; } -QObject *QKmsIntegration::createDevice(const char *path) +void QKmsIntegration::addDevice(const QString &deviceNode) +{ + m_devices.append(new QKmsDevice(deviceNode, this)); +} + +void QKmsIntegration::removeDevice(const QString &deviceNode) { - QKmsDevice *device = new QKmsDevice(path, this); - m_devices.append(device); - return device; + // TODO: support hot-plugging some day? + Q_UNUSED(deviceNode); } bool QKmsIntegration::hasCapability(QPlatformIntegration::Capability cap) const diff --git a/src/plugins/platforms/kms/qkmsintegration.h b/src/plugins/platforms/kms/qkmsintegration.h index c08396ba3f..5069753aa5 100644 --- a/src/plugins/platforms/kms/qkmsintegration.h +++ b/src/plugins/platforms/kms/qkmsintegration.h @@ -44,17 +44,18 @@ #include <qpa/qplatformintegration.h> #include <qpa/qplatformnativeinterface.h> +#include <QtPlatformSupport/private/qdevicediscovery_p.h> QT_BEGIN_NAMESPACE class QKmsScreen; class QKmsDevice; -class QKmsUdevListener; -class QKmsUdevDRMHandler; class QKmsVTHandler; -class QKmsIntegration : public QPlatformIntegration +class QKmsIntegration : public QObject, public QPlatformIntegration { + Q_OBJECT + public: QKmsIntegration(); ~QKmsIntegration(); @@ -73,6 +74,10 @@ public: void addScreen(QKmsScreen *screen); QObject *createDevice(const char *); +private slots: + void addDevice(const QString &deviceNode); + void removeDevice(const QString &deviceNode); + private: QStringList findDrmDevices(); @@ -81,9 +86,8 @@ private: QPlatformFontDatabase *m_fontDatabase; QAbstractEventDispatcher *m_eventDispatcher; QPlatformNativeInterface *m_nativeInterface; - QKmsUdevListener *m_udevListener; - QKmsUdevDRMHandler *m_drmHandler; QKmsVTHandler *m_vtHandler; + QDeviceDiscovery *m_deviceDiscovery; }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/kms/qkmsudevdrmhandler.cpp b/src/plugins/platforms/kms/qkmsudevdrmhandler.cpp deleted file mode 100644 index 68a4aaacdb..0000000000 --- a/src/plugins/platforms/kms/qkmsudevdrmhandler.cpp +++ /dev/null @@ -1,66 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtCore/QRegExp> - -#include <qkmsintegration.h> -#include <qkmsudevdrmhandler.h> - -QT_BEGIN_NAMESPACE - -QKmsUdevDRMHandler::QKmsUdevDRMHandler(QKmsIntegration *integration) - : m_integration(integration) -{ -} - -QObject *QKmsUdevDRMHandler::create(struct udev_device *device) -{ - if (strcmp(udev_device_get_subsystem(device), "drm")) - return 0; - - QRegExp regexp("^card\\d+$"); - if (!regexp.exactMatch(udev_device_get_sysname(device))) - return 0; - - return m_integration->createDevice(udev_device_get_devnode(device)); -} - -QT_END_NAMESPACE diff --git a/src/plugins/platforms/kms/qkmsudevdrmhandler.h b/src/plugins/platforms/kms/qkmsudevdrmhandler.h deleted file mode 100644 index 4ceecb11a8..0000000000 --- a/src/plugins/platforms/kms/qkmsudevdrmhandler.h +++ /dev/null @@ -1,66 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QKMSUDEVDRMHANDLER_H -#define QKMSUDEVDRMHANDLER_H - -#include <QObject> - -#include <qkmsudevhandler.h> - -QT_BEGIN_NAMESPACE - -class QKmsIntegration; - -class QKmsUdevDRMHandler : public QKmsUdevHandler -{ -public: - QKmsUdevDRMHandler(QKmsIntegration *integration); - - QObject *create(struct udev_device *device); - -private: - QKmsIntegration *m_integration; -}; - -QT_END_NAMESPACE - -#endif // QKMSUDEVDRMHANDLER_H diff --git a/src/plugins/platforms/kms/qkmsudevhandler.cpp b/src/plugins/platforms/kms/qkmsudevhandler.cpp deleted file mode 100644 index e32723e78f..0000000000 --- a/src/plugins/platforms/kms/qkmsudevhandler.cpp +++ /dev/null @@ -1,55 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <qkmsudevhandler.h> - -QT_BEGIN_NAMESPACE - -QKmsUdevHandler::QKmsUdevHandler(QObject *parent) - : QObject(parent) -{ -} - -QKmsUdevHandler::~QKmsUdevHandler() -{ -} - -QT_END_NAMESPACE diff --git a/src/plugins/platforms/kms/qkmsudevhandler.h b/src/plugins/platforms/kms/qkmsudevhandler.h deleted file mode 100644 index e95960628a..0000000000 --- a/src/plugins/platforms/kms/qkmsudevhandler.h +++ /dev/null @@ -1,64 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QKMSUDEVHANDLER_H -#define QKMSUDEVHANDLER_H - -#include <QObject> - -#include <libudev.h> - -QT_BEGIN_NAMESPACE - -class QKmsUdevHandler : public QObject -{ - Q_OBJECT - -public: - QKmsUdevHandler(QObject *parent = 0); - virtual ~QKmsUdevHandler(); - - virtual QObject *create(struct udev_device *) = 0; -}; - -QT_END_NAMESPACE - -#endif // QKMSUDEVHANDLER_H diff --git a/src/plugins/platforms/kms/qkmsudevlistener.cpp b/src/plugins/platforms/kms/qkmsudevlistener.cpp deleted file mode 100644 index b2fb110479..0000000000 --- a/src/plugins/platforms/kms/qkmsudevlistener.cpp +++ /dev/null @@ -1,101 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <qkmsudevlistener.h> - -QT_BEGIN_NAMESPACE - -QKmsUdevListener::QKmsUdevListener(QObject *parent) - : QObject(parent) -{ - m_udev = udev_new(); -} - -QKmsUdevListener::~QKmsUdevListener() -{ - udev_unref(m_udev); -} - -void QKmsUdevListener::addHandler(QKmsUdevHandler *handler) -{ - m_handlers.removeAll((QKmsUdevHandler *) 0); - m_handlers.removeAll(handler); - m_handlers.prepend(handler); - - scan(); -} - -bool QKmsUdevListener::create(struct udev_device *device) -{ - foreach (QKmsUdevHandler *handler, m_handlers) { - if (!handler) - continue; - - QObject *obj = handler->create(device); - if (obj) { - m_devices[udev_device_get_syspath(device)] = obj; - return true; - } - } - - return false; -} - -void QKmsUdevListener::scan() -{ - struct udev_enumerate *e; - struct udev_list_entry *entry; - - e = udev_enumerate_new(m_udev); - udev_enumerate_scan_devices(e); - udev_list_entry_foreach(entry, udev_enumerate_get_list_entry(e)) { - const char *path = udev_list_entry_get_name(entry); - if (m_devices.contains(path)) - continue; - - struct udev_device *device = udev_device_new_from_syspath(m_udev, path); - create(device); - udev_device_unref(device); - } - udev_enumerate_unref(e); -} - -QT_END_NAMESPACE diff --git a/src/plugins/platforms/kms/qkmsudevlistener.h b/src/plugins/platforms/kms/qkmsudevlistener.h deleted file mode 100644 index 7534f0bcd3..0000000000 --- a/src/plugins/platforms/kms/qkmsudevlistener.h +++ /dev/null @@ -1,78 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QKMSUDEVLISTENER_H -#define QKMSUDEVLISTENER_H - -#include <QObject> -#include <QMap> -#include <QList> -#include <QPointer> -#include <QString> - -#include <qkmsudevhandler.h> - -#include <libudev.h> - -QT_BEGIN_NAMESPACE - -class QKmsUdevListener : public QObject -{ - Q_OBJECT - -public: - QKmsUdevListener(QObject *parent = 0); - ~QKmsUdevListener(); - - void addHandler(QKmsUdevHandler *); - -private: - QList<QPointer<QKmsUdevHandler> > m_handlers; - QMap<QString, QPointer<QObject> > m_devices; - struct udev *m_udev; - - void scan(); - bool create(struct udev_device *); -}; - -QT_END_NAMESPACE - -#endif // QKMSUDEVLISTENER_H |