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