sensorfw
sensors/accelerometersensor/accelerometersensor.h
Go to the documentation of this file.
00001 
00028 #ifndef ACCELEROMETER_SENSOR_CHANNEL_H
00029 #define ACCELEROMETER_SENSOR_CHANNEL_H
00030 
00031 #include "abstractsensor.h"
00032 #include "abstractchain.h"
00033 #include "accelerometersensor_a.h"
00034 #include "dataemitter.h"
00035 #include "datatypes/orientationdata.h"
00036 
00037 class Bin;
00038 template <class TYPE> class BufferReader;
00039 class FilterBase;
00040 
00041 
00048 class AccelerometerSensorChannel :
00049         public AbstractSensorChannel,
00050         public DataEmitter<AccelerationData>
00051 {
00052     Q_OBJECT;
00053     Q_PROPERTY(XYZ value READ get);
00054 
00055 public:
00060     static AbstractSensorChannel* factoryMethod(const QString& id)
00061     {
00062         AccelerometerSensorChannel* sc = new AccelerometerSensorChannel(id);
00063         new AccelerometerSensorChannelAdaptor(sc);
00064 
00065         return sc;
00066     }
00067 
00068     XYZ get() const { return previousSample_; }
00069 
00070     virtual void removeSession(int sessionId);
00071 
00072     virtual bool downsamplingSupported() const;
00073 
00074 public Q_SLOTS:
00075     bool start();
00076     bool stop();
00077 
00078 signals:
00083     void dataAvailable(const XYZ& data);
00084 
00085 protected:
00086     AccelerometerSensorChannel(const QString& id);
00087     virtual ~AccelerometerSensorChannel();
00088 
00089 private:
00090     static double                    aconv_[3][3];
00091     Bin*                             filterBin_;
00092     Bin*                             marshallingBin_;
00093     AbstractChain*                   accelerometerChain_;
00094     BufferReader<AccelerationData>*  accelerometerReader_;
00095     RingBuffer<AccelerationData>*    outputBuffer_;
00096     AccelerationData                 previousSample_;
00097     TimedXyzDownsampleBuffer         downsampleBuffer_;
00098 
00099     void emitData(const AccelerationData& value);
00100 };
00101 
00102 #endif