summaryrefslogtreecommitdiffstats
path: root/src/sensors/qsensormanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/sensors/qsensormanager.cpp')
-rw-r--r--src/sensors/qsensormanager.cpp105
1 files changed, 36 insertions, 69 deletions
diff --git a/src/sensors/qsensormanager.cpp b/src/sensors/qsensormanager.cpp
index 425a87b9..8ce509f4 100644
--- a/src/sensors/qsensormanager.cpp
+++ b/src/sensors/qsensormanager.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtSensors module 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/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 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include "qsensormanager.h"
#include <QDebug>
@@ -53,7 +17,7 @@ QT_BEGIN_NAMESPACE
typedef QHash<QByteArray,QSensorBackendFactory*> FactoryForIdentifierMap;
typedef QHash<QByteArray,FactoryForIdentifierMap> BackendIdentifiersForTypeMap;
-static QLoggingCategory sensorsCategory("qt.sensors");
+Q_LOGGING_CATEGORY(lcSensorManager, "qt.sensors");
class QSensorManagerPrivate : public QObject
{
@@ -96,19 +60,21 @@ public:
QString config = QString::fromLocal8Bit(QTSENSORS_CONFIG_PATH);
#else
QStringList configs = QStandardPaths::standardLocations(QStandardPaths::ConfigLocation);
- if (configs.count() == 0) return; // QStandardPaths is broken?
- QString config = configs.at(configs.count()-1);
- if (config.isEmpty()) return; // QStandardPaths is broken?
- config += QLatin1String("/QtProject/Sensors.conf");
+ QString config;
+ for (const QString& c : configs) {
+ config = c + QLatin1String("/QtProject/Sensors.conf");
+ if (QFile::exists(config))
+ break;
+ }
#endif
- qCDebug(sensorsCategory) << "Loading config from" << config;
+ qCDebug(lcSensorManager) << "Loading config from" << config;
if (!QFile::exists(config)) {
- qCDebug(sensorsCategory) << "There is no config file" << config;
+ qCDebug(lcSensorManager) << "There is no config file" << config;
return;
}
QFile cfgfile(config);
if (!cfgfile.open(QFile::ReadOnly)) {
- qCWarning(sensorsCategory) << "Can't open config file" << config;
+ qCWarning(lcSensorManager) << "Can't open config file" << config;
return;
}
@@ -121,9 +87,9 @@ public:
isconfig = true;
else if (isconfig) {
//read out setting line
- line.remove(' ');
- QStringList pair = line.split('=');
- if (pair.count() == 2)
+ line.remove(QLatin1String(" "));
+ QStringList pair = line.split(QStringLiteral("="));
+ if (pair.size() == 2)
defaultIdentifierForType.insert(pair[0].toLatin1(), pair[1].toLatin1());
}
}
@@ -159,9 +125,8 @@ public Q_SLOTS:
// until things stop changing.
do {
sensorsChanged = false;
- Q_FOREACH (QSensorChangesInterface *changes, changeListeners) {
+ for (QSensorChangesInterface *changes : changeListeners)
changes->sensorsChanged();
- }
} while (sensorsChanged);
// We're going away now so clear the flag
@@ -176,9 +141,9 @@ Q_GLOBAL_STATIC(QSensorManagerPrivate, sensorManagerPrivate)
static void initPlugin(QObject *o, bool warnOnFail = true)
{
- qCDebug(sensorsCategory) << "Init plugin" << o;
+ qCDebug(lcSensorManager) << "Init plugin" << o;
if (!o) {
- qCWarning(sensorsCategory) << "Null plugin" << o;
+ qCWarning(lcSensorManager) << "Null plugin" << o;
return;
}
@@ -186,7 +151,7 @@ static void initPlugin(QObject *o, bool warnOnFail = true)
if (!d) return; // hardly likely but just in case...
if (d->seenPlugins.contains(o)) {
- qCDebug(sensorsCategory) << "Plugin is seen" << o;
+ qCDebug(lcSensorManager) << "Plugin is seen" << o;
return;
}
@@ -197,11 +162,11 @@ static void initPlugin(QObject *o, bool warnOnFail = true)
QSensorPluginInterface *plugin = qobject_cast<QSensorPluginInterface*>(o);
if (plugin) {
- qCDebug(sensorsCategory) << "Register sensors for " << plugin;
+ qCDebug(lcSensorManager) << "Register sensors for " << plugin;
d->seenPlugins.insert(o);
plugin->registerSensors();
} else if (warnOnFail) {
- qCWarning(sensorsCategory) << "Can't cast to plugin" << o;
+ qCWarning(lcSensorManager) << "Can't cast to plugin" << o;
}
}
@@ -213,14 +178,12 @@ void QSensorManagerPrivate::loadPlugins()
SENSORLOG() << "initializing static plugins";
// Qt-style static plugins
- Q_FOREACH (QObject *plugin, QPluginLoader::staticInstances()) {
- initPlugin(plugin, false/*do not warn on fail*/);
- }
-
+ for (QObject *plugin : QPluginLoader::staticInstances())
+ initPlugin(plugin, false /*do not warn on fail*/);
if (d->loadExternalPlugins) {
SENSORLOG() << "initializing plugins";
- QList<QJsonObject> meta = d->loader->metaData();
- for (int i = 0; i < meta.count(); i++) {
+ QList<QPluginParsedMetaData> meta = d->loader->metaData();
+ for (qsizetype i = 0; i < meta.size(); i++) {
QObject *plugin = d->loader->instance(i);
initPlugin(plugin);
}
@@ -253,19 +216,23 @@ void QSensorManagerPrivate::loadPlugins()
Register a sensor for \a type. The \a identifier must be unique.
The \a factory will be asked to create instances of the backend.
+
+ Sensor identifiers starting with \c generic or \c dummy are given lower
+ priority when choosing the default sensor if other sensors are found.
*/
void QSensorManager::registerBackend(const QByteArray &type, const QByteArray &identifier, QSensorBackendFactory *factory)
{
- Q_ASSERT(type.count());
- Q_ASSERT(identifier.count());
+ Q_ASSERT(type.size());
+ Q_ASSERT(identifier.size());
Q_ASSERT(factory);
QSensorManagerPrivate *d = sensorManagerPrivate();
if (!d) return; // hardly likely but just in case...
if (!d->backendsByType.contains(type)) {
(void)d->backendsByType[type];
d->firstIdentifierForType[type] = identifier;
- } else if (d->firstIdentifierForType[type].startsWith("generic.")) {
- // Don't let a generic backend be the default when some other backend exists!
+ } else if (d->firstIdentifierForType[type].startsWith("generic.") ||
+ d->firstIdentifierForType[type].startsWith("dummy.")) {
+ // Don't let a generic or dummy backend be the default when some other backend exists!
d->firstIdentifierForType[type] = identifier;
}
FactoryForIdentifierMap &factoryByIdentifier = d->backendsByType[type];
@@ -304,7 +271,7 @@ void QSensorManager::unregisterBackend(const QByteArray &type, const QByteArray
(void)factoryByIdentifier.take(identifier); // we don't own this pointer anyway
if (d->firstIdentifierForType[type] == identifier) {
- if (factoryByIdentifier.count()) {
+ if (factoryByIdentifier.size()) {
d->firstIdentifierForType[type] = factoryByIdentifier.begin().key();
if (d->firstIdentifierForType[type].startsWith("generic.")) {
// Don't let a generic backend be the default when some other backend exists!
@@ -320,7 +287,7 @@ void QSensorManager::unregisterBackend(const QByteArray &type, const QByteArray
(void)d->firstIdentifierForType.take(type);
}
}
- if (!factoryByIdentifier.count())
+ if (!factoryByIdentifier.size())
(void)d->backendsByType.take(type);
// Notify the app that the available sensor list has changed.
@@ -361,7 +328,7 @@ QSensorBackend *QSensorManager::createBackend(QSensor *sensor)
if (backend) return backend; // Got it!
// The default failed to instantiate so try any other registered sensors for this type
- Q_FOREACH (const QByteArray &identifier, factoryByIdentifier.keys()) {
+ for (const QByteArray &identifier : factoryByIdentifier.keys()) {
SENSORLOG() << "Trying" << identifier;
if (identifier == defaultIdentifier) continue; // Don't do the default one again
factory = factoryByIdentifier[identifier];