Go to the documentation of this file.00001
00029 #ifndef ORIENTATIONINTERPRETER_H
00030 #define ORIENTATIONINTERPRETER_H
00031
00032 #include <QObject>
00033 #include <QFile>
00034 #include "filter.h"
00035 #include <datatypes/orientationdata.h>
00036 #include <datatypes/posedata.h>
00037
00045 class OrientationInterpreter : public QObject, public FilterBase
00046 {
00047 Q_OBJECT;
00048
00049 Q_PROPERTY(PoseData orientation READ orientation);
00050
00051 private:
00052 Sink<OrientationInterpreter, AccelerationData> accDataSink;
00053 Source<PoseData> topEdgeSource;
00054 Source<PoseData> faceSource;
00055 Source<PoseData> orientationSource;
00056
00057 void accDataAvailable(unsigned, const AccelerationData*);
00058
00059 bool overFlowCheck();
00060 void processTopEdge();
00061 void processFace();
00062 void processOrientation();
00063
00064 OrientationInterpreter();
00065
00066 PoseData topEdge;
00067 PoseData face;
00068 PoseData previousFace;
00069 bool updatePreviousFace;
00070
00071 AccelerationData data;
00072 QList<AccelerationData> dataBuffer;
00073
00074 int minLimit;
00075 int maxLimit;
00076 int angleThresholdPortrait;
00077 int angleThresholdLandscape;
00078 unsigned long discardTime;
00079 int maxBufferSize;
00080
00081 PoseData orientationData;
00082
00083 QFile cpuBoostFile;
00084
00085 enum OrientationMode
00086 {
00087 Portrait = 0,
00088 Landscape
00089 };
00090
00091 PoseData rotateToLandscape(int);
00092 PoseData rotateToPortrait(int);
00093 int orientationCheck(const AccelerationData&, OrientationMode) const;
00094 PoseData orientationRotation(const AccelerationData&, OrientationMode, PoseData (OrientationInterpreter::*)(int));
00095
00096 static const float RADIANS_TO_DEGREES;
00097 static const int SAME_AXIS_LIMIT;
00098
00099 static const int OVERFLOW_MIN;
00100 static const int OVERFLOW_MAX;
00101
00102 static const int THRESHOLD_LANDSCAPE;
00103 static const int THRESHOLD_PORTRAIT;
00104
00105 static const int DISCARD_TIME;
00106 static const int AVG_BUFFER_MAX_SIZE;
00107
00108 static const char* CPU_BOOST_PATH;
00109
00110 public:
00115 static FilterBase* factoryMethod()
00116 {
00117 return new OrientationInterpreter();
00118 }
00119
00120 PoseData orientation() const { return orientationData; }
00121 };
00122
00123 #endif