summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHannu Lyytinen <hannu.lyytinen@nomovok.com>2012-04-12 15:09:52 +0300
committerQt by Nokia <qt-info@nokia.com>2012-04-13 08:33:37 +0200
commit5ab6a3270d1121fb4d50c3f79f497a9c52d5afa8 (patch)
treeaf927a92c8e473b746abd62a5f186bf320eaa76d
parent01b54bcd84d9a2129f2db4fe03a5f331f9eec203 (diff)
Implement basic bits for device autodetection via udev.
The graphics cards and eventually the input devices need to be resolved via udev. This commit adds a listener class and an abstract base class for writing device specific handlers. Change-Id: I62784c98bc7ad4bc1431d61cd5f13c8b48edf330 Reviewed-by: Andy Nichols <andy.nichols@nokia.com>
-rw-r--r--src/plugins/platforms/kms/kms.pro10
-rw-r--r--src/plugins/platforms/kms/qkmsudevhandler.cpp55
-rw-r--r--src/plugins/platforms/kms/qkmsudevhandler.h64
-rw-r--r--src/plugins/platforms/kms/qkmsudevlistener.cpp101
-rw-r--r--src/plugins/platforms/kms/qkmsudevlistener.h78
5 files changed, 305 insertions, 3 deletions
diff --git a/src/plugins/platforms/kms/kms.pro b/src/plugins/platforms/kms/kms.pro
index 93d972abe8..7c0cc79160 100644
--- a/src/plugins/platforms/kms/kms.pro
+++ b/src/plugins/platforms/kms/kms.pro
@@ -8,7 +8,7 @@ DEFINES += MESA_EGL_NO_X11_HEADERS
CONFIG += link_pkgconfig egl qpa/genericunixfontdatabase
-PKGCONFIG += libdrm egl gbm glesv2
+PKGCONFIG += libdrm libudev egl gbm glesv2
SOURCES = main.cpp \
qkmsintegration.cpp \
@@ -19,7 +19,9 @@ SOURCES = main.cpp \
qkmsdevice.cpp \
qkmsbuffermanager.cpp \
qkmsbackingstore.cpp \
- qkmsnativeinterface.cpp
+ qkmsnativeinterface.cpp \
+ qkmsudevlistener.cpp \
+ qkmsudevhandler.cpp
HEADERS = qkmsintegration.h \
qkmsscreen.h \
qkmscontext.h \
@@ -28,7 +30,9 @@ HEADERS = qkmsintegration.h \
qkmsdevice.h \
qkmsbuffermanager.h \
qkmsbackingstore.h \
- qkmsnativeinterface.h
+ qkmsnativeinterface.h \
+ qkmsudevlistener.h \
+ qkmsudevhandler.h
target.path += $$[QT_INSTALL_PLUGINS]/platforms
INSTALLS += target
diff --git a/src/plugins/platforms/kms/qkmsudevhandler.cpp b/src/plugins/platforms/kms/qkmsudevhandler.cpp
new file mode 100644
index 0000000000..c0ec4c4ba1
--- /dev/null
+++ b/src/plugins/platforms/kms/qkmsudevhandler.cpp
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** 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, Nokia gives you certain additional
+** rights. These rights are described in the Nokia 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.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+**
+** $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
new file mode 100644
index 0000000000..4870809927
--- /dev/null
+++ b/src/plugins/platforms/kms/qkmsudevhandler.h
@@ -0,0 +1,64 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** 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, Nokia gives you certain additional
+** rights. These rights are described in the Nokia 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.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+**
+** $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
new file mode 100644
index 0000000000..c0a933b57b
--- /dev/null
+++ b/src/plugins/platforms/kms/qkmsudevlistener.cpp
@@ -0,0 +1,101 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** 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, Nokia gives you certain additional
+** rights. These rights are described in the Nokia 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.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+**
+** $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
new file mode 100644
index 0000000000..3d87cfe662
--- /dev/null
+++ b/src/plugins/platforms/kms/qkmsudevlistener.h
@@ -0,0 +1,78 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** 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, Nokia gives you certain additional
+** rights. These rights are described in the Nokia 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.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+**
+** $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