sensorfw
|
00001 00028 #ifndef MAGNETOMETER_SENSOR_CHANNEL_H 00029 #define MAGNETOMETER_SENSOR_CHANNEL_H 00030 00031 #include "abstractsensor.h" 00032 #include "abstractchain.h" 00033 #include "magnetometersensor_a.h" 00034 #include "dataemitter.h" 00035 #include "deviceadaptor.h" 00036 #include "datatypes/orientationdata.h" 00037 00038 class Bin; 00039 template <class TYPE> class BufferReader; 00040 class FilterBase; 00041 00045 class MagnetometerSensorChannel : 00046 public AbstractSensorChannel, 00047 public DataEmitter<CalibratedMagneticFieldData> 00048 { 00049 Q_OBJECT; 00050 Q_PROPERTY(MagneticField magneticField READ magneticField); 00051 00052 public: 00057 static AbstractSensorChannel* factoryMethod(const QString& id) 00058 { 00059 MagnetometerSensorChannel* sc = new MagnetometerSensorChannel(id); 00060 new MagnetometerSensorChannelAdaptor(sc); 00061 00062 return sc; 00063 } 00064 00065 Q_INVOKABLE void resetCalibration(); 00066 00067 MagneticField magneticField() const 00068 { 00069 return MagneticField(prevMeasurement_); 00070 } 00071 00072 virtual void removeSession(int sessionId); 00073 00074 virtual bool downsamplingSupported() const; 00075 00076 public Q_SLOTS: 00077 bool start(); 00078 bool stop(); 00079 00080 signals: 00085 void dataAvailable(const MagneticField& data); 00086 void internalData(const MagneticField& data); 00087 00088 protected: 00089 MagnetometerSensorChannel(const QString& id); 00090 virtual ~MagnetometerSensorChannel(); 00091 00092 virtual bool setDataRange(const DataRange& range, int sessionId); 00093 00094 private: 00095 Bin* filterBin_; 00096 Bin* marshallingBin_; 00097 AbstractChain* compassChain_; 00098 FilterBase* scaleFilter_; 00099 BufferReader<CalibratedMagneticFieldData>* magnetometerReader_; 00100 RingBuffer<CalibratedMagneticFieldData>* outputBuffer_; 00101 CalibratedMagneticFieldData prevMeasurement_; 00102 int scaleCoefficient_; 00103 MagneticFieldDownsampleBuffer downsampleBuffer_; 00104 00105 void emitData(const CalibratedMagneticFieldData& value); 00106 }; 00107 00108 #endif // MAGNETOMETER_SENSOR_CHANNEL_H