1 | namespace cpp com.gpssolutions.rtnet
|
---|
2 | namespace java com.gpssolutions.rtnet
|
---|
3 | namespace perl gpss
|
---|
4 |
|
---|
5 | struct PosNEU {
|
---|
6 | 1: double n, // north (meters)
|
---|
7 | 2: double e, // east (meters)
|
---|
8 | 3: double u // up (meters)
|
---|
9 | }
|
---|
10 |
|
---|
11 | struct PosXYZ {
|
---|
12 | 1: double x, // x (meters)
|
---|
13 | 2: double y, // y (meters)
|
---|
14 | 3: double z // z (meters)
|
---|
15 | }
|
---|
16 |
|
---|
17 | struct StationInfo {
|
---|
18 | 1: string ID,
|
---|
19 | 2: PosNEU sigma0,
|
---|
20 | 3: PosNEU sigmaNoise,
|
---|
21 | 4: PosXYZ xyz,
|
---|
22 | }
|
---|
23 |
|
---|
24 | struct StationAuxInfo {
|
---|
25 | 1: string ID,
|
---|
26 | 2: string receiverID,
|
---|
27 | 3: string antennaID,
|
---|
28 | 4: PosNEU eccentricity,
|
---|
29 | }
|
---|
30 |
|
---|
31 | enum ConstellationType {
|
---|
32 | GPS = 1,
|
---|
33 | GLONASS = 2,
|
---|
34 | SBAS = 3,
|
---|
35 | GALILEO = 4,
|
---|
36 | QZSS = 5,
|
---|
37 | COMPASS = 6,
|
---|
38 | }
|
---|
39 |
|
---|
40 | // consider adding health flags
|
---|
41 | struct SatelliteXYZ {
|
---|
42 | 1: byte ID,
|
---|
43 | 2: ConstellationType constellation,
|
---|
44 | 3: PosXYZ xyz,
|
---|
45 | // 4: double lon,
|
---|
46 | // 5: double lat
|
---|
47 | }
|
---|
48 |
|
---|
49 | enum FrequencyType {
|
---|
50 | // GPS phase
|
---|
51 | Gp1=1,
|
---|
52 | Gp2=2,
|
---|
53 | Gp5=3,
|
---|
54 | GpIF=4,
|
---|
55 | GpGF=5,
|
---|
56 | GpWL=6,
|
---|
57 | GpMW=7,
|
---|
58 |
|
---|
59 | // Galileo phase
|
---|
60 | Ep1=8,
|
---|
61 | Ep5=9,
|
---|
62 | Ep6=10,
|
---|
63 | Ep7=11,
|
---|
64 | Ep8=12,
|
---|
65 | EpIF=13,
|
---|
66 | EpGF=14,
|
---|
67 | EpWL=15,
|
---|
68 | EpMW=16,
|
---|
69 |
|
---|
70 | // GLONASS phase
|
---|
71 | Rp1=17,
|
---|
72 | Rp2=18,
|
---|
73 | RpIF=19,
|
---|
74 | RpGF=20,
|
---|
75 | RpWL=21,
|
---|
76 | RpMW=22,
|
---|
77 |
|
---|
78 | // GPS code
|
---|
79 | Gc1=23,
|
---|
80 | Gc2=24,
|
---|
81 | Gc5=25,
|
---|
82 | GcIF=26,
|
---|
83 | GcGF=27,
|
---|
84 |
|
---|
85 | // Galileo code
|
---|
86 | Ec1=28,
|
---|
87 | Ec5=29,
|
---|
88 | Ec6=30,
|
---|
89 | Ec7=31,
|
---|
90 | Ec8=32,
|
---|
91 | EcIF=33,
|
---|
92 | EcGF=34,
|
---|
93 |
|
---|
94 | // GLONASS code
|
---|
95 | Rc1=35,
|
---|
96 | Rc2=36,
|
---|
97 | RcIF=37,
|
---|
98 | RcGF=38,
|
---|
99 |
|
---|
100 | // GPS doppler
|
---|
101 | Gd1=39,
|
---|
102 | Gd2=40,
|
---|
103 | }
|
---|
104 |
|
---|
105 | struct ZDAmb {
|
---|
106 | 1: byte satelliteID,
|
---|
107 | 2: ConstellationType constellation,
|
---|
108 | 3: string stationID,
|
---|
109 | 4: FrequencyType frequency,
|
---|
110 | 5: bool constrainedFlag,
|
---|
111 | 6: i16 duration,
|
---|
112 | 7: bool hasObsFlag,
|
---|
113 | 10: bool isNewAmb,
|
---|
114 | 11: bool isResetAmbL1p,
|
---|
115 | 12: bool isResetAmbClock,
|
---|
116 | 8: optional double azimuth,
|
---|
117 | 9: optional double elevation,
|
---|
118 | }
|
---|
119 |
|
---|
120 | enum AmbresStatus
|
---|
121 | {
|
---|
122 | AmbFloat = 1,
|
---|
123 | AmbFixed = 2,
|
---|
124 | AmbDumped = 3
|
---|
125 | }
|
---|
126 |
|
---|
127 | struct DDAmbres
|
---|
128 | {
|
---|
129 | 1: byte satelliteID,
|
---|
130 | 2: ConstellationType constellation,
|
---|
131 | 3: AmbresStatus statusFlag,
|
---|
132 | 4: bool hasObsFlag,
|
---|
133 | }
|
---|
134 |
|
---|
135 | struct DDAmbresBaseline
|
---|
136 | {
|
---|
137 | 1: string stationID_1,
|
---|
138 | 2: string stationID_2,
|
---|
139 | 3: bool redundant,
|
---|
140 | 4: optional list<DDAmbres> wideLaneStatisticList,
|
---|
141 | 5: optional list<DDAmbres> narrowLaneStatisticList,
|
---|
142 | 6: optional list<DDAmbres> l1StatisticList,
|
---|
143 | 7: optional list<DDAmbres> l2StatisticList,
|
---|
144 | }
|
---|
145 |
|
---|
146 | /*struct DDAmbresStatistic {
|
---|
147 | 1: list<DDAmbresBaseline> baselineList
|
---|
148 | }*/
|
---|
149 |
|
---|
150 | /**
|
---|
151 | * Stores information about rtnet job.
|
---|
152 | * For now, it only stores the rtnet job's name (should be unique).
|
---|
153 | * Eventually, may store other useful information such as the
|
---|
154 | * input file contents, the name of who started the job, etc.
|
---|
155 | */
|
---|
156 | struct RtnetInformation {
|
---|
157 | 1: string jobName
|
---|
158 | }
|
---|
159 |
|
---|
160 | // Data needed for plots
|
---|
161 |
|
---|
162 | struct SatelliteClock {
|
---|
163 | 1: byte satelliteID,
|
---|
164 | 2: ConstellationType constellation,
|
---|
165 | 3: double clock, // satellite clock estimate (s)
|
---|
166 | 4: double clock_err, // satellite clock error (s)
|
---|
167 | }
|
---|
168 |
|
---|
169 | struct DGPSCorr {
|
---|
170 | 1: byte satelliteID,
|
---|
171 | 2: ConstellationType constellation,
|
---|
172 | 3: double a0, // non-dispersive correction (ie, clock)
|
---|
173 | 4: double a0e, // formal error for a0
|
---|
174 | 5: double aN, // non-dispersive correction, N-S gradient
|
---|
175 | 6: double aE, // non-dispersive correction, E-W gradient
|
---|
176 | 7: double i0, // dispersive correction
|
---|
177 | 8: double iN, // dispersive correction, N-S gradient
|
---|
178 | 9: double iE, // dispersive correction, E-W gradient
|
---|
179 | 10: i16 nsdfix, // number of stations with fixed ZD ambiguity
|
---|
180 | 11: i16 nsta, // number of stations
|
---|
181 | 12: i16 cjumpCnt, // correction jump counter
|
---|
182 | 13: double deltaMW, // MW bias
|
---|
183 | 14: double deltaP3, // P3 bias
|
---|
184 | 15: double te0, // vertical TEC
|
---|
185 | 16: double teN, // vertical TEC, N-S gradient
|
---|
186 | 17: double teE, // vertical TEC, E-W gradient
|
---|
187 | 18: double teNN, // vertical TEC, gradient, 2nd order
|
---|
188 | 19: double teEE, // vertical TEC, gradient, 2nd order
|
---|
189 | 20: double teNE, // vertical TEC, gradient, 2nd order
|
---|
190 | 21: optional double d0, // P4 system (not used)
|
---|
191 | 22: optional double dN, // P4 system (not used)
|
---|
192 | 23: optional double dE, // P4 system (not used)
|
---|
193 | }
|
---|
194 |
|
---|
195 | enum SolutionQuality {
|
---|
196 | NoData=0, // No data for receiver for the epoch. In network mode, may also mean
|
---|
197 | // unable to create a baseline to a fixed station.
|
---|
198 | LowNsv=1, // Not enough SVs or solution has very high formal error
|
---|
199 | NoCorrection=2, // Have a solution but no correction values (legacy from P4)
|
---|
200 | HighRMS=3, // Have a solution with correction values, but the RMS is high
|
---|
201 | LowRMS=4, // Have a solution with correction values with a good RMS
|
---|
202 | }
|
---|
203 |
|
---|
204 | struct StationPosition {
|
---|
205 | 1: double x, // x position (m) (a-priori + estimate)
|
---|
206 | 2: double xe, // x error (m)
|
---|
207 | 3: double y, // y position (m) (a-priori + estimate)
|
---|
208 | 4: double ye, // y error (m)
|
---|
209 | 5: double z, // z position (m) (a-priori + estimate)
|
---|
210 | 6: double ze, // z error (m)
|
---|
211 | 7: double eh, // ellipsoid height (m)
|
---|
212 | 8: double ehe, // ellipsoid height error (m)
|
---|
213 | 9: double dn, // north position (m)
|
---|
214 | 10: double dne, // north position error (m)
|
---|
215 | 11: double de, // east position (m)
|
---|
216 | 12: double dee, // east position error (m)
|
---|
217 | 13: double dh, // height position (m)
|
---|
218 | 14: double dhe, // height position error (m)
|
---|
219 | 15: double GDOP, // (m)
|
---|
220 | 16: double PDOP, // (m)
|
---|
221 | 17: byte nsv_gps_used, // number of GPS satellites used in position calculation
|
---|
222 | 18: byte nsv_glonass_used, // number of GLONASS satellites used in position calculation
|
---|
223 | 19: SolutionQuality qFlag, // flag used to estimate quality of solution
|
---|
224 | }
|
---|
225 |
|
---|
226 | struct SatelliteEleAzi {
|
---|
227 | 1: byte ID, // satellite PRN/slot number
|
---|
228 | 2: ConstellationType constellation,
|
---|
229 | 3: double elevation, // elevation in degrees
|
---|
230 | 4: double azimuth // azimuth in degrees
|
---|
231 | }
|
---|
232 |
|
---|
233 | enum LinearCombination {
|
---|
234 | L1 = 1,
|
---|
235 | L2 = 2,
|
---|
236 | L3 = 3,
|
---|
237 | L1L2 = 4,
|
---|
238 | IF = 5,
|
---|
239 | GF = 6,
|
---|
240 | MW = 7,
|
---|
241 | MWIF = 8,
|
---|
242 | PL = 9, // (P1+L1)/2 (ionospheric-free)
|
---|
243 | WL = 10,
|
---|
244 | }
|
---|
245 |
|
---|
246 | enum ProcessedLC {
|
---|
247 | Gp1, Gp2, Gp5, GpIF, GpGF, GpWL, GpMW, // GPS Phase
|
---|
248 | Ep1, Ep5, Ep6, Ep7, Ep8, EpIF, EpGF, EpWL, EpMW, // Galileo Phase
|
---|
249 | Rp1, Rp2, RpIF, RpGF, RpWL, RpMW, // Glonass Phase
|
---|
250 | Gc1, Gc2, Gc5, GcIF, GcGF, // GPS Code
|
---|
251 | Ec1, Ec5, Ec6, Ec7, Ec8, EcIF, EcGF, // Galileo Code
|
---|
252 | Rc1, Rc2, RcIF, RcGF, // Glonass Code
|
---|
253 | Gd1, Gd2, // GPS Doppler
|
---|
254 | GpPL, // GPS (P1+L1)/2
|
---|
255 | RpPL, // GLONASS (P1+L1)/2
|
---|
256 | invalidLC
|
---|
257 | }
|
---|
258 |
|
---|
259 | struct ObservationMarkCount {
|
---|
260 | 1: byte n_mark_none, // 0 (not marked)
|
---|
261 | 2: byte n_mark_mis, // 1 (missing marked -- if processing dual-frequency data, marked if one frequency is missing)
|
---|
262 | 3: byte n_mark_ele, // 2 (elevation marked)
|
---|
263 | 4: byte n_mark_cor, // 3 (DGPS correction marked)
|
---|
264 | 5: byte n_mark_orb, // 4 (orbit marked)
|
---|
265 | 6: byte n_mark_unp, // 5 (unpaired observable between LC1 and LC2)
|
---|
266 | 7: byte n_mark_ca, // 6 (CA marked)
|
---|
267 | 8: byte n_mark_out, // 7 (outlier)
|
---|
268 | 9: byte n_mark_crx, // 8 (SATCRUX marked)
|
---|
269 | 10: byte n_mark_iod, // 9 (not used by current version of rtnet)
|
---|
270 | 11: byte n_mark_dcb, // 10 (satellite DCB marked)
|
---|
271 | 12: byte n_mark_few, // 11 (not used by current version of rtnet)
|
---|
272 | 13: byte n_mark_blu, // 12 (blunder marked -- something to do with outlier detection. Perhaps if set, internal logic error in rtnet?)
|
---|
273 | 14: byte n_mark_ban, // 13 (not enough satellites for Bancroft solution)
|
---|
274 | 15: byte n_mark_l1m, // 14 (L1 missing)
|
---|
275 | 16: byte n_mark_l1i, // 15 (not used by current version of rtnet)
|
---|
276 | 17: byte n_mark_ion, // 16 (ionospheric delay marked)
|
---|
277 | 18: byte n_mark_trp, // 17 (troposphere marked)
|
---|
278 | 19: byte n_mark_glo, // 18 (GLONASS phase marked because channel number is unknown)
|
---|
279 | 20: byte n_mark_exc, // 19 (satellite excluded from processing by user or because satellite is unhealthy)
|
---|
280 | 21: byte n_mark_hlt, // 20 (not used by current version of rtnet)
|
---|
281 | 22: byte n_mark_old, // 21 (marked because orbit is too old)
|
---|
282 | 23: byte n_mark_rho, // 22 (computing range to satellite failed--solution did not converge)
|
---|
283 | 24: byte n_mark_oth, // 23 (other marked)
|
---|
284 | }
|
---|
285 |
|
---|
286 | struct SvResidualInfo {
|
---|
287 | 1: byte ID, // satellite PRN/slot number
|
---|
288 | 2: ConstellationType constellation,
|
---|
289 | 3: double residual, // meters
|
---|
290 | }
|
---|
291 |
|
---|
292 | struct ResidualInfo {
|
---|
293 | 1: ProcessedLC lc,
|
---|
294 | 2: double meanResid,
|
---|
295 | 3: double pv,
|
---|
296 | 4: list<SvResidualInfo> svResid,
|
---|
297 | }
|
---|
298 |
|
---|
299 | struct StationResults {
|
---|
300 | 1: string stationName,
|
---|
301 | 2: LinearCombination lc, // linear combination of solution
|
---|
302 | // number of observations
|
---|
303 | 3: byte n_p1, // # of P1 observations
|
---|
304 | 4: byte n_l1, // # of L1 observations
|
---|
305 | 5: byte n_p2, // # of P2 observations
|
---|
306 | 6: byte n_l2, // # of L2 observations
|
---|
307 | 7: byte n_g1, // # of G1 observations (GLONASS P1)
|
---|
308 | 8: byte n_g2, // # of G2 observations (GLONASS P2)
|
---|
309 | 9: list<SatelliteEleAzi> svPosList, // list of satellites used in calculation
|
---|
310 | 10: double rcv_clk, // receiver clock (m)
|
---|
311 | 11: double rcv_clke, // receiver clock error (m)
|
---|
312 | 12: double GDOP, // GDOP obtained with satellites used in processing
|
---|
313 | 13: double PDOP, // PDOP obtained with satellites used in processing
|
---|
314 | // number of observations for each mark (including mark_none, ie, not marked)
|
---|
315 | 14: ObservationMarkCount n_mark_p1,
|
---|
316 | 15: ObservationMarkCount n_mark_l1,
|
---|
317 | 16: ObservationMarkCount n_mark_p2,
|
---|
318 | 17: ObservationMarkCount n_mark_l2,
|
---|
319 | 18: ObservationMarkCount n_mark_l3,
|
---|
320 | // station position and estimates
|
---|
321 | 19: optional StationPosition filtered_result, // primary position solution (optional because station could be fixed)
|
---|
322 | 20: optional StationPosition se_result, // single epoch result
|
---|
323 | // troposphere data
|
---|
324 | 21: optional double ztd, // zenith delay (m)
|
---|
325 | 22: optional double ztde, // zenith delay error (m)
|
---|
326 | 23: list<ResidualInfo> residList, // residual information for each LC
|
---|
327 | }
|
---|
328 | // satellite elevation and azimuth (list)
|
---|
329 |
|
---|
330 | enum MissingEpochData
|
---|
331 | {
|
---|
332 | NoError = 0, // solution was generated
|
---|
333 | MissingAllStationObservation = 1, // no station observations available
|
---|
334 | MissingOrbit = 2, // no orbit information available
|
---|
335 | MissingCorrection = 3, // correction is unavailable
|
---|
336 | KalmanFilterFailed = 4, // Kalman filter step failed
|
---|
337 | }
|
---|
338 |
|
---|
339 | enum MissingStationData
|
---|
340 | {
|
---|
341 | NoError = 0, // station could be processed
|
---|
342 | StationFixed = 1, // no position result because station is fixed
|
---|
343 | MissingStationObservation = 2, // no observations available for station
|
---|
344 | TooFewBancroft = 3, // not enough satellites to generate Bancroft solution
|
---|
345 | MissingStationInfo = 4, // station missing from coordinate file
|
---|
346 | MissingAntennaInfo = 5, // station's antenna not present in ATX file
|
---|
347 | // (if this is an immediate error by rtnet, this flag isn't needed)
|
---|
348 | StationUserMarked = 6, // station was removed from processing by user
|
---|
349 | }
|
---|
350 |
|
---|
351 | struct RtnetEpoch {
|
---|
352 | 1: i16 mjlDay, // MJL day of epoch
|
---|
353 | 2: i32 msecDay, // time of day (msec)
|
---|
354 | 3: list<StationResults> stationResultList, // set for each linear combination
|
---|
355 | 4: MissingEpochData missing, // set to NoError if data is present,
|
---|
356 | // otherwise solution could not be generated because of specified reason
|
---|
357 | 5: map<string,MissingStationData> dataAvailableList, // flag for each station in STALIST
|
---|
358 | 6: i32 processTime, // process time (dt), msec
|
---|
359 | 7: i32 compTime, // computation time (dt_proc), msec
|
---|
360 | 8: i32 latency, // latency, msec
|
---|
361 | }
|
---|
362 |
|
---|
363 | // Needed for plots
|
---|
364 | //Per station data:
|
---|
365 | //X Troposphere: quality flag, ztda, ztd, ztde
|
---|
366 | //X Number of observations per station (ie, # P1, # L1, # L2, # G1, etc)
|
---|
367 | //X GDOP, PDOP, # sv_used
|
---|
368 | //X mres, pv, res_code_flag
|
---|
369 | //X x, xi, xe, y, yi, ye, z, zi, ze, dn, dne, de, dee, dh, dhe
|
---|
370 | //X receiver clk, clki, clke
|
---|
371 | //List of satellites used
|
---|
372 | //# new ambiguities, # clock resets, # L1 ambiguity resets
|
---|
373 |
|
---|
374 | //# of each mark flag for P1, L1 and L2
|
---|
375 | //-- so perhaps 10 mark 0s for P1, 2 mark 3s for P1, 10 mark 0s for L1, etc.
|
---|
376 |
|
---|
377 | // other ideas:
|
---|
378 | // Send basic input file information or entire input file.
|
---|
379 | // Send current file used for orbits (or host/port if using external orbits).
|
---|
380 |
|
---|
381 |
|
---|
382 | //----
|
---|
383 | //Data latency per epoch. Processing time per step.
|
---|
384 | //slant delay (maybe same as mres) (per station, per satellite, per LC, per epoch)
|
---|
385 |
|
---|