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>
bb10
Hannu Lyytinen 2012-04-12 15:09:52 +03:00 committed by Qt by Nokia
parent 01b54bcd84
commit 5ab6a3270d
5 changed files with 305 additions and 3 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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