summaryrefslogtreecommitdiffstats
path: root/src/qtmsensors/qsensor.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/qtmsensors/qsensor.h')
-rw-r--r--src/qtmsensors/qsensor.h254
1 files changed, 254 insertions, 0 deletions
diff --git a/src/qtmsensors/qsensor.h b/src/qtmsensors/qsensor.h
new file mode 100644
index 00000000..b8a0291a
--- /dev/null
+++ b/src/qtmsensors/qsensor.h
@@ -0,0 +1,254 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtSensors module 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 QTM_QSENSOR_H
+#define QTM_QSENSOR_H
+
+#include <QtCore/QObject>
+#include <QtCore/QByteArray>
+#include <QtCore/QMetaType>
+#include <QtCore/QVariant>
+#include <QtCore/QPair>
+
+#include "qtmsensorsglobal.h"
+
+QT_BEGIN_NAMESPACE
+QTM_BEGIN_NAMESPACE
+
+class QSensorPrivate;
+class QSensorReading;
+class QSensorReadingPrivate;
+class QSensorFilter;
+
+// This type is no longer used in the API but third party apps may be using it
+typedef quint64 qtimestamp;
+
+typedef QPair<int,int> qrange;
+typedef QList<qrange> qrangelist;
+struct qoutputrange
+{
+ qreal minimum;
+ qreal maximum;
+ qreal accuracy;
+};
+typedef QList<qoutputrange> qoutputrangelist;
+
+class QTM_SENSORS_EXPORT QSensor : public QObject
+{
+ friend class QSensorBackend;
+
+ Q_OBJECT
+ Q_PROPERTY(QByteArray sensorid READ identifier WRITE setIdentifier)
+ Q_PROPERTY(QByteArray type READ type)
+ Q_PROPERTY(bool connectedToBackend READ isConnectedToBackend)
+ Q_PROPERTY(qrangelist availableDataRates READ availableDataRates)
+ Q_PROPERTY(int dataRate READ dataRate WRITE setDataRate)
+ Q_PROPERTY(QSensorReading* reading READ reading NOTIFY readingChanged)
+ Q_PROPERTY(bool busy READ isBusy)
+ Q_PROPERTY(bool active READ isActive WRITE setActive NOTIFY activeChanged)
+ Q_PROPERTY(qoutputrangelist outputRanges READ outputRanges)
+ Q_PROPERTY(int outputRange READ outputRange WRITE setOutputRange)
+ Q_PROPERTY(QString description READ description)
+ Q_PROPERTY(int error READ error NOTIFY sensorError)
+#ifdef Q_QDOC
+ Q_PROPERTY(int maxBufferSize)
+ Q_PROPERTY(int efficientBufferSize)
+ Q_PROPERTY(int bufferSize)
+#endif
+public:
+ explicit QSensor(const QByteArray &type, QObject *parent = 0);
+ virtual ~QSensor();
+
+ QByteArray identifier() const;
+ void setIdentifier(const QByteArray &identifier);
+
+ QByteArray type() const;
+
+ Q_INVOKABLE bool connectToBackend();
+ bool isConnectedToBackend() const;
+
+ bool isBusy() const;
+
+ void setActive(bool active);
+ bool isActive() const;
+
+ qrangelist availableDataRates() const;
+ int dataRate() const;
+ void setDataRate(int rate);
+
+ qoutputrangelist outputRanges() const;
+ int outputRange() const;
+ void setOutputRange(int index);
+
+ QString description() const;
+ int error() const;
+
+ // Filters modify the reading
+ void addFilter(QSensorFilter *filter);
+ void removeFilter(QSensorFilter *filter);
+ QList<QSensorFilter*> filters() const;
+
+ // The readings are exposed via this object
+ QSensorReading *reading() const;
+
+ // Information about available sensors
+ // These functions are implemented in qsensormanager.cpp
+ static QList<QByteArray> sensorTypes();
+ static QList<QByteArray> sensorsForType(const QByteArray &type);
+ static QByteArray defaultSensorForType(const QByteArray &type);
+
+ // These are here so we can catch dynamic properties and share
+ // them with the non-legacy sensor that is being wrapped
+ void setProperty(const char *name, const QVariant &value);
+ QVariant property(const char *name) const;
+
+public Q_SLOTS:
+ // Start receiving values from the sensor
+ bool start();
+
+ // Stop receiving values from the sensor
+ void stop();
+
+Q_SIGNALS:
+ void busyChanged();
+ void activeChanged();
+ void readingChanged();
+ void sensorError(int error);
+ void availableSensorsChanged();
+
+protected:
+ // called by the back end
+ QSensorPrivate *d_func() const { return d.data(); }
+
+private:
+ void registerInstance();
+
+ QScopedPointer<QSensorPrivate> d;
+ Q_DISABLE_COPY(QSensor)
+};
+
+class QTM_SENSORS_EXPORT QSensorFilter
+{
+ friend class QSensor;
+public:
+ virtual bool filter(QSensorReading *reading) = 0;
+protected:
+ QSensorFilter();
+ ~QSensorFilter();
+ virtual void setSensor(QSensor *sensor);
+ QSensor *m_sensor;
+};
+
+class QTM_SENSORS_EXPORT QSensorReading : public QObject
+{
+ friend class QSensorBackend;
+
+ Q_OBJECT
+ Q_PROPERTY(quint64 timestamp READ timestamp)
+public:
+ virtual ~QSensorReading();
+
+ quint64 timestamp() const;
+ void setTimestamp(quint64 timestamp);
+
+ // Access properties of sub-classes by numeric index
+ // For name-based access use QObject::property()
+ int valueCount() const;
+ QVariant value(int index) const;
+
+protected:
+ explicit QSensorReading(QObject *parent, QSensorReadingPrivate *d);
+ QScopedPointer<QSensorReadingPrivate> *d_ptr() { return &d; }
+ virtual void copyValuesFrom(QSensorReading *other);
+
+private:
+ QScopedPointer<QSensorReadingPrivate> d;
+ Q_DISABLE_COPY(QSensorReading)
+};
+
+#undef DECLARE_READING
+#undef DECLARE_READING_D
+#undef IMPLEMENT_READING
+#undef IMPLEMENT_READING_D
+
+#define DECLARE_READING(classname)\
+ DECLARE_READING_D(classname, classname ## Private)
+
+#define DECLARE_READING_D(classname, pclassname)\
+ public:\
+ classname(QObject *parent = 0);\
+ virtual ~classname();\
+ void copyValuesFrom(QSensorReading *other);\
+ private:\
+ QScopedPointer<pclassname> d;
+
+#define IMPLEMENT_READING(classname)\
+ IMPLEMENT_READING_D(classname, classname ## Private)
+
+#define IMPLEMENT_READING_D(classname, pclassname)\
+ classname::classname(QObject *parent)\
+ : QSensorReading(parent, 0)\
+ , d(new pclassname)\
+ {}\
+ classname::~classname() {}\
+ void classname::copyValuesFrom(QSensorReading *_other)\
+ {\
+ /* No need to verify types, only called by QSensorBackend */\
+ classname *other = static_cast<classname *>(_other);\
+ pclassname *my_ptr = d.data();\
+ pclassname *other_ptr = other->d.data();\
+ /* Do a direct copy of the private class */\
+ *(my_ptr) = *(other_ptr);\
+ /* We need to copy the parent too */\
+ QSensorReading::copyValuesFrom(_other);\
+ }
+
+QTM_END_NAMESPACE
+QT_END_NAMESPACE
+
+#if 0
+Q_DECLARE_METATYPE(QTM_PREPEND_NAMESPACE(qrange))
+Q_DECLARE_METATYPE(QTM_PREPEND_NAMESPACE(qrangelist))
+Q_DECLARE_METATYPE(QTM_PREPEND_NAMESPACE(qoutputrangelist))
+#endif
+
+#endif
+