source: Sophya/trunk/Poubelle/archTOI.old/toillgpsproducer.cc@ 623

Last change on this file since 623 was 534, checked in by ansari, 26 years ago

V2

File size: 4.3 KB
RevLine 
[534]1// toillgpsproducer.cc
2// Eric Aubourg CEA/DAPNIA/SPP octobre 1999
3
4#include "toillgpsproducer.h"
5#include "archfileset.h"
6#include "toimanager.h"
7#include "requesthandler.h"
8
9#define gpsTime "gpsTime"
10#define latitude "latitude"
11#define longitude "longitude"
12#define altitude "altitude"
13#define gpsQuality "gpsQuality"
14#define gpsNSat "gpsNSat"
15#define gpsHDOP "gpsHDOP"
16#define gpsGeoidSep "gpsGeoidSep"
17
18
19TOILLGPSProducer::TOILLGPSProducer()
20{
21 possibleTOIs.insert(TOI(gpsTime, TOI::unspec, "", "seconds", "onboardGPS"));
22 possibleTOIs.insert(TOI(latitude, TOI::unspec, "", "degrees", "onboardGPS")); // + = NORTH
23 possibleTOIs.insert(TOI(longitude, TOI::unspec, "", "degrees", "onboardGPS")); // + = EAST
24 possibleTOIs.insert(TOI(altitude, TOI::unspec, "", "meters", "onboardGPS"));
25 possibleTOIs.insert(TOI(gpsQuality, TOI::unspec, "", "flag", "onboardGPS"));
26 possibleTOIs.insert(TOI(gpsNSat, TOI::unspec, "", "integer", "onboardGPS"));
27 possibleTOIs.insert(TOI(gpsHDOP, TOI::unspec, "", "real", "onboardGPS"));
28 possibleTOIs.insert(TOI(gpsGeoidSep, TOI::unspec, "", "meters", "onboardGPS"));
29}
30
31string TOILLGPSProducer::getName() {
32 return("TOILLGPSProducer 1.0");
33}
34
35
36// GPGGA string :
37// $hhmmss.ss,ddmm.mmmm,n,dddmm.mmmm,e,q,ss,y.y,a.a,z,,
38// $104020,3740.712,N,00400.781,W,0,00,01.0,0003,M,-050,M,,
39
40
41void TOILLGPSProducer::handleBlock(ArchFileSet* fs)
42{
43 block_type_gps* blk = fs->lastGPS();
44 long sample0 = numero_block(blk)*72;
45
46 double gpsutc; // secondes depuis minuit
47 double gpslat; // degres, + = NORD
48 double gpslong; // degres, + = EST
49 double alt; // altitude en metres
50 int quality; // 0 = NO FIX, 1 = GPS FIX, 2 = DGPS FIX
51 int nsat; // nombre de satellites utilises
52 double hdop; // horizontal dilution of precision
53 double gsep; // separation geoide en metres
54
55 char* p = blk->gps;
56 char* fence = p+80;
57 if (*p!='$') return;
58 p++;
59
60 // UTC
61 if (*p < '0' || *p > '9') return;
62 double t;
63 sscanf(p, "%lg", &t);
64 int h = int(t/10000); t -= h*10000;
65 int m = int(t/100); t -= m*100;
66 gpsutc = h*3600. + m*60. + t;
67 p += 6;
68 if (*p != ',') return;
69 p++;
70 if (p>=fence) return;
71
72 // LATITUDE
73 if (*p < '0' || *p > '9') return;
74 sscanf(p, "%lg", &t);
75 int d = int(t/100); t -= d*100;
76 t = d + t/60;
77 p += 8;
78 if (*p != ',') return;
79 p++;
80 if (*p == 'S') t = -t;
81 gpslat = t;
82 p++;
83 if (*p != ',') return;
84 p++;
85 if (p>=fence) return;
86
87 // LONGITUDE
88 if (*p < '0' || *p > '9') return;
89 sscanf(p, "%lg", &t);
90 d = int(t/100); t -= d*100;
91 t = d + t/60;
92 p += 9;
93 if (*p != ',') return;
94 p++;
95 if (*p == 'W') t = -t;
96 gpslong = t;
97 p++;
98 if (*p != ',') return;
99 p++;
100 if (p>=fence) return;
101
102 // QUALITY
103 quality = *p - '0';
104 if (quality < 0 || quality > 9) return;
105 p++;
106 if (*p != ',') return;
107 p++;
108 if (p>=fence) return;
109
110 // NSAT
111 if (*p < '0' || *p > '9') return;
112 sscanf(p, "%d", &nsat);
113 p += 2;
114 if (*p != ',') return;
115 p++;
116
117 // HDOP
118 if (*p < '0' || *p > '9') return;
119 sscanf(p, "%lg", &hdop);
120 while (*p != ',' && p<fence) p++;
121 if (*p != ',') return;
122 p++;
123
124 // Altitude
125 if (*p < '0' || *p > '9') return;
126 sscanf(p, "%lg", &alt);
127 while (*p != ',' && p<fence) p++;
128 if (*p != ',') return;
129 p++;
130 if (*p != 'M') return;
131 p++;
132 if (*p != ',') return;
133 p++;
134
135 // Geoid separation
136 if ((*p < '0' || *p > '9') && *p != '-') return;
137 sscanf(p, "%lg", &gsep);
138 while (*p != ',' && p<fence) p++;
139 if (*p != ',') return;
140 p++;
141 if (*p != 'M') return;
142
143 for (set<TOI>::iterator i = producedTOIs.begin(); i != producedTOIs.end(); i++) {
144 if ((*i).name == gpsTime) computedValue((*i), sample0, gpsutc);
145 if ((*i).name == latitude) computedValue((*i), sample0, gpslat);
146 if ((*i).name == longitude) computedValue((*i), sample0, gpslong);
147 if ((*i).name == altitude) computedValue((*i), sample0, alt);
148 if ((*i).name == gpsQuality) computedValue((*i), sample0, quality);
149 if ((*i).name == gpsNSat) computedValue((*i), sample0, nsat);
150 if ((*i).name == gpsHDOP) computedValue((*i), sample0, hdop);
151 if ((*i).name == gpsGeoidSep) computedValue((*i), sample0, gsep);
152 }
153}
154
155
156
Note: See TracBrowser for help on using the repository browser.