sensorfw
|
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