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 
45 class 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)
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 
62 public:
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 
137  bool standbyOverride();
138 
147  bool setStandbyOverride(bool override);
148 
155  unsigned int bufferInterval();
156 
164  void setBufferInterval(unsigned int value);
165 
173  bool downsampling();
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 
266  void requestDataRange(DataRange range);
267 
271  void removeDataRangeRequest();
272 
280  bool setDataRangeIndex(int dataRangeIndex);
281 
287  bool hwBuffering();
288 
295  bool isValid() const;
296 
297 private:
304  void setError(SensorError errorCode, const QString& errorString);
305 
309  void clearError();
310 
314  SocketReader& getSocketReader() const;
315 
316 private Q_SLOTS: // METHODS
324  QDBusReply<void> setInterval(int sessionId, int value);
325 
333  QDBusReply<bool> setStandbyOverride(int sessionId, bool value);
334 
342  QDBusReply<void> setBufferInterval(int sessionId, unsigned int value);
343 
351  QDBusReply<void> setBufferSize(int sessionId, unsigned int value);
352 
360  QDBusReply<void> setDownsampling(int sessionId, bool value);
361 
368  QDBusReply<void> start(int sessionId);
369 
376  QDBusReply<void> stop(int sessionId);
377 
381  void dataReceived();
382 
383 protected:
391  AbstractSensorChannelInterface(const QString& path, const char* interfaceName, int sessionId);
392 
399  bool read(void* buffer, int size);
400 
408  template<typename T>
409  bool read(QVector<T>& values);
410 
417  virtual bool dataReceivedImpl() = 0;
418 
427  template<typename T>
428  T getAccessor(const char* name);
429 
438  template<typename T>
439  void setAccessor(const char* name, const T& value);
440 
445  QDBusMessage call(QDBus::CallMode mode,
446  const QString& method,
447  const QVariant& arg1 = QVariant(),
448  const QVariant& arg2 = QVariant(),
449  const QVariant& arg3 = QVariant(),
450  const QVariant& arg4 = QVariant(),
451  const QVariant& arg5 = QVariant(),
452  const QVariant& arg6 = QVariant(),
453  const QVariant& arg7 = QVariant(),
454  const QVariant& arg8 = QVariant());
455 
460  QDBusMessage callWithArgumentList(QDBus::CallMode mode, const QString& method, const QList<QVariant>& args);
461 
466  void dbusConnectNotify(const char* signal);
467 
468 private:
469  struct AbstractSensorChannelInterfaceImpl;
470 
471  AbstractSensorChannelInterfaceImpl* pimpl_;
472 };
473 
474 template<typename T>
475 bool AbstractSensorChannelInterface::read(QVector<T>& values)
476 {
477  return getSocketReader().read(values);
478 }
479 
480 template<typename T>
482 {
483  QDBusReply<T> reply(call(QDBus::Block, QLatin1String(name)));
484  if(!reply.isValid())
485  {
486  qDebug() << "Failed to get '" << name << "' from sensord: " << reply.error().message();
487  return T();
488  }
489  return reply.value();
490 }
491 
492 template<typename T>
493 void AbstractSensorChannelInterface::setAccessor(const char* name, const T& value)
494 {
495  QDBusReply<void> reply(call(QDBus::Block, QLatin1String(name), qVariantFromValue(value)));
496  if(!reply.isValid())
497  {
498  qDebug() << "Failed to set '" << name << " = " << value << "' to sensord: " << reply.error().message();
499  }
500 }
501 
502 namespace local {
503  typedef ::AbstractSensorChannelInterface AbstractSensor;
504 }
505 
506 #endif
bool isValid() const
Does the current instance have valid connection established to sensor daemon.
SensorError
Enumeration about sensor error states.
Definition: sfwerror.h:53
void dbusConnectNotify(const char *signal)
Wrapper for function of QDBusAbstractInterface.
bool hwBuffering()
Does the sensor driver support buffering or not.
SensorError errorCode()
Get error code of occured local or remote error.
::AbstractSensorChannelInterface AbstractSensor
Error definitions.
bool release()
Release the sensor instance.
bool downsampling()
Is downsampling enabled or not.
Base-class for client facades of different sensor types.
IntegerRangeList getAvailableBufferSizes()
Returns list of available buffer sizes.
Datatype for storing sensor data range information.
Definition: datarange.h:46
unsigned int bufferSize()
Get used buffer size.
Datatype containing sensor data range and resolution.
int sessionId() const
Get ID of the current session.
IntegerRangeList getAvailableBufferIntervals()
Returns list of available buffer interval ranges.
int interval()
Get used sensor sampling interval (in millisecs).
void setAccessor(const char *name, const T &value)
Utility for calling DBus methods from current connection which return nothing and take one arg...
virtual QDBusReply< void > start()
Start sensor.
virtual QDBusReply< void > stop()
Stop sensor.
QString type()
Textual description about sensor type.
T getAccessor(const char *name)
Utility for calling DBus methods from current connection which return value and take no args...
Helper class for reading socket datachannel from sensord.
Definition: socketreader.h:41
QString description()
Get description of the sensor.
QList< DataRange > DataRangeList
Definition: datarange.h:105
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.
void setBufferSize(unsigned int value)
Set buffer size.
void requestDataRange(DataRange range)
Request data range.
void removeDataRangeRequest()
Remove set data range request.
unsigned int bufferInterval()
Used buffer interval.
virtual bool dataReceivedImpl()=0
Callback for subclasses in which they must read their expected data from socket.
Sensor service information.
bool setStandbyOverride(bool override)
Enable or disable standby-override.
void setInterval(int value)
Set sensor sampling interval (in millisecs).
bool read(void *buffer, int size)
Read data from socket into buffer.
SocketReader helper class for sensor interface.
DataRangeList getAvailableDataRanges()
Get the list of available data ranges for the sensor.
QString errorString()
Get error description of occured local or remote error.
bool standbyOverride()
Is standby-override enabled or not.
DataRange getCurrentDataRange()
Get current used data range.
QList< IntegerRange > IntegerRangeList
Definition: datarange.h:38
bool setDataRangeIndex(int dataRangeIndex)
Request data range by using index which points to the list returned by getAvailableDataRanges().
void setBufferInterval(unsigned int value)
Set buffer interval.
QDBusMessage callWithArgumentList(QDBus::CallMode mode, const QString &method, const QList< QVariant > &args)
Wrapper for function of QDBusAbstractInterface.
DataRangeList getAvailableIntervals()
Get the list of available intervals ranges for the sensor.
bool setDownsampling(bool value)
Enable or disable downsampling.
bool read(void *buffer, int size)
Attempt to read given number of bytes from the socket.