Go to the documentation of this file.00001
00027 #ifndef ROTATION_SENSOR_CHANNEL_H
00028 #define ROTATION_SENSOR_CHANNEL_H
00029
00030 #include <QMutex>
00031 #include "abstractsensor.h"
00032 #include "abstractchain.h"
00033 #include "rotationsensor_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
00044 class RotationSensorChannel :
00045 public AbstractSensorChannel,
00046 public DataEmitter<TimedXyzData>
00047 {
00048 Q_OBJECT;
00049 Q_PROPERTY(XYZ rotation READ rotation);
00050 Q_PROPERTY(bool hasZ READ hasZ);
00051
00052 public:
00057 static AbstractSensorChannel* factoryMethod(const QString& id)
00058 {
00059 RotationSensorChannel* sc = new RotationSensorChannel(id);
00060 new RotationSensorChannelAdaptor(sc);
00061
00062 return sc;
00063 }
00064
00065 XYZ rotation() const
00066 {
00067 return XYZ(prevRotation_);
00068 }
00069
00070 bool hasZ() const
00071 {
00072 return compassReader_;
00073 }
00074
00075 virtual unsigned int interval() const;
00076 virtual bool setInterval(unsigned int value, int sessionId);
00077
00078 virtual void removeSession(int sessionId);
00079
00080 virtual bool downsamplingSupported() const;
00081
00082 public Q_SLOTS:
00083 bool start();
00084 bool stop();
00085
00086 signals:
00091 void dataAvailable(const XYZ& data);
00092
00093 protected:
00094 RotationSensorChannel(const QString& id);
00095 virtual ~RotationSensorChannel();
00096
00097 private:
00098 Bin* filterBin_;
00099 Bin* marshallingBin_;
00100 AbstractChain* accelerometerChain_;
00101 AbstractChain* compassChain_;
00102 BufferReader<TimedXyzData>* accelerometerReader_;
00103 BufferReader<CompassData>* compassReader_;
00104 FilterBase* rotationFilter_;
00105 RingBuffer<TimedXyzData>* outputBuffer_;
00106 TimedXyzData prevRotation_;
00107 TimedXyzDownsampleBuffer downsampleBuffer_;
00108 QMutex mutex_;
00109
00110 void emitData(const TimedXyzData& value);
00111 };
00112
00113 #endif // ROTATION_SENSOR_CHANNEL_H