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