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)
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:
64
69
76 bool release();
77
83 int sessionId() const;
84
91
97 QString errorString();
98
104 QString description();
105
111 QString id();
112
120 int interval();
121 double dataRate();
122
130 void setInterval(int interval_ms);
131
139 void setDataRate(double dataRate_Hz);
140
149
158 bool setStandbyOverride(bool override);
159
166 unsigned int bufferInterval();
167
175 void setBufferInterval(unsigned int interval_ms);
176
185
195 bool setDownsampling(bool value);
196
203
210 unsigned int bufferSize();
211
218 void setBufferSize(unsigned int value);
219
227
233 QString type();
234
241 virtual QDBusReply<void> start();
242
248 virtual QDBusReply<void> stop();
249
256
263
270
278
283
291 bool setDataRangeIndex(int dataRangeIndex);
292
299
306 bool isValid() const;
307
308private:
315 void setError(SensorError errorCode, const QString& errorString);
316
320 void clearError();
321
325 SocketReader& getSocketReader() const;
326
327private Q_SLOTS: // METHODS
328
329 void displayStateChanged(bool displayState);
330
338 QDBusReply<void> setInterval(int sessionId, int interval_ms);
339
347 QDBusReply<void> setDataRate(int sessionId, double dataRate_Hz);
348
356 QDBusReply<bool> setStandbyOverride(int sessionId, bool value);
357
365 QDBusReply<void> setBufferInterval(int sessionId, unsigned int interval_ms);
366
374 QDBusReply<void> setBufferSize(int sessionId, unsigned int value);
375
383 QDBusReply<void> setDownsampling(int sessionId, bool value);
384
391 QDBusReply<void> start(int sessionId);
392
399 QDBusReply<void> stop(int sessionId);
400
404 void dataReceived();
405
406protected:
414 AbstractSensorChannelInterface(const QString& path, const char* interfaceName, int sessionId);
415
422 bool read(void* buffer, int size);
423
431 template<typename T>
432 bool read(QVector<T>& values);
433
440 virtual bool dataReceivedImpl() = 0;
441
450 template<typename T>
451 T getAccessor(const char* name);
452
461 template<typename T>
462 void setAccessor(const char* name, const T& value);
463
468 QDBusMessage call(QDBus::CallMode mode,
469 const QString& method,
470 const QVariant& arg1 = QVariant(),
471 const QVariant& arg2 = QVariant(),
472 const QVariant& arg3 = QVariant(),
473 const QVariant& arg4 = QVariant(),
474 const QVariant& arg5 = QVariant(),
475 const QVariant& arg6 = QVariant(),
476 const QVariant& arg7 = QVariant(),
477 const QVariant& arg8 = QVariant());
478
483 QDBusMessage callWithArgumentList(QDBus::CallMode mode, const QString& method, const QList<QVariant>& args);
484
489 void dbusConnectNotify(const QMetaMethod& signal);
490protected slots:
491 void startFinished(QDBusPendingCallWatcher *watch);
492 void stopFinished(QDBusPendingCallWatcher *watch);
493
494 void setIntervalFinished(QDBusPendingCallWatcher *watch);
495 void setDataRateFinished(QDBusPendingCallWatcher *watch);
496 void setBufferIntervalFinished(QDBusPendingCallWatcher *watch);
497 void setBufferSizeFinished(QDBusPendingCallWatcher *watch);
498 void setStandbyOverrideFinished(QDBusPendingCallWatcher *watch);
499 void setDownsamplingFinished(QDBusPendingCallWatcher *watch);
500 void setDataRangeIndexFinished(QDBusPendingCallWatcher *watch);
501
502
503private:
504 struct AbstractSensorChannelInterfaceImpl;
505
506 AbstractSensorChannelInterfaceImpl* pimpl_;
507};
508
509template<typename T>
510bool AbstractSensorChannelInterface::read(QVector<T>& values)
511{
512 return getSocketReader().read(values);
513}
514
515template<typename T>
517{
518 QDBusReply<T> reply(call(QDBus::Block, QLatin1String(name)));
519 if(!reply.isValid())
520 {
521 qDebug() << "Failed to get '" << name << "' from sensord: " << reply.error().message();
522 return T();
523 }
524 return reply.value();
525}
526
527template<typename T>
528void AbstractSensorChannelInterface::setAccessor(const char* name, const T& value)
529{
530 QDBusReply<void> reply(call(QDBus::NoBlock, QLatin1String(name), QVariant::fromValue(value)));
531 if(!reply.isValid())
532 {
533 qDebug() << "Failed to set '" << name << " = " << value << "' to sensord: " << reply.error().message();
534 }
535}
536
540
541#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).
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.
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
Sensor service information.
Error definitions.
SensorError
Enumeration about sensor error states.
Definition sfwerror.h:54
SocketReader helper class for sensor interface.