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