00001 #ifndef PPARSER_H__ 00002 #define PPARSER_H__ 00003 00004 00005 #include "../../core/src/flexilog.h" 00006 #include "../../core/src/textparser.h" 00007 #include "bodies.h" 00008 #include <queue> 00009 00010 00011 namespace VRUT 00012 { 00013 typedef std::queue<Body *> bodyqueue; 00015 class PacketParser 00016 { 00017 private: 00019 bodyqueue * bQueue; 00020 00022 static const char separators[]; 00024 static const char * tags[]; 00026 TextParser * textparser; 00028 int frameCounter; 00030 int calibDevs; 00032 int devicesCount; 00034 float timeStamp; 00036 bool parse6D(); 00038 bool parse6DF(); 00040 bool parse6DF2(); 00042 bool parse6DMT(); 00044 bool parseGL(); 00046 bool parse3D(); 00048 00051 bool parseFinger(Finger* finger); 00053 00056 inline bool parseInt(int * target); 00058 00061 inline bool parseFloat(float * target); 00063 00067 inline size_t parseVector(float * target, size_t dimension); 00068 00069 public: 00071 00074 PacketParser(const char * input = NULL); 00076 ~PacketParser(); 00078 00081 bool Parse(); 00083 void SetPacket(char * packet); 00085 int FrameCounter(); 00087 00090 float TimeStamp(); 00092 00095 int CalibratedDevices(); 00097 00099 int ParsedDevices(); 00100 00102 void SetQueue(bodyqueue * queue); 00103 }; 00104 }; 00105 #endif