diff options
Diffstat (limited to 'src/sensors/qsensormanager.cpp')
-rw-r--r-- | src/sensors/qsensormanager.cpp | 105 |
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]; |