00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00042
00043
00059 #ifndef _GPSSOURCE_H
00060 #define _GPSSOURCE_H
00061
00062 #include <assert.h>
00063
00064 #include "../OpenTracker.h"
00065 #include "GPSDriver.h"
00066
00074 #ifndef OT_NO_GPS_SUPPORT
00075
00076
00077 namespace ot {
00078
00079 class OPENTRACKER_API GPSSource : public Node, public GPSListener
00080 {
00081 public:
00082
00084 Event event;
00086 Event buffer;
00087
00091 virtual int isEventGenerator()
00092 {
00093 return 1;
00094 }
00095
00096 virtual void newData( const GPResult * point, const char * line, void * userData );
00097
00098 protected:
00100 GPSSource() {};
00101
00102 friend class GPSModule;
00103 };
00104
00105 inline void GPSSource::newData( const GPResult * res, const char * line, void * userData )
00106 {
00107
00108 ACE_ASSERT( userData != NULL );
00109 if( res->type == GPResult::GPGGA){
00110 GPGGA * point = (GPGGA *) res;
00111 if( point->fix == 0)
00112 return;
00113
00114 GPSModule * module = (GPSModule *)userData;
00115 module->lock();
00116 buffer.timeStamp();
00117
00118
00119
00120
00121
00122 if (!ACE_OS::strcmp(module->position_mode.c_str(), ACE_TEXT_CHAR_TO_TCHAR("ecef")))
00123 {
00124 buffer.getPosition()[0] = (float)(point->xECEF);
00125 buffer.getPosition()[1] = (float)(point->yECEF);
00126 buffer.getPosition()[2] = (float)(point->zECEF);
00127 } else
00128 if (!ACE_OS::strcmp(module->position_mode.c_str(), ACE_TEXT_CHAR_TO_TCHAR("utm_33n")))
00129 {
00130
00131 buffer.getPosition()[0] = (float)(point->lon_utm_33n);
00132 buffer.getPosition()[1] = (float)(point->lat_utm_33n);
00133 buffer.getPosition()[2] = (float)(1.0f);
00134
00135 } else
00136 if (!ACE_OS::strcmp(module->position_mode.c_str(), ACE_TEXT_CHAR_TO_TCHAR("gk_m34")))
00137 {
00138
00139 buffer.getPosition()[0] = (float)(point->lon_gk_m34);
00140 buffer.getPosition()[1] = (float)(point->lat_gk_m34);
00141 buffer.getPosition()[2] = (float)(1.0f);
00142
00143
00144 } else
00145 if (!ACE_OS::strcmp(module->position_mode.c_str(), ACE_TEXT_CHAR_TO_TCHAR("bmn_34")))
00146 {
00147
00148 buffer.getPosition()[0] = (float)(point->lon_bmn_34);
00149 buffer.getPosition()[1] = (float)(point->lat_bmn_34);
00150 buffer.getPosition()[2] = (float)(1.0f);
00151
00152
00153 }
00154
00155
00156
00157
00158
00159
00160
00161
00162 buffer.getConfidence() = (float)(1 / point->hdop);
00163
00164 buffer.setAttribute<double>("lat", point->lat);
00165 buffer.addAttribute<double>("lon", point->lon);
00166 buffer.addAttribute<double>("alt", point->altitude);
00167 buffer.addAttribute<short>("numsats", point->numsats);
00168
00169 module->unlock();
00170
00171
00172
00173 }
00174 }
00175
00176 }
00177
00178 #endif // !defined(_GPSSOURCE_H)
00179
00180
00181 #endif //OT_NO_GPS_SUPPORT
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197