sensorfw
abstractsensor_i.h
Go to the documentation of this file.
1
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)
50 Q_PROPERTY(SensorError errorCode READ errorCode)
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 interval READ interval WRITE setInterval)
55 Q_PROPERTY(bool standbyOverride READ standbyOverride WRITE setStandbyOverride)
56 Q_PROPERTY(QString type READ type)
57 Q_PROPERTY(unsigned int bufferInterval READ bufferInterval WRITE setBufferInterval)
58 Q_PROPERTY(unsigned int bufferSize READ bufferSize WRITE setBufferSize)
59 Q_PROPERTY(bool hwBuffering READ hwBuffering)
60 Q_PROPERTY(bool downsampling READ downsampling WRITE setDownsampling)
61
62public:
63
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
128 void setInterval(int value);
129
138
147 bool setStandbyOverride(bool override);
148
155 unsigned int bufferInterval();
156
164 void setBufferInterval(unsigned int value);
165
174
184 bool setDownsampling(bool value);
185
192
199 unsigned int bufferSize();
200
207 void setBufferSize(unsigned int value);
208
216
222 QString type();
223
230 virtual QDBusReply<void> start();
231
237 virtual QDBusReply<void> stop();
238
245
252
259
267
272
280 bool setDataRangeIndex(int dataRangeIndex);
281
288
295 bool isValid() const;
296
297private:
304 void setError(SensorError errorCode, const QString& errorString);
305
309 void clearError();
310
314 SocketReader& getSocketReader() const;
315
316private Q_SLOTS: // METHODS
317
318 void displayStateChanged(bool displayState);
319
327 QDBusReply<void> setInterval(int sessionId, int value);
328
336 QDBusReply<bool> setStandbyOverride(int sessionId, bool value);
337
345 QDBusReply<void> setBufferInterval(int sessionId, unsigned int value);
346
354 QDBusReply<void> setBufferSize(int sessionId, unsigned int value);
355
363 QDBusReply<void> setDownsampling(int sessionId, bool value);
364
371 QDBusReply<void> start(int sessionId);
372
379 QDBusReply<void> stop(int sessionId);
380
384 void dataReceived();
385
386protected:
394 AbstractSensorChannelInterface(const QString& path, const char* interfaceName, int sessionId);
395
402 bool read(void* buffer, int size);
403
411 template<typename T>
412 bool read(QVector<T>& values);
413
420 virtual bool dataReceivedImpl() = 0;
421
430 template<typename T>
431 T getAccessor(const char* name);
432
441 template<typename T>
442 void setAccessor(const char* name, const T& value);
443
448 QDBusMessage call(QDBus::CallMode mode,
449 const QString& method,
450 const QVariant& arg1 = QVariant(),
451 const QVariant& arg2 = QVariant(),
452 const QVariant& arg3 = QVariant(),
453 const QVariant& arg4 = QVariant(),
454 const QVariant& arg5 = QVariant(),
455 const QVariant& arg6 = QVariant(),
456 const QVariant& arg7 = QVariant(),
457 const QVariant& arg8 = QVariant());
458
463 QDBusMessage callWithArgumentList(QDBus::CallMode mode, const QString& method, const QList<QVariant>& args);
464
469 void dbusConnectNotify(const QMetaMethod& signal);
470protected slots:
471 void startFinished(QDBusPendingCallWatcher *watch);
472 void stopFinished(QDBusPendingCallWatcher *watch);
473
474 void setIntervalFinished(QDBusPendingCallWatcher *watch);
475 void setBufferIntervalFinished(QDBusPendingCallWatcher *watch);
476 void setBufferSizeFinished(QDBusPendingCallWatcher *watch);
477 void setStandbyOverrideFinished(QDBusPendingCallWatcher *watch);
478 void setDownsamplingFinished(QDBusPendingCallWatcher *watch);
479 void setDataRangeIndexFinished(QDBusPendingCallWatcher *watch);
480
481
482private:
483 struct AbstractSensorChannelInterfaceImpl;
484
485 AbstractSensorChannelInterfaceImpl* pimpl_;
486};
487
488template<typename T>
490{
491 return getSocketReader().read(values);
492}
493
494template<typename T>
496{
497 QDBusReply<T> reply(call(QDBus::Block, QLatin1String(name)));
498 if(!reply.isValid())
499 {
500 qDebug() << "Failed to get '" << name << "' from sensord: " << reply.error().message();
501 return T();
502 }
503 return reply.value();
504}
505
506template<typename T>
507void AbstractSensorChannelInterface::setAccessor(const char* name, const T& value)
508{
509 QDBusReply<void> reply(call(QDBus::NoBlock, QLatin1String(name), qVariantFromValue(value)));
510 if(!reply.isValid())
511 {
512 qDebug() << "Failed to set '" << name << " = " << value << "' to sensord: " << reply.error().message();
513 }
514}
515
516namespace local {
518}
519
520#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.
QString description()
Get description of the sensor.
IntegerRangeList getAvailableBufferSizes()
Returns list of available buffer sizes.
bool standbyOverride()
Is standby-override enabled or not.
T getAccessor(const char *name)
Utility for calling DBus methods from current connection which return value and take no args.
int interval()
Get used sensor sampling interval (in millisecs).
void setBufferSizeFinished(QDBusPendingCallWatcher *watch)
void setIntervalFinished(QDBusPendingCallWatcher *watch)
unsigned int bufferSize()
Get used buffer size.
QString errorString()
Get error description of occured local or remote error.
void setBufferInterval(unsigned int value)
Set buffer interval.
void setBufferSize(unsigned int value)
Set buffer size.
QString type()
Textual description about sensor type.
void dbusConnectNotify(const QMetaMethod &signal)
Wrapper for function of QDBusAbstractInterface.
bool hwBuffering()
Does the sensor driver support buffering or not.
bool setDownsampling(bool value)
Enable or disable downsampling.
DataRangeList getAvailableIntervals()
Get the list of available intervals ranges for the sensor.
virtual ~AbstractSensorChannelInterface()
Destructor.
bool downsampling()
Is downsampling enabled or not.
void setDataRangeIndexFinished(QDBusPendingCallWatcher *watch)
void requestDataRange(DataRange range)
Request data range.
void removeDataRangeRequest()
Remove set data range request.
unsigned int bufferInterval()
Used buffer interval.
bool setStandbyOverride(bool override)
Enable or disable standby-override.
bool release()
Release the sensor instance.
DataRange getCurrentDataRange()
Get current used data range.
QString id()
Get ID of the sensor.
bool setDataRangeIndex(int dataRangeIndex)
Request data range by using index which points to the list returned by getAvailableDataRanges().
void stopFinished(QDBusPendingCallWatcher *watch)
int sessionId() const
Get ID of the current session.
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.
SensorError errorCode()
Get error code of occured local or remote error.
AbstractSensorChannelInterface(const QString &path, const char *interfaceName, int sessionId)
Constructor.
void setInterval(int value)
Set sensor sampling interval (in millisecs).
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.
Definition: socketreader.h:42
bool read(void *buffer, int size)
Attempt to read given number of bytes from the socket.
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.