• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

qt-api/abstractsensor_i.h

Go to the documentation of this file.
00001 
00029 #ifndef ABSTRACTSENSOR_I_H
00030 #define ABSTRACTSENSOR_I_H
00031 
00032 #include <QtDBus/QtDBus>
00033 #include <QList>
00034 #include <QVector>
00035 #include <QString>
00036 
00037 #include "sfwerror.h"
00038 #include "serviceinfo.h"
00039 #include "socketreader.h"
00040 #include "datatypes/datarange.h"
00041 
00045 class AbstractSensorChannelInterface : public QObject
00046 {
00047     Q_OBJECT
00048     Q_DISABLE_COPY(AbstractSensorChannelInterface)
00049     Q_PROPERTY(int sessionId READ sessionId)
00050     Q_PROPERTY(SensorError errorCode READ errorCode)
00051     Q_PROPERTY(QString errorString READ errorString)
00052     Q_PROPERTY(QString description READ description)
00053     Q_PROPERTY(QString id READ id)
00054     Q_PROPERTY(int interval READ interval WRITE setInterval)
00055     Q_PROPERTY(bool standbyOverride READ standbyOverride WRITE setStandbyOverride)
00056     Q_PROPERTY(QString type READ type)
00057     Q_PROPERTY(unsigned int bufferInterval READ bufferInterval WRITE setBufferInterval)
00058     Q_PROPERTY(unsigned int bufferSize READ bufferSize WRITE setBufferSize)
00059     Q_PROPERTY(bool hwBuffering READ hwBuffering)
00060     Q_PROPERTY(bool downsampling READ downsampling WRITE setDownsampling)
00061 
00062 public:
00063 
00067     virtual ~AbstractSensorChannelInterface();
00068 
00075     bool release();
00076 
00082     int sessionId() const;
00083 
00089     SensorError errorCode();
00090 
00096     QString errorString();
00097 
00103     QString description();
00104 
00110     QString id();
00111 
00119     int interval();
00120 
00128     void setInterval(int value);
00129 
00137     bool standbyOverride();
00138 
00147     bool setStandbyOverride(bool override);
00148 
00155     unsigned int bufferInterval();
00156 
00164     void setBufferInterval(unsigned int value);
00165 
00173     bool downsampling();
00174 
00184     bool setDownsampling(bool value);
00185 
00191     IntegerRangeList getAvailableBufferIntervals();
00192 
00199     unsigned int bufferSize();
00200 
00207     void setBufferSize(unsigned int value);
00208 
00215     IntegerRangeList getAvailableBufferSizes();
00216 
00222     QString type();
00223 
00230     virtual QDBusReply<void> start();
00231 
00237     virtual QDBusReply<void> stop();
00238 
00244     DataRangeList getAvailableIntervals();
00245 
00251     DataRangeList getAvailableDataRanges();
00252 
00258     DataRange getCurrentDataRange();
00259 
00266     void requestDataRange(DataRange range);
00267 
00271     void removeDataRangeRequest();
00272 
00280     bool setDataRangeIndex(int dataRangeIndex);
00281 
00287     bool hwBuffering();
00288 
00295     bool isValid() const;
00296 
00297 private:
00304     void setError(SensorError errorCode, const QString& errorString);
00305 
00309     void clearError();
00310 
00314     SocketReader& getSocketReader() const;
00315 
00316 private Q_SLOTS: // METHODS
00324     QDBusReply<void> setInterval(int sessionId, int value);
00325 
00333     QDBusReply<bool> setStandbyOverride(int sessionId, bool value);
00334 
00342     QDBusReply<void> setBufferInterval(int sessionId, unsigned int value);
00343 
00351     QDBusReply<void> setBufferSize(int sessionId, unsigned int value);
00352 
00360     QDBusReply<void> setDownsampling(int sessionId, bool value);
00361 
00368     QDBusReply<void> start(int sessionId);
00369 
00376     QDBusReply<void> stop(int sessionId);
00377 
00381     void dataReceived();
00382 
00383 protected:
00391     AbstractSensorChannelInterface(const QString& path, const char* interfaceName, int sessionId);
00392 
00399     bool read(void* buffer, int size);
00400 
00408     template<typename T>
00409     bool read(QVector<T>& values);
00410 
00417     virtual bool dataReceivedImpl() = 0;
00418 
00427     template<typename T>
00428     T getAccessor(const char* name);
00429 
00438     template<typename T>
00439     void setAccessor(const char* name, const T& value);
00440 
00445     QDBusMessage call(QDBus::CallMode mode,
00446                       const QString& method,
00447                       const QVariant& arg1 = QVariant(),
00448                       const QVariant& arg2 = QVariant(),
00449                       const QVariant& arg3 = QVariant(),
00450                       const QVariant& arg4 = QVariant(),
00451                       const QVariant& arg5 = QVariant(),
00452                       const QVariant& arg6 = QVariant(),
00453                       const QVariant& arg7 = QVariant(),
00454                       const QVariant& arg8 = QVariant());
00455 
00460     QDBusMessage callWithArgumentList(QDBus::CallMode mode, const QString& method, const QList<QVariant>& args);
00461 
00466     void dbusConnectNotify(const char* signal);
00467 
00468 private:
00469     struct AbstractSensorChannelInterfaceImpl;
00470 
00471     AbstractSensorChannelInterfaceImpl* pimpl_; 
00472 };
00473 
00474 template<typename T>
00475 bool AbstractSensorChannelInterface::read(QVector<T>& values)
00476 {
00477     return getSocketReader().read(values);
00478 }
00479 
00480 template<typename T>
00481 T AbstractSensorChannelInterface::getAccessor(const char* name)
00482 {
00483     QDBusReply<T> reply(call(QDBus::Block, QLatin1String(name)));
00484     if(!reply.isValid())
00485     {
00486         qDebug() << "Failed to get '" << name << "' from sensord: " << reply.error().message();
00487         return T();
00488     }
00489     return reply.value();
00490 }
00491 
00492 template<typename T>
00493 void AbstractSensorChannelInterface::setAccessor(const char* name, const T& value)
00494 {
00495     QDBusReply<void> reply(call(QDBus::Block, QLatin1String(name), qVariantFromValue(value)));
00496     if(!reply.isValid())
00497     {
00498         qDebug() << "Failed to set '" << name << " = " << value << "' to sensord: " << reply.error().message();
00499     }
00500 }
00501 
00502 namespace local {
00503     typedef ::AbstractSensorChannelInterface AbstractSensor;
00504 }
00505 
00506 #endif

Generated on Tue Jun 10 2014 06:25:08 for sensorfw by  doxygen 1.7.1