sensorfw
abstractsensor_i.h
Go to the documentation of this file.
1
28
29#ifndef ABSTRACTSENSOR_I_H
30#define ABSTRACTSENSOR_I_H
31
32#include <QtDBus/QtDBus>
33#include <QList>
34#include <QVector>
35#include <QString>
36
37#include "sfwerror.h"
38#include "serviceinfo.h"
39#include "socketreader.h"
40#include "datatypes/datarange.h"
41
45class AbstractSensorChannelInterface : public QObject
46{
47 Q_OBJECT
48 Q_DISABLE_COPY(AbstractSensorChannelInterface)
49 Q_PROPERTY(int sessionId READ sessionId)
51 Q_PROPERTY(QString errorString READ errorString)
52 Q_PROPERTY(QString description READ description)
53 Q_PROPERTY(QString id READ id)
54 Q_PROPERTY(int dataRate READ dataRate WRITE setDataRate)
55 Q_PROPERTY(int interval READ interval WRITE setInterval)
57 Q_PROPERTY(QString type READ type)
58 Q_PROPERTY(unsigned int bufferInterval READ bufferInterval WRITE setBufferInterval)
59 Q_PROPERTY(unsigned int bufferSize READ bufferSize WRITE setBufferSize)
60 Q_PROPERTY(bool hwBuffering READ hwBuffering)
61 Q_PROPERTY(bool downsampling READ downsampling WRITE setDownsampling)
62
63public:
68
75 bool release();
76
82 int sessionId() const;
83
90
96 QString errorString();
97
103 QString description();
104
110 QString id();
111
119 int interval();
120 double dataRate();
121
129 void setInterval(int interval_ms);
130
138 void setDataRate(double dataRate_Hz);
139
148
157 bool setStandbyOverride(bool override);
158
165 unsigned int bufferInterval();
166
174 void setBufferInterval(unsigned int interval_ms);
175
184
194 bool setDownsampling(bool value);
195
202
209 unsigned int bufferSize();
210
217 void setBufferSize(unsigned int value);
218
226
232 QString type();
233
240 virtual QDBusReply<void> start();
241
247 virtual QDBusReply<void> stop();
248
255
262
269
277
282
290 bool setDataRangeIndex(int dataRangeIndex);
291
298
305 bool isValid() const;
306
307private:
314 void setError(SensorError errorCode, const QString& errorString);
315
319 void clearError();
320
324 SocketReader& getSocketReader() const;
325
326private Q_SLOTS: // METHODS
327
328 void displayStateChanged(bool displayState);
329
337 QDBusReply<void> setInterval(int sessionId, int interval_ms);
338
346 QDBusReply<void> setDataRate(int sessionId, double dataRate_Hz);
347
355 QDBusReply<bool> setStandbyOverride(int sessionId, bool value);
356
364 QDBusReply<void> setBufferInterval(int sessionId, unsigned int interval_ms);
365
373 QDBusReply<void> setBufferSize(int sessionId, unsigned int value);
374
382 QDBusReply<void> setDownsampling(int sessionId, bool value);
383
390 QDBusReply<void> start(int sessionId);
391
398 QDBusReply<void> stop(int sessionId);
399
403 void dataReceived();
404
405protected:
413 AbstractSensorChannelInterface(const QString& path, const char* interfaceName, int sessionId);
414
421 bool read(void* buffer, int size);
422
430 template<typename T>
431 bool read(QVector<T>& values);
432
439 virtual bool dataReceivedImpl() = 0;
440
449 template<typename T>
450 T getAccessor(const char* name);
451
460 template<typename T>
461 void setAccessor(const char* name, const T& value);
462
467 QDBusMessage call(QDBus::CallMode mode,
468 const QString& method,
469 const QVariant& arg1 = QVariant(),
470 const QVariant& arg2 = QVariant(),
471 const QVariant& arg3 = QVariant(),
472 const QVariant& arg4 = QVariant(),
473 const QVariant& arg5 = QVariant(),
474 const QVariant& arg6 = QVariant(),
475 const QVariant& arg7 = QVariant(),
476 const QVariant& arg8 = QVariant());
477
482 QDBusMessage callWithArgumentList(QDBus::CallMode mode, const QString& method, const QList<QVariant>& args);
483
488 void dbusConnectNotify(const QMetaMethod& signal);
489protected slots:
490 void startFinished(QDBusPendingCallWatcher *watch);
491 void stopFinished(QDBusPendingCallWatcher *watch);
492
493 void setIntervalFinished(QDBusPendingCallWatcher *watch);
494 void setDataRateFinished(QDBusPendingCallWatcher *watch);
495 void setBufferIntervalFinished(QDBusPendingCallWatcher *watch);
496 void setBufferSizeFinished(QDBusPendingCallWatcher *watch);
497 void setStandbyOverrideFinished(QDBusPendingCallWatcher *watch);
498 void setDownsamplingFinished(QDBusPendingCallWatcher *watch);
499 void setDataRangeIndexFinished(QDBusPendingCallWatcher *watch);
500
501
502private:
503 struct AbstractSensorChannelInterfaceImpl;
504
505 AbstractSensorChannelInterfaceImpl* pimpl_;
506};
507
508template<typename T>
509bool AbstractSensorChannelInterface::read(QVector<T>& values)
510{
511 return getSocketReader().read(values);
512}
513
514template<typename T>
516{
517 QDBusReply<T> reply(call(QDBus::Block, QLatin1String(name)));
518 if (!reply.isValid()) {
519 qDebug() << "Failed to get '" << name << "' from sensord: " << reply.error().message();
520 return T();
521 }
522 return reply.value();
523}
524
525template<typename T>
526void AbstractSensorChannelInterface::setAccessor(const char* name, const T& value)
527{
528 QDBusReply<void> reply(call(QDBus::NoBlock, QLatin1String(name), QVariant::fromValue(value)));
529 if (!reply.isValid()) {
530 qDebug() << "Failed to set '" << name << " = " << value << "' to sensord: " << reply.error().message();
531 }
532}
533
537
538#endif
Base-class for client facades of different sensor types.
void setBufferIntervalFinished(QDBusPendingCallWatcher *watch)
void setAccessor(const char *name, const T &value)
Utility for calling DBus methods from current connection which return nothing and take one arg.
DataRangeList getAvailableDataRanges()
Get the list of available data ranges for the sensor.
bool read(void *buffer, int size)
Read data from socket into buffer.
virtual QDBusReply< void > start()
Start sensor.
void startFinished(QDBusPendingCallWatcher *watch)
bool isValid() const
Does the current instance have valid connection established to sensor daemon.
virtual QDBusReply< void > stop()
Stop sensor.
QDBusMessage call(QDBus::CallMode mode, const QString &method, const QVariant &arg1=QVariant(), const QVariant &arg2=QVariant(), const QVariant &arg3=QVariant(), const QVariant &arg4=QVariant(), const QVariant &arg5=QVariant(), const QVariant &arg6=QVariant(), const QVariant &arg7=QVariant(), const QVariant &arg8=QVariant())
Wrapper for function of QDBusAbstractInterface.
IntegerRangeList getAvailableBufferSizes()
Returns list of available buffer sizes.
void setInterval(int interval_ms)
Set sensor sampling interval (in millisecs).
void setBufferInterval(unsigned int interval_ms)
Set buffer interval.
T getAccessor(const char *name)
Utility for calling DBus methods from current connection which return value and take no args.
void setBufferSizeFinished(QDBusPendingCallWatcher *watch)
void setIntervalFinished(QDBusPendingCallWatcher *watch)
void setBufferSize(unsigned int value)
Set buffer size.
void dbusConnectNotify(const QMetaMethod &signal)
Wrapper for function of QDBusAbstractInterface.
void setDataRateFinished(QDBusPendingCallWatcher *watch)
bool setDownsampling(bool value)
Enable or disable downsampling.
DataRangeList getAvailableIntervals()
Get the list of available intervals ranges for the sensor.
void setDataRangeIndexFinished(QDBusPendingCallWatcher *watch)
void requestDataRange(DataRange range)
Request data range.
void removeDataRangeRequest()
Remove set data range request.
bool setStandbyOverride(bool override)
Enable or disable standby-override.
bool release()
Release the sensor instance.
DataRange getCurrentDataRange()
Get current used data range.
bool setDataRangeIndex(int dataRangeIndex)
Request data range by using index which points to the list returned by getAvailableDataRanges().
void stopFinished(QDBusPendingCallWatcher *watch)
void setStandbyOverrideFinished(QDBusPendingCallWatcher *watch)
IntegerRangeList getAvailableBufferIntervals()
Returns list of available buffer interval ranges.
QDBusMessage callWithArgumentList(QDBus::CallMode mode, const QString &method, const QList< QVariant > &args)
Wrapper for function of QDBusAbstractInterface.
void setDataRate(double dataRate_Hz)
Set sensor sampling frequency (in Hertz).
AbstractSensorChannelInterface(const QString &path, const char *interfaceName, int sessionId)
Constructor.
void setDownsamplingFinished(QDBusPendingCallWatcher *watch)
virtual bool dataReceivedImpl()=0
Callback for subclasses in which they must read their expected data from socket.
Datatype for storing sensor data range information.
Definition datarange.h:46
Helper class for reading socket datachannel from sensord.
Datatype containing sensor data range and resolution.
QList< IntegerRange > IntegerRangeList
Definition datarange.h:38
QList< DataRange > DataRangeList
Definition datarange.h:105
::AbstractSensorChannelInterface AbstractSensor
Sensor service information.
Error definitions.
SensorError
Enumeration about sensor error states.
Definition sfwerror.h:54
SocketReader helper class for sensor interface.