sensorfw
sensors/compasssensor/compasssensor.h
Go to the documentation of this file.
00001 
00028 #ifndef COMPASS_SENSOR_CHANNEL_H
00029 #define COMPASS_SENSOR_CHANNEL_H
00030 
00031 #include "abstractsensor.h"
00032 #include "abstractchain.h"
00033 #include "compasssensor_a.h"
00034 #include "dataemitter.h"
00035 #include "orientationdata.h"
00036 #include "datatypes/compass.h"
00037 
00038 class Bin;
00039 class CompassAdaptor;
00040 template <class TYPE> class BufferReader;
00041 class FilterBase;
00042 
00049 class CompassSensorChannel :
00050         public AbstractSensorChannel,
00051         public DataEmitter<CompassData>
00052 {
00053     Q_OBJECT;
00054 
00055     Q_PROPERTY(quint16 declinationvalue READ declinationValue);
00056     Q_PROPERTY(Compass value READ get);
00057 
00058 public:
00059     static AbstractSensorChannel* factoryMethod(const QString& id)
00060     {
00061         CompassSensorChannel* sc = new CompassSensorChannel(id);
00062         new CompassSensorChannelAdaptor(sc);
00063 
00064         return sc;
00065     }
00066 
00067     quint16 declinationValue() const;
00068 
00069     Compass get() const { return compassData; }
00070 
00071 public Q_SLOTS:
00072     bool start();
00073     bool stop();
00074 
00075 signals:
00076     void dataAvailable(const Compass& value);
00077 
00078 protected:
00079     CompassSensorChannel(const QString& id);
00080     virtual ~CompassSensorChannel();
00081 
00082 private:
00083     CompassData compassData;
00084 
00085     Bin* filterBin_;
00086     Bin* marshallingBin_;
00087 
00088     AbstractChain* compassChain_;
00089     BufferReader<CompassData>* inputReader_;
00090     RingBuffer<CompassData>* outputBuffer_;
00091 
00092     void emitData(const CompassData& value);
00093 };
00094 
00095 #endif