| 1 | #ifndef RTCM3_CLOCK_ORBIT_H
|
|---|
| 2 | #define RTCM3_CLOCK_ORBIT_H
|
|---|
| 3 |
|
|---|
| 4 | /* Programheader
|
|---|
| 5 |
|
|---|
| 6 | Name: clock_orbit.h
|
|---|
| 7 | Project: RTCM3
|
|---|
| 8 | Version: $Id: clock_orbit_igs.h 8966 2020-07-01 07:48:35Z stuerze $
|
|---|
| 9 | Authors: Dirk Stöcker, Andrea Stürze
|
|---|
| 10 | Description: state space approach
|
|---|
| 11 | */
|
|---|
| 12 |
|
|---|
| 13 | #include <QList>
|
|---|
| 14 | #include <stdint.h>
|
|---|
| 15 | #include <string.h>
|
|---|
| 16 | #include <math.h>
|
|---|
| 17 | #include "t_prn.h"
|
|---|
| 18 | #include "bncutils.h"
|
|---|
| 19 | #include "RTCM3/bits.h"
|
|---|
| 20 |
|
|---|
| 21 | enum IGS_NUMBERS {
|
|---|
| 22 | RTCM_MESSAGE_NUMBER_IGS = 4076,
|
|---|
| 23 | IGS_SSR_VERSION = 3
|
|---|
| 24 | };
|
|---|
| 25 |
|
|---|
| 26 | /* if some systems aren't supported at all, change the following numbers to zero
|
|---|
| 27 | for these systems to save space */
|
|---|
| 28 | enum COR_CONSTANTS {
|
|---|
| 29 | CLOCKORBIT_BUFFERSIZE = 8192,
|
|---|
| 30 | CLOCKORBIT_NUMGPS = t_prn::MAXPRN_GPS,
|
|---|
| 31 | CLOCKORBIT_NUMGLONASS = t_prn::MAXPRN_GLONASS,
|
|---|
| 32 | CLOCKORBIT_NUMGALILEO = t_prn::MAXPRN_GALILEO,
|
|---|
| 33 | CLOCKORBIT_NUMQZSS = t_prn::MAXPRN_QZSS,
|
|---|
| 34 | CLOCKORBIT_NUMSBAS = t_prn::MAXPRN_SBAS,
|
|---|
| 35 | CLOCKORBIT_NUMBDS = t_prn::MAXPRN_BDS,
|
|---|
| 36 | CLOCKORBIT_NUMBIAS = 150,
|
|---|
| 37 | CLOCKORBIT_NUMIONOLAYERS = 4,
|
|---|
| 38 | CLOCKORBIT_MAXIONOORDER = 16,
|
|---|
| 39 | CLOCKORBIT_MAXIONODEGREE = 16
|
|---|
| 40 | };
|
|---|
| 41 |
|
|---|
| 42 | enum COR_SATSYSTEM {
|
|---|
| 43 | CLOCKORBIT_SATGPS = 0,
|
|---|
| 44 | CLOCKORBIT_SATGLONASS,
|
|---|
| 45 | CLOCKORBIT_SATGALILEO,
|
|---|
| 46 | CLOCKORBIT_SATQZSS,
|
|---|
| 47 | CLOCKORBIT_SATSBAS,
|
|---|
| 48 | CLOCKORBIT_SATBDS,
|
|---|
| 49 | CLOCKORBIT_SATNUM
|
|---|
| 50 | };
|
|---|
| 51 |
|
|---|
| 52 | enum COR_OFFSETS {
|
|---|
| 53 | CLOCKORBIT_OFFSETGPS = 0,
|
|---|
| 54 | CLOCKORBIT_OFFSETGLONASS = CLOCKORBIT_NUMGPS,
|
|---|
| 55 | CLOCKORBIT_OFFSETGALILEO = CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS,
|
|---|
| 56 | CLOCKORBIT_OFFSETQZSS = CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS + CLOCKORBIT_NUMGALILEO,
|
|---|
| 57 | CLOCKORBIT_OFFSETSBAS = CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS + CLOCKORBIT_NUMGALILEO + CLOCKORBIT_NUMQZSS,
|
|---|
| 58 | CLOCKORBIT_OFFSETBDS = CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS + CLOCKORBIT_NUMGALILEO + CLOCKORBIT_NUMQZSS + CLOCKORBIT_NUMSBAS,
|
|---|
| 59 | CLOCKORBIT_COUNTSAT = CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS + CLOCKORBIT_NUMGALILEO + CLOCKORBIT_NUMQZSS + CLOCKORBIT_NUMSBAS + CLOCKORBIT_NUMBDS
|
|---|
| 60 | };
|
|---|
| 61 |
|
|---|
| 62 | enum GCOB_RETURN {
|
|---|
| 63 | /* all well */
|
|---|
| 64 | GCOBR_MESSAGEFOLLOWS = 1,
|
|---|
| 65 | GCOBR_OK = 0,
|
|---|
| 66 | /* unknown data, a warning */
|
|---|
| 67 | GCOBR_UNKNOWNTYPE = -1,
|
|---|
| 68 | GCOBR_UNKNOWNDATA = -2,
|
|---|
| 69 | GCOBR_CRCMISMATCH = -3,
|
|---|
| 70 | GCOBR_SHORTMESSAGE = -4,
|
|---|
| 71 | /* failed to do the work */
|
|---|
| 72 | GCOBR_NOCLOCKORBITPARAMETER = -10,
|
|---|
| 73 | GCOBR_NOCODEBIASPARAMETER = -11,
|
|---|
| 74 | GCOBR_NOPHASEBIASPARAMETER = -12,
|
|---|
| 75 | GCOBR_NOVTECPARAMETER = -13,
|
|---|
| 76 | /* data mismatch - data in storage does not match new data */
|
|---|
| 77 | GCOBR_TIMEMISMATCH = -20,
|
|---|
| 78 | GCOBR_DATAMISMATCH = -21,
|
|---|
| 79 | /* not enough data - can decode the block completely */
|
|---|
| 80 | GCOBR_SHORTBUFFER = -30,
|
|---|
| 81 | GCOBR_MESSAGEEXCEEDSBUFFER = -31
|
|---|
| 82 | /* NOTE: When an error message has been emitted, the output structures may have been modified.
|
|---|
| 83 | * Make a copy of the previous variant before calling the
|
|---|
| 84 | function to have a clean state. */
|
|---|
| 85 | };
|
|---|
| 86 |
|
|---|
| 87 | class SsrCorr {
|
|---|
| 88 |
|
|---|
| 89 | public:
|
|---|
| 90 | SsrCorr();
|
|---|
| 91 | virtual ~SsrCorr();
|
|---|
| 92 | virtual void setCorBase() = 0;
|
|---|
| 93 | virtual void setCorOffset() = 0;
|
|---|
| 94 | virtual void setCoType() = 0;
|
|---|
| 95 | virtual void setCbType() = 0;
|
|---|
| 96 | virtual void setPbType() = 0;
|
|---|
| 97 | virtual void setPbExtType() = 0;
|
|---|
| 98 | virtual void setVtecType() = 0;
|
|---|
| 99 | virtual void setCodeType() = 0;
|
|---|
| 100 |
|
|---|
| 101 | typedef unsigned int SatelliteReferenceDatum;
|
|---|
| 102 | SatelliteReferenceDatum DATUM_ITRF;
|
|---|
| 103 | SatelliteReferenceDatum DATUM_LOCAL;
|
|---|
| 104 |
|
|---|
| 105 | typedef unsigned int CorBase;
|
|---|
| 106 | CorBase COBBASE_GPS;
|
|---|
| 107 | CorBase COBBASE_GLONASS;
|
|---|
| 108 | CorBase COBBASE_GALILEO;
|
|---|
| 109 | CorBase COBBASE_QZSS;
|
|---|
| 110 | CorBase COBBASE_BDS;
|
|---|
| 111 | CorBase COBBASE_SBAS;
|
|---|
| 112 | CorBase COBBASE_NUM;
|
|---|
| 113 |
|
|---|
| 114 | typedef unsigned int CorOffset;
|
|---|
| 115 | CorOffset COBOFS_ORBIT;
|
|---|
| 116 | CorOffset COBOFS_CLOCK;
|
|---|
| 117 | CorOffset COBOFS_COMBINED;
|
|---|
| 118 | CorOffset COBOFS_HR;
|
|---|
| 119 | CorOffset COBOFS_CBIAS;
|
|---|
| 120 | CorOffset COBOFS_PBIAS;
|
|---|
| 121 | CorOffset COBOFS_URA;
|
|---|
| 122 | CorOffset COBOFS_NUM;
|
|---|
| 123 |
|
|---|
| 124 | typedef unsigned int ClockOrbitType;
|
|---|
| 125 | ClockOrbitType COTYPE_GPSORBIT;
|
|---|
| 126 | ClockOrbitType COTYPE_GPSCLOCK;
|
|---|
| 127 | ClockOrbitType COTYPE_GPSCOMBINED;
|
|---|
| 128 | ClockOrbitType COTYPE_GPSHR;
|
|---|
| 129 | ClockOrbitType COTYPE_GPSURA;
|
|---|
| 130 |
|
|---|
| 131 | ClockOrbitType COTYPE_GLONASSORBIT;
|
|---|
| 132 | ClockOrbitType COTYPE_GLONASSCLOCK;
|
|---|
| 133 | ClockOrbitType COTYPE_GLONASSCOMBINED;
|
|---|
| 134 | ClockOrbitType COTYPE_GLONASSHR;
|
|---|
| 135 | ClockOrbitType COTYPE_GLONASSURA;
|
|---|
| 136 |
|
|---|
| 137 | ClockOrbitType COTYPE_GALILEOORBIT;
|
|---|
| 138 | ClockOrbitType COTYPE_GALILEOCLOCK;
|
|---|
| 139 | ClockOrbitType COTYPE_GALILEOCOMBINED;
|
|---|
| 140 | ClockOrbitType COTYPE_GALILEOHR;
|
|---|
| 141 | ClockOrbitType COTYPE_GALILEOURA;
|
|---|
| 142 |
|
|---|
| 143 | ClockOrbitType COTYPE_QZSSORBIT;
|
|---|
| 144 | ClockOrbitType COTYPE_QZSSCLOCK;
|
|---|
| 145 | ClockOrbitType COTYPE_QZSSCOMBINED;
|
|---|
| 146 | ClockOrbitType COTYPE_QZSSHR;
|
|---|
| 147 | ClockOrbitType COTYPE_QZSSURA;
|
|---|
| 148 |
|
|---|
| 149 | ClockOrbitType COTYPE_SBASORBIT;
|
|---|
| 150 | ClockOrbitType COTYPE_SBASCLOCK;
|
|---|
| 151 | ClockOrbitType COTYPE_SBASCOMBINED;
|
|---|
| 152 | ClockOrbitType COTYPE_SBASHR;
|
|---|
| 153 | ClockOrbitType COTYPE_SBASURA;
|
|---|
| 154 |
|
|---|
| 155 | ClockOrbitType COTYPE_BDSORBIT;
|
|---|
| 156 | ClockOrbitType COTYPE_BDSCLOCK;
|
|---|
| 157 | ClockOrbitType COTYPE_BDSCOMBINED;
|
|---|
| 158 | ClockOrbitType COTYPE_BDSHR;
|
|---|
| 159 | ClockOrbitType COTYPE_BDSURA;
|
|---|
| 160 |
|
|---|
| 161 | ClockOrbitType COTYPE_AUTO;
|
|---|
| 162 |
|
|---|
| 163 | typedef unsigned int CodeBiasType;
|
|---|
| 164 | CodeBiasType CBTYPE_GPS;
|
|---|
| 165 | CodeBiasType CBTYPE_GLONASS;
|
|---|
| 166 | CodeBiasType CBTYPE_GALILEO;
|
|---|
| 167 | CodeBiasType CBTYPE_QZSS;
|
|---|
| 168 | CodeBiasType CBTYPE_SBAS;
|
|---|
| 169 | CodeBiasType CBTYPE_BDS;
|
|---|
| 170 | CodeBiasType CBTYPE_AUTO;
|
|---|
| 171 |
|
|---|
| 172 | typedef unsigned int PhaseBiasType;
|
|---|
| 173 | PhaseBiasType PBTYPE_BASE;
|
|---|
| 174 | PhaseBiasType PBTYPE_GPS;
|
|---|
| 175 | PhaseBiasType PBTYPE_GLONASS;
|
|---|
| 176 | PhaseBiasType PBTYPE_GALILEO;
|
|---|
| 177 | PhaseBiasType PBTYPE_QZSS;
|
|---|
| 178 | PhaseBiasType PBTYPE_SBAS;
|
|---|
| 179 | PhaseBiasType PBTYPE_BDS;
|
|---|
| 180 | PhaseBiasType PBTYPE_RESERVED; // reserved for NavIC
|
|---|
| 181 | PhaseBiasType PBTYPE_AUTO;
|
|---|
| 182 |
|
|---|
| 183 | typedef unsigned int PhaseBiasExtType;
|
|---|
| 184 | PhaseBiasExtType PBEXTTYPE_BASE;
|
|---|
| 185 | PhaseBiasExtType PBEXTTYPE_GPS;
|
|---|
| 186 | PhaseBiasExtType PBEXTTYPE_GLONASS;
|
|---|
| 187 | PhaseBiasExtType PBEXTTYPE_GALILEO;
|
|---|
| 188 | PhaseBiasExtType PBEXTTYPE_QZSS;
|
|---|
| 189 | PhaseBiasExtType PBEXTTYPE_BDS;
|
|---|
| 190 | PhaseBiasExtType PBEXTTYPE_RESERVED; // reserved for NavIC
|
|---|
| 191 | PhaseBiasExtType PBEXTTYPE_AUTO;
|
|---|
| 192 |
|
|---|
| 193 | typedef unsigned int VtecType;
|
|---|
| 194 | VtecType VTEC_BASE;
|
|---|
| 195 |
|
|---|
| 196 | typedef unsigned int SatAntennaType;
|
|---|
| 197 | SatAntennaType SATANTTYPE_BASE;
|
|---|
| 198 | SatAntennaType SATANTTYPE_GPS;
|
|---|
| 199 | SatAntennaType SATANTTYPE_GLONASS;
|
|---|
| 200 | SatAntennaType SATANTTYPE_GALILEO;
|
|---|
| 201 | SatAntennaType SATANTTYPE_QZSS;
|
|---|
| 202 | SatAntennaType SATANTTYPE_BDS;
|
|---|
| 203 | SatAntennaType SATANTTYPE_RESEVED; // reserved for NavIC
|
|---|
| 204 | SatAntennaType SATANTTYPE_AUTO;
|
|---|
| 205 |
|
|---|
| 206 | typedef unsigned int GridDefinitionType;
|
|---|
| 207 | GridDefinitionType GRID_BASE;
|
|---|
| 208 |
|
|---|
| 209 | typedef unsigned int TropoType;
|
|---|
| 210 | TropoType TROPOTYPE_BASE;
|
|---|
| 211 |
|
|---|
| 212 | typedef unsigned int RegionalIonoType;
|
|---|
| 213 | RegionalIonoType REGIONOTYPE_BASE;
|
|---|
| 214 | RegionalIonoType REGIONOTYPE_GPS;
|
|---|
| 215 | RegionalIonoType REGIONOTYPE_GLONASS;
|
|---|
| 216 | RegionalIonoType REGIONOTYPE_GALILEO;
|
|---|
| 217 | RegionalIonoType REGIONOTYPE_QZSS;
|
|---|
| 218 | RegionalIonoType REGIONOTYPE_BDS;
|
|---|
| 219 | RegionalIonoType REGIONOTYPE_AUTO;
|
|---|
| 220 |
|
|---|
| 221 | typedef unsigned int MetadataType;
|
|---|
| 222 | MetadataType METADATATYPE_BASE;
|
|---|
| 223 |
|
|---|
| 224 | typedef unsigned int CodeType;
|
|---|
| 225 | CodeType CODETYPE_RESERVED;
|
|---|
| 226 | CodeType CODETYPE_GPS_L1_CA;
|
|---|
| 227 | CodeType CODETYPE_GPS_L1_P;
|
|---|
| 228 | CodeType CODETYPE_GPS_L1_Z;
|
|---|
| 229 | CodeType CODETYPE_GPS_L1C_D;
|
|---|
| 230 | CodeType CODETYPE_GPS_L1C_P;
|
|---|
| 231 | CodeType CODETYPE_GPS_L1C_DP;
|
|---|
| 232 | CodeType CODETYPE_GPS_L2_CA;
|
|---|
| 233 | CodeType CODETYPE_GPS_SEMI_CODELESS;
|
|---|
| 234 | CodeType CODETYPE_GPS_L2C_M;
|
|---|
| 235 | CodeType CODETYPE_GPS_L2C_L;
|
|---|
| 236 | CodeType CODETYPE_GPS_L2C_ML;
|
|---|
| 237 | CodeType CODETYPE_GPS_L2_P;
|
|---|
| 238 | CodeType CODETYPE_GPS_L2_Z;
|
|---|
| 239 | CodeType CODETYPE_GPS_L5_I;
|
|---|
| 240 | CodeType CODETYPE_GPS_L5_Q;
|
|---|
| 241 | CodeType CODETYPE_GPS_L5_IQ;
|
|---|
| 242 |
|
|---|
| 243 | CodeType CODETYPE_GLONASS_L1_CA;
|
|---|
| 244 | CodeType CODETYPE_GLONASS_L1_P;
|
|---|
| 245 | CodeType CODETYPE_GLONASS_L2_CA;
|
|---|
| 246 | CodeType CODETYPE_GLONASS_L2_P;
|
|---|
| 247 | CodeType CODETYPE_GLONASS_L1a_OCd;
|
|---|
| 248 | CodeType CODETYPE_GLONASS_L1a_OCp;
|
|---|
| 249 | CodeType CODETYPE_GLONASS_L1a_OCdp;
|
|---|
| 250 | CodeType CODETYPE_GLONASS_L2a_CSI;
|
|---|
| 251 | CodeType CODETYPE_GLONASS_L2a_OCp;
|
|---|
| 252 | CodeType CODETYPE_GLONASS_L2a_CSIOCp;
|
|---|
| 253 | CodeType CODETYPE_GLONASS_L3_I;
|
|---|
| 254 | CodeType CODETYPE_GLONASS_L3_Q;
|
|---|
| 255 | CodeType CODETYPE_GLONASS_L3_IQ;
|
|---|
| 256 |
|
|---|
| 257 | CodeType CODETYPE_GALILEO_E1_A;
|
|---|
| 258 | CodeType CODETYPE_GALILEO_E1_B;
|
|---|
| 259 | CodeType CODETYPE_GALILEO_E1_C;
|
|---|
| 260 | CodeType CODETYPE_GALILEO_E1_BC;
|
|---|
| 261 | CodeType CODETYPE_GALILEO_E1_ABC;
|
|---|
| 262 | CodeType CODETYPE_GALILEO_E5A_I;
|
|---|
| 263 | CodeType CODETYPE_GALILEO_E5A_Q;
|
|---|
| 264 | CodeType CODETYPE_GALILEO_E5A_IQ;
|
|---|
| 265 | CodeType CODETYPE_GALILEO_E5B_I;
|
|---|
| 266 | CodeType CODETYPE_GALILEO_E5B_Q;
|
|---|
| 267 | CodeType CODETYPE_GALILEO_E5B_IQ;
|
|---|
| 268 | CodeType CODETYPE_GALILEO_E5_I;
|
|---|
| 269 | CodeType CODETYPE_GALILEO_E5_Q;
|
|---|
| 270 | CodeType CODETYPE_GALILEO_E5_IQ;
|
|---|
| 271 | CodeType CODETYPE_GALILEO_E6_A;
|
|---|
| 272 | CodeType CODETYPE_GALILEO_E6_B;
|
|---|
| 273 | CodeType CODETYPE_GALILEO_E6_C;
|
|---|
| 274 | CodeType CODETYPE_GALILEO_E6_BC;
|
|---|
| 275 | CodeType CODETYPE_GALILEO_E6_ABC;
|
|---|
| 276 |
|
|---|
| 277 | CodeType CODETYPE_QZSS_L1_CA;
|
|---|
| 278 | CodeType CODETYPE_QZSS_L1C_D;
|
|---|
| 279 | CodeType CODETYPE_QZSS_L1C_P;
|
|---|
| 280 | CodeType CODETYPE_QZSS_L2C_M;
|
|---|
| 281 | CodeType CODETYPE_QZSS_L2C_L;
|
|---|
| 282 | CodeType CODETYPE_QZSS_L2C_ML;
|
|---|
| 283 | CodeType CODETYPE_QZSS_L5_I;
|
|---|
| 284 | CodeType CODETYPE_QZSS_L5_Q;
|
|---|
| 285 | CodeType CODETYPE_QZSS_L5_IQ;
|
|---|
| 286 | CodeType CODETYPE_QZSS_L6_D;
|
|---|
| 287 | CodeType CODETYPE_QZSS_L6_P;
|
|---|
| 288 | CodeType CODETYPE_QZSS_L6_DP;
|
|---|
| 289 | CodeType CODETYPE_QZSS_L1C_DP;
|
|---|
| 290 | CodeType CODETYPE_QZSS_L1_S;
|
|---|
| 291 | CodeType CODETYPE_QZSS_L5_D;
|
|---|
| 292 | CodeType CODETYPE_QZSS_L5_P;
|
|---|
| 293 | CodeType CODETYPE_QZSS_L5_DP;
|
|---|
| 294 | CodeType CODETYPE_QZSS_L6_E;
|
|---|
| 295 | CodeType CODETYPE_QZSS_L6_DE;
|
|---|
| 296 |
|
|---|
| 297 | CodeType CODETYPE_SBAS_L1_CA;
|
|---|
| 298 | CodeType CODETYPE_SBAS_L5_I;
|
|---|
| 299 | CodeType CODETYPE_SBAS_L5_Q;
|
|---|
| 300 | CodeType CODETYPE_SBAS_L5_IQ;
|
|---|
| 301 |
|
|---|
| 302 | CodeType CODETYPE_BDS_B1_I;
|
|---|
| 303 | CodeType CODETYPE_BDS_B1_Q;
|
|---|
| 304 | CodeType CODETYPE_BDS_B1_IQ;
|
|---|
| 305 | CodeType CODETYPE_BDS_B3_I;
|
|---|
| 306 | CodeType CODETYPE_BDS_B3_Q;
|
|---|
| 307 | CodeType CODETYPE_BDS_B3_IQ;
|
|---|
| 308 | CodeType CODETYPE_BDS_B2_I;
|
|---|
| 309 | CodeType CODETYPE_BDS_B2_Q;
|
|---|
| 310 | CodeType CODETYPE_BDS_B2_IQ;
|
|---|
| 311 | CodeType CODETYPE_BDS_B1a_D;
|
|---|
| 312 | CodeType CODETYPE_BDS_B1a_P;
|
|---|
| 313 | CodeType CODETYPE_BDS_B1a_DP;
|
|---|
| 314 | CodeType CODETYPE_BDS_B1C_D;
|
|---|
| 315 | CodeType CODETYPE_BDS_B1C_P;
|
|---|
| 316 | CodeType CODETYPE_BDS_B1C_DP;
|
|---|
| 317 | CodeType CODETYPE_BDS_B2a_D;
|
|---|
| 318 | CodeType CODETYPE_BDS_B2a_P;
|
|---|
| 319 | CodeType CODETYPE_BDS_B2a_DP;
|
|---|
| 320 | CodeType CODETYPE_BDS_B2b_D;
|
|---|
| 321 | CodeType CODETYPE_BDS_B1_A;
|
|---|
| 322 | CodeType CODETYPE_BDS_B3_A;
|
|---|
| 323 |
|
|---|
| 324 | QList<CorBase> corbase;
|
|---|
| 325 | QList<unsigned int> satoffset;
|
|---|
| 326 |
|
|---|
| 327 |
|
|---|
| 328 | #define SSR_MAXURA 5.5 /* > 5466.5mm in meter */
|
|---|
| 329 | #define COBOFS_MAXNUM 7
|
|---|
| 330 |
|
|---|
| 331 | /* satellite system data is stored with offset CLOCKORBIT_OFFSET...
|
|---|
| 332 | in the data structures. So first GLONASS satellite is at
|
|---|
| 333 | xxx->Sat[CLOCKORBIT_OFFSETGLONASS], first GPS satellite is
|
|---|
| 334 | xxx->Sat[CLOCKORBIT_OFFSETGPS]. */
|
|---|
| 335 |
|
|---|
| 336 | struct ClockOrbit {
|
|---|
| 337 | ClockOrbitType messageType;
|
|---|
| 338 | unsigned int EpochTime[CLOCKORBIT_SATNUM]; /* 0 .. system specific maximum */
|
|---|
| 339 | unsigned int NumberOfSat[CLOCKORBIT_SATNUM]; /* 0 .. CLOCKORBIT_NUM... */
|
|---|
| 340 | unsigned int Supplied[COBOFS_MAXNUM]; /* boolean */
|
|---|
| 341 | unsigned int SSRIOD;
|
|---|
| 342 | unsigned int SSRProviderID;
|
|---|
| 343 | unsigned int SSRSolutionID;
|
|---|
| 344 | unsigned int UpdateInterval;
|
|---|
| 345 | SatelliteReferenceDatum SatRefDatum;
|
|---|
| 346 | struct SatData {
|
|---|
| 347 | unsigned int ID; /* all */
|
|---|
| 348 | unsigned int IOD; /* all */
|
|---|
| 349 | unsigned int toe; /* SBAS, BDS */
|
|---|
| 350 | double UserRangeAccuracy; /* accuracy values in [m] */
|
|---|
| 351 | double hrclock;
|
|---|
| 352 | struct OrbitPart {
|
|---|
| 353 | double DeltaRadial; /* m */
|
|---|
| 354 | double DeltaAlongTrack; /* m */
|
|---|
| 355 | double DeltaCrossTrack; /* m */
|
|---|
| 356 | double DotDeltaRadial; /* m/s */
|
|---|
| 357 | double DotDeltaAlongTrack; /* m/s */
|
|---|
| 358 | double DotDeltaCrossTrack; /* m/s */
|
|---|
| 359 | } Orbit;
|
|---|
| 360 | struct ClockPart {
|
|---|
| 361 | double DeltaA0; /* m */
|
|---|
| 362 | double DeltaA1; /* m/s */
|
|---|
| 363 | double DeltaA2; /* m/ss */
|
|---|
| 364 | } Clock;
|
|---|
| 365 | } Sat[CLOCKORBIT_COUNTSAT];
|
|---|
| 366 | };
|
|---|
| 367 |
|
|---|
| 368 | struct CodeBias {
|
|---|
| 369 | CodeBiasType messageType;
|
|---|
| 370 | unsigned int EpochTime[CLOCKORBIT_SATNUM]; /* 0 .. system specific maximum */
|
|---|
| 371 | unsigned int NumberOfSat[CLOCKORBIT_SATNUM]; /* 0 .. CLOCKORBIT_NUM... */
|
|---|
| 372 | unsigned int UpdateInterval;
|
|---|
| 373 | unsigned int SSRIOD;
|
|---|
| 374 | unsigned int SSRProviderID;
|
|---|
| 375 | unsigned int SSRSolutionID;
|
|---|
| 376 | struct BiasSat {
|
|---|
| 377 | unsigned int ID; /* all */
|
|---|
| 378 | unsigned int NumberOfCodeBiases;
|
|---|
| 379 | struct CodeBiasEntry {
|
|---|
| 380 | CodeType Type;
|
|---|
| 381 | float Bias; /* m */
|
|---|
| 382 | } Biases[CLOCKORBIT_NUMBIAS];
|
|---|
| 383 | } Sat[CLOCKORBIT_COUNTSAT];
|
|---|
| 384 | };
|
|---|
| 385 |
|
|---|
| 386 | struct PhaseBias {
|
|---|
| 387 | PhaseBiasType messageType;
|
|---|
| 388 | PhaseBiasExtType messageExtType;
|
|---|
| 389 | unsigned int EpochTime[CLOCKORBIT_SATNUM]; /* 0 .. system specific maximum */
|
|---|
| 390 | unsigned int NumberOfSat[CLOCKORBIT_SATNUM]; /* 0 .. CLOCKORBIT_NUM... */
|
|---|
| 391 | unsigned int UpdateInterval;
|
|---|
| 392 | unsigned int SSRIOD;
|
|---|
| 393 | unsigned int SSRProviderID;
|
|---|
| 394 | unsigned int SSRSolutionID;
|
|---|
| 395 | /* IGS-SSR and old RTCM-SSR only*/
|
|---|
| 396 | unsigned int DispersiveBiasConsistencyIndicator;
|
|---|
| 397 | unsigned int MWConsistencyIndicator;
|
|---|
| 398 | /* new RTCM-SSR only*/
|
|---|
| 399 | unsigned int SatelliteYawInformationIndicator;
|
|---|
| 400 | unsigned int ExtendedPhaseBiasPropertyID;
|
|---|
| 401 | struct PhaseBiasSat {
|
|---|
| 402 | unsigned int ID; /* all */
|
|---|
| 403 | unsigned int NumberOfPhaseBiases;
|
|---|
| 404 | double YawAngle; /* radiant */
|
|---|
| 405 | double YawRate; /* radiant/s */
|
|---|
| 406 | struct PhaseBiasEntry {
|
|---|
| 407 | CodeType Type;
|
|---|
| 408 | unsigned int IntegerIndicator;
|
|---|
| 409 | unsigned int DiscontinuityCounter;
|
|---|
| 410 | unsigned int WidelaneGroupIndicator;
|
|---|
| 411 | float Bias; /* m */
|
|---|
| 412 | } Biases[CLOCKORBIT_NUMBIAS];
|
|---|
| 413 | } Sat[CLOCKORBIT_COUNTSAT];
|
|---|
| 414 | };
|
|---|
| 415 |
|
|---|
| 416 | struct VTEC {
|
|---|
| 417 | unsigned int EpochTime; /* GPS */
|
|---|
| 418 | unsigned int UpdateInterval;
|
|---|
| 419 | unsigned int SSRIOD;
|
|---|
| 420 | unsigned int SSRProviderID;
|
|---|
| 421 | unsigned int SSRSolutionID;
|
|---|
| 422 | unsigned int NumLayers; /* 1-4 */
|
|---|
| 423 | double Quality;
|
|---|
| 424 | struct IonoLayers {
|
|---|
| 425 | double Height; /* m */
|
|---|
| 426 | unsigned int Degree; /* 1-16 */
|
|---|
| 427 | unsigned int Order; /* 1-16 */
|
|---|
| 428 | double Sinus[CLOCKORBIT_MAXIONODEGREE][CLOCKORBIT_MAXIONOORDER];
|
|---|
| 429 | double Cosinus[CLOCKORBIT_MAXIONODEGREE][CLOCKORBIT_MAXIONOORDER];
|
|---|
| 430 | } Layers[CLOCKORBIT_NUMIONOLAYERS];
|
|---|
| 431 | };
|
|---|
| 432 |
|
|---|
| 433 | /* return size of resulting data or 0 in case of an error */
|
|---|
| 434 | virtual size_t MakeClockOrbit(const struct ClockOrbit *co, CodeType type, int moremessagesfollow, char *buffer, size_t size) = 0;
|
|---|
| 435 | virtual size_t MakeCodeBias(const struct CodeBias *b, CodeBiasType type, int moremessagesfollow, char *buffer, size_t size) = 0;
|
|---|
| 436 | virtual size_t MakePhaseBias(const struct PhaseBias *b, CodeBiasType type, int moremessagesfollow, char *buffer, size_t size) = 0;
|
|---|
| 437 | virtual size_t MakeVTEC(const struct VTEC *v, int moremessagesfollow, char *buffer, size_t size) = 0;
|
|---|
| 438 |
|
|---|
| 439 | /* buffer should point to a RTCM3 block */
|
|---|
| 440 | virtual enum GCOB_RETURN GetSSR(struct ClockOrbit *co, struct CodeBias *b, struct VTEC *v, struct PhaseBias *pb,
|
|---|
| 441 | const char *buffer, size_t size, int *bytesused) = 0;
|
|---|
| 442 | virtual std::string codeTypeToRnxType(char system, CodeType type) = 0;
|
|---|
| 443 | virtual CodeType rnxTypeToCodeType(char system, std::string type) = 0;
|
|---|
| 444 |
|
|---|
| 445 | #define MPI 3.141592653589793
|
|---|
| 446 |
|
|---|
| 447 | /* GNSS macros - Header part */
|
|---|
| 448 | #define E_RTCM_MESSAGE_NUMBER(a) ADDBITS(12, a) /* DF002 */
|
|---|
| 449 | #define E_IGS_SSR_VERSION(a) ADDBITS( 3, a) /* IDF001 */
|
|---|
| 450 | #define E_IGS_MESSAGE_NUMBER(a) ADDBITS( 8, a) /* IDF002 */
|
|---|
| 451 |
|
|---|
| 452 | #define E_GPS_EPOCH_TIME(a) ADDBITS(20, a) /* IDF003 DF385 DF458 DF460 DF465*/
|
|---|
| 453 | #define E_GLONASS_EPOCH_TIME(a) ADDBITS(17, a) /* DF386 */
|
|---|
| 454 | #define E_SSR_UPDATE_INTERVAL(a) ADDBITS( 4, a) /* DF391, IDF004 */
|
|---|
| 455 | #define E_MULTIPLE_MESSAGE_INDICATOR(a) ADDBITS( 1, a) /* DF388, IDF005 */
|
|---|
| 456 | #define E_SSR_IOD(a) ADDBITS( 4, a) /* DF413, IDF007 */
|
|---|
| 457 | #define E_SSR_PROVIDER_ID(a) ADDBITS(16, a) /* DF414, IDF008 */
|
|---|
| 458 | #define E_SSR_SOLUTION_ID(a) ADDBITS( 4, a) /* DF415, IDF009 */
|
|---|
| 459 | #define E_SATELLITE_REFERENCE_DATUM(a) ADDBITS( 1, a) /* DF375, IDF006 */
|
|---|
| 460 | #define E_NO_OF_SATELLITES(a) ADDBITS( 6, a) /* DF387, IDF010 */
|
|---|
| 461 |
|
|---|
| 462 | /* GNSS macros - Satellite specific part */
|
|---|
| 463 | #define E_GPS_SATELLITE_ID(a) ADDBITS( 6, a) /* IDF011 DF068 DF488 */
|
|---|
| 464 | #define E_QZSS_SATELLITE_ID_OLD(a) ADDBITS( 4, a) /* DF249 (old RTCM)*/
|
|---|
| 465 | #define E_GLONASS_SATELLITE_ID_OLD(a) ADDBITS( 5, a) /* DF384 (old RTCM) */
|
|---|
| 466 | #define E_GPS_IODE(a) ADDBITS( 8, a) /* IDF012 DF071 */
|
|---|
| 467 | #define E_GLONASS_IOD(a) ADDBITS( 8, a) /* DF392 */
|
|---|
| 468 | #define E_GALILEO_IOD(a) ADDBITS(10, a) /* DF459 */
|
|---|
| 469 | #define E_SBAS_T0MOD(a) ADDBITS( 9, (a/16)) /* DF468 */
|
|---|
| 470 | #define E_SBAS_IODCRC(a) ADDBITS(24, a) /* DF469 */
|
|---|
| 471 | #define E_BDS_TOEMOD(a) ADDBITS(10, (a/8)) /* DF470 */
|
|---|
| 472 | #define E_BDS_IOD(a) ADDBITS( 8, a) /* DF471 */
|
|---|
| 473 |
|
|---|
| 474 | /* Orbit Corrections */
|
|---|
| 475 | #define E_DELTA_RADIAL(a) SCALEADDBITS(22, 10000.0, a) /* DF365, IDF013 */
|
|---|
| 476 | #define E_DELTA_ALONG_TRACK(a) SCALEADDBITS(20, 2500.0, a) /* DF366, IDF014 */
|
|---|
| 477 | #define E_DELTA_CROSS_TRACK(a) SCALEADDBITS(20, 2500.0, a) /* DF367, IDF015 */
|
|---|
| 478 | #define E_DOT_DELTA_RADIAL(a) SCALEADDBITS(21, 1000000.0, a) /* DF368, IDF016 */
|
|---|
| 479 | #define E_DOT_DELTA_ALONG_TRACK(a) SCALEADDBITS(19, 250000.0, a) /* DF369, IDF017 */
|
|---|
| 480 | #define E_DOT_DELTA_CROSS_TRACK(a) SCALEADDBITS(19, 250000.0, a) /* DF370, IDF018 */
|
|---|
| 481 |
|
|---|
| 482 | /* Clock Corrections */
|
|---|
| 483 | #define E_DELTA_CLOCK_C0(a) SCALEADDBITS(22, 10000.0, a) /* DF376, IDF019 */
|
|---|
| 484 | #define E_DELTA_CLOCK_C1(a) SCALEADDBITS(21, 1000000.0, a) /* DF377, IDF020 */
|
|---|
| 485 | #define E_DELTA_CLOCK_C2(a) SCALEADDBITS(27, 50000000.0, a) /* DF378, IDF021 */
|
|---|
| 486 | #define E_HR_CLOCK_CORRECTION(a) SCALEADDBITS(22, 10000.0, a) /* DF390, IDF022 */
|
|---|
| 487 |
|
|---|
| 488 | /* Biases */
|
|---|
| 489 | #define E_NO_OF_BIASES(a) ADDBITS(5, a) /* DF479, DF379, IDF023 */
|
|---|
| 490 | #define E_GNSS_SIGNAL_IDENTIFIER(a) ADDBITS(5, a) /* DF380, IDF024 */
|
|---|
| 491 | #define E_CODE_BIAS(a) SCALEADDBITS(14, 100.0, a) /* DF383, IDF025 */
|
|---|
| 492 | #define E_YAW_ANGLE(a) SCALEADDBITS( 9, 256.0/MPI, a) /* DF480, IDF026 */
|
|---|
| 493 | #define E_YAW_RATE(a) SCALEADDBITS( 8, 8192.0/MPI, a) /* DF481, IDF027 */
|
|---|
| 494 | #define E_PHASE_BIAS_CORRECTION(a) SCALEADDBITS(20, 10000.0, a) /* DF482, IDF028 */
|
|---|
| 495 |
|
|---|
| 496 | /* Phase specific part of GNSS phase bias message */
|
|---|
| 497 | #define E_INTEGER_INDICATOR(a) ADDBITS(1, a) /* DF483, IDF029 */
|
|---|
| 498 | #define E_WIDE_LANE_INDICATOR(a) ADDBITS(2, a) /* DF484, IDF030 */
|
|---|
| 499 | #define E_DISCONTINUITY_COUNTER(a) ADDBITS(4, a) /* DF485, IDF031 */
|
|---|
| 500 | #define E_DISPERSIVE_BIAS_INDICATOR(a) ADDBITS(1, a) /* DF486 (old RTCM), IDF032 */
|
|---|
| 501 | #define E_YAW_INFO_INDICATOR(a) ADDBITS(1, a) /* DF486 (new RTCM) */
|
|---|
| 502 | #define E_MW_CONSISTENCY_INDICATOR(a) ADDBITS(1, a) /* DF487 (old RTCM), IDF033 */
|
|---|
| 503 | #define E_EXTENDED_PHASE_BIAS_ID(a) ADDBITS(4, a) /* DF+002 (new RTCM) */
|
|---|
| 504 |
|
|---|
| 505 | #define E_GLONASS_SATELLITE_ID(a) ADDBITS(6, a) /* DF+003 (new RTCM) */
|
|---|
| 506 |
|
|---|
| 507 | /* URA */
|
|---|
| 508 | #define E_SSR_URA(a) ADDBITS(6, a) /* DF389, IDF034 */
|
|---|
| 509 |
|
|---|
| 510 | /* Ionosphere */
|
|---|
| 511 | #define E_NO_IONO_LAYERS(a) ADDBITS(2, a-1) /* DF472, IDF035 */
|
|---|
| 512 | #define E_IONO_HEIGHT(a) SCALEADDBITS( 8, 1/10000.0, a) /* DF473, IDF036 */
|
|---|
| 513 | #define E_IONO_DEGREE(a) ADDBITS(4, a-1) /* DF474, IDF037 */
|
|---|
| 514 | #define E_IONO_ORDER(a) ADDBITS(4, a-1) /* DF475, IDF038 */
|
|---|
| 515 | #define E_IONO_COEFF_C(a) SCALEADDBITS(16, 200.0, a) /* DF476, IDF039 */
|
|---|
| 516 | #define E_IONO_COEFF_S(a) SCALEADDBITS(16, 200.0, a) /* DF477, IDF040 */
|
|---|
| 517 | #define E_VTEC_QUALITY_INDICATOR(a) SCALEADDBITS( 9, 20.0, a) /* DF478, IDF041 */
|
|---|
| 518 |
|
|---|
| 519 | /* Antenna Information*/
|
|---|
| 520 | #define E_SATELLITE_ANTENNA_IOD(a) ADDBITS(6, a) /* DF+010 (new RTCM) */
|
|---|
| 521 | #define E_PHASE_CENTER_INFO_INDICATOR(a) ADDBITS(1, a) /* DF+011 (new RTCM) */
|
|---|
| 522 | #define E_GROUP_DELAY_INFO_INDICATOR(a) ADDBITS(1, a) /* DF+012 (new RTCM) */
|
|---|
| 523 | #define E_NADIR_ANGLE_DEPENDENT_CORR_INDICATOR(a) ADDBITS(1, a) /* DF+013 (new RTCM) */
|
|---|
| 524 | #define E_MAXIMUM_OFF_NADIR_ANGLE(a) ADDBITS(5, a) /* DF+014 (new RTCM) */
|
|---|
| 525 | #define E_NADIR_ANGLE_DEPENDENT_CORR_RANGE_EXTENSION(a) ADDBITS(4, a) /* DF+015 (new RTCM) to extend DF+021*/
|
|---|
| 526 | #define E_SATELLITE_SET_INDICATOR(a) ADDBITS(1, a) /* DF+016 (new RTCM) */
|
|---|
| 527 | #define E_FREQUENCY_SET_INDICATOR(a) ADDBITS(1, a) /* DF+017 (new RTCM) */
|
|---|
| 528 | #define E_GNSS_FREQUENCY_MASK(a) ADDBITS(6, a) /* DF+018 (new RTCM) */
|
|---|
| 529 | #define E_NADIR_CORR_INDICATOR(a) ADDBITS(1, a) /* DF+019 (new RTCM) */
|
|---|
| 530 | #define E_NADIR_CORRECTION(a) SCALEADDBITS(12, 1000.0, a) /* DF+020 (new RTCM) [m] => [mm] */
|
|---|
| 531 | #define E_NADIR_ANGLE_DEPENDENT_CORRECTION(a, nbits) SCALEADDBITS(3 + nbits, 1000.0, a) /* DF+021 (new RTCM) [m] => [mm] can be extended up to 15/18 Bits from DF+015*/
|
|---|
| 532 | /*
|
|---|
| 533 | //Encoding
|
|---|
| 534 | #define E_NEW_PAR(a, nbits) ADDBITS(nbits, a) //called as E_NEW_PAR(co->NewPar, co->NewParNumBits)
|
|---|
| 535 | #define E_NEW_PAR_SCALE(a, nbits) SCALEADDBITS(nbits, 10000.0, a) //called as E_NEW_PAR(co->NewPar, co->NewParNumBits)
|
|---|
| 536 | */
|
|---|
| 537 | /* Grid Messages */
|
|---|
| 538 | #define E_GRID_ID(a) ADDBITS(10, a) /* DF+022 (new RTCM) */
|
|---|
| 539 | #define E_GRID_TYPE(a) ADDBITS(3 , a) /* DF+023 (new RTCM) */
|
|---|
| 540 | #define E_LATITUDE_OF_REFERENCE_POINT(a) SCALEADDBITS(18, 1000.0, a) /* DF+024 (new RTCM) */
|
|---|
| 541 | #define E_LONGITUDE_OF_REFERENCE_POINT(a) SCALEADDBITS(19, 1000.0, a) /* DF+025 (new RTCM) */
|
|---|
| 542 | #define E_ELLIPSOIDAL_HEIGHT_OF_REFERENCE_POINT(a) SCALEADDBITS(10, 1/12.5, a+1000.0) /* DF+026 (new RTCM) */
|
|---|
| 543 | #define E_NUMNBER_OF_RELATIVE_POINTS(a) ADDBITS(8, a) /* DF+027 (new RTCM) */
|
|---|
| 544 | #define E_RELATIVE_LATITUDE(a) SCALEADDBITS(13, 1000.0, a) /* DF+028 (new RTCM) */
|
|---|
| 545 | #define E_RELATIVE_LONGITUDE(a) SCALEADDBITS(14, 1000.0, a) /* DF+029 (new RTCM) */
|
|---|
| 546 | #define E_RELATIVE_HIGHT(a) SCALEADDBITS(9, 1/12.5, a) /* DF+030 (new RTCM) */
|
|---|
| 547 | #define E_NUMBER_OF_POINTS_IN_LATITIDE_DIRECTION(a) ADDBITS(6, a) /* DF+031 (new RTCM) */
|
|---|
| 548 | #define E_NUMBER_OF_POINTS_IN_LONGITUDE_DIRECTION(a) ADDBITS(6, a) /* DF+032 (new RTCM) */
|
|---|
| 549 | #define E_GRID_STEP_SIZE_IN_LATITIDE_DIRECTION(a) SCALEADDBITS(9, 100.0, a) /* DF+033 (new RTCM) */
|
|---|
| 550 | #define E_GRID_STEP_SIZE_IN_LONGITUDE_DIRECTION(a) SCALEADDBITS(10, 100.0, a) /* DF+034 (new RTCM) */
|
|---|
| 551 | #define E_GRID_MASK_AVAILABILITY_FLAG(a) ADDBITS(1, a) /* DF+035 (new RTCM) */
|
|---|
| 552 | #define E_GRID_MASK(a, nbits) ADDBITS(nbits, a) /* DF+036 (new RTCM) nbits from DF+031 or DF+032 */
|
|---|
| 553 |
|
|---|
| 554 | /* Troposphere Messages */
|
|---|
| 555 | #define E_HYDROSTATIC_MAPPING_FUNCTION_PAR_AH(a) SCALEADDBITS(11, 25000000.0, a - 0.00118, a) /* DF+038 (new RTCM) */
|
|---|
| 556 | #define E_HYDROSTATIC_MAPPING_FUNCTION_PAR_BH(a) SCALEADDBITS( 9, 5000000.0, a - 0.00298, a) /* DF+039 (new RTCM) */
|
|---|
| 557 | #define E_HYDROSTATIC_MAPPING_FUNCTION_PAR_CH(a) SCALEADDBITS( 9, 20000.0, a - 0.0682, a) /* DF+040 (new RTCM) */
|
|---|
| 558 | #define E_WET_MAPPING_FUNCTION_PAR_AW(a) SCALEADDBITS(13, 1000000.0, a - 0.000104, a) /* DF+041 (new RTCM) */
|
|---|
| 559 | #define E_WET_MAPPING_FUNCTION_PAR_BW(a) SCALEADDBITS( 6, 250000.0, a - 0.0015, a) /* DF+042 (new RTCM) */
|
|---|
| 560 | #define E_WET_MAPPING_FUNCTION_PAR_CW(a) SCALEADDBITS( 5, 2000.0, a - 0.0048, a) /* DF+043 (new RTCM) */
|
|---|
| 561 | #define E_HYDROSTATIC_OFFSET(a) SCALEADDBITS(13, 10000.0, a - 2.3, a) /* DF+044 (new RTCM) [m] -2.3 m => [0.1 mm] */
|
|---|
| 562 | #define E_HYDROSTATIC_GRADIENT_LATITUDE_DIRECTION(a) SCALEADDBITS(15, 100000.0, a) /* DF+045 (new RTCM) [m] => [0.01 mm] */
|
|---|
| 563 | #define E_HYDROSTATIC_GRADIENT_LONGITUDE_DIRECTION(a) SCALEADDBITS(15, 100000.0, a) /* DF+046 (new RTCM) [m] => [0.01 mm] */
|
|---|
| 564 | #define E_WET_OFFSET(a) SCALEADDBITS(13, 10000.0, a - 0.252) /* DF+047 (new RTCM) [m] - 0.252 m => [0.1 mm] */
|
|---|
| 565 | #define E_WET_GRADIENT_LATITUDE_DIRECTION(a) SCALEADDBITS(15, 100000.0, a) /* DF+048 (new RTCM) */
|
|---|
| 566 | #define E_WET_GRADIENT_LONGITUDE_DIRECTION(a) SCALEADDBITS(15, 100000.0, a) /* DF+049 (new RTCM) */
|
|---|
| 567 | #define E_HYDTOSTATIC_GRID_POINT_RESIDUAL_LENGTH(a) ADDBITS(4, a) /* DF+050 (new RTCM) */
|
|---|
| 568 | #define E_WET_GRID_POINT_RESIDUAL_LENGTH(a) ADDBITS(4. a) /* DF+051 (new RTCM) */
|
|---|
| 569 | #define E_HYDTOSTATIC_GRID_POINT_RESIDUAL(a, nbits) SCALEADDBITS(nbits, 10000.0, a) /* DF+052 (new RTCM) size depends on DF+050 */
|
|---|
| 570 | #define E_WET_GRID_POINT_RESIDUAL(a, nbits) SCALEADDBITS(nbits, 10000.0, a) /* DF+053 (new RTCM) size depends on DF+051 */
|
|---|
| 571 |
|
|---|
| 572 | #define E_SSR_EPOCH_TIME(a) ADDBITS(20, a) /* DF*055 (new RTCM) same definition as in IGS-SSR */
|
|---|
| 573 |
|
|---|
| 574 | /* Ionosphere Messages */
|
|---|
| 575 | #define E_ZENITH_MAPPED_STEC_POLYNOM_COEFF_C00(a) SCALEADDBITS(17, 1000.0, a) /* DF+057 (new RTCM) */
|
|---|
| 576 | #define E_ZENITH_MAPPED_STEC_POLYNOM_COEFF_C01(a) SCALEADDBITS(18, 10000.0, a) /* DF+058 (new RTCM) */
|
|---|
| 577 | #define E_ZENITH_MAPPED_STEC_POLYNOM_COEFF_C10(a) SCALEADDBITS(18, 10000.0, a) /* DF+059 (new RTCM) */
|
|---|
| 578 | #define E_ZENITH_MAPPED_STEC_POLYNOMIAL_GRADIENT_INDICATOR(a) ADDBITS(1, a) /* DF+060 (new RTCM) */
|
|---|
| 579 | #define E_ZENITH_MAPPED_STEC_GRID_POINT_RESIDUAL(a) ADDBITS(5, a) /* DF+061 (new RTCM) size required for DF+062 */
|
|---|
| 580 | #define E_ZENITH_MAPPED_STEC_GRID_POINT_RESIDUAL_CORRECTION(a, nbits) ADDBITS(nbits, a) /* DF+062 (new RTCM) nbits depends on DF+061 */
|
|---|
| 581 |
|
|---|
| 582 | /* Metadata */
|
|---|
| 583 | #define E_NUMBER_OF_SSR_MODEL_CORRECTION_ENTRIES(a) ADDBITS(5, a) /* DF+063 (new RTCM) */
|
|---|
| 584 | #define E_MODEL_CORRECTION_TYPE_INDICATOR(a) ADDBITS(5, a) /* DF+064 (new RTCM) */
|
|---|
| 585 | #define E_MODEL_CORRECTION_APPLICATION_INDICATOR(a) ADDBITS(1, a) /* DF+065 (new RTCM) */
|
|---|
| 586 | #define E_NON_DEFAULT_MODEL_CORRECTION_INDICATOR(a) ADDBITS(1, a) /* DF+066 (new RTCM) */
|
|---|
| 587 | #define E_NON_DEFAULT_MODEL_CORRECTION_IDENTIFIER(a) ADDBITS(3, a) /* DF+067 (new RTCM) */
|
|---|
| 588 | #define E_MODEL_CORRECTION_DATA_IOD_INDICATOR(a) ADDBITS(1, a) /* DF+068 (new RTCM) */
|
|---|
| 589 | #define E_MODEL_CORRECTION_DATA_IOD(a) ADDBITS(6, a) /* DF+069 (new RTCM) */
|
|---|
| 590 | #define E_ADDITIONAL_MODEL_PARAMETER_INDICATOR(a) ADDBITS(1, a) /* DF+070 (new RTCM) */
|
|---|
| 591 | #define E_NUMBER_OF_ADDITIONAL_MODEL_PARAMETER_BITS(a) ADDBITS(8, a) /* DF+071 (new RTCM) */
|
|---|
| 592 | #define E_ADDITIONAL_MODEL_PARAMETER_DATA(a, nbits) ADDBITS(nbits, a) /* DF+072 (new RTCM) nbits from DF+071*/
|
|---|
| 593 |
|
|---|
| 594 | #define E_ZENITH_MAPPED_STEC_GRID_POINT_RESIDUAL_RESOLUTION_SCALE_FACTOR_EXPONENT(a) GETSSRBITS(3, a) /* DF+073 (new RTCM) */
|
|---|
| 595 |
|
|---|
| 596 | #define E_QZSS_SATELLITE_ID(a) ADDBITS(6, a) /* DF+080 (new RTCM) */
|
|---|
| 597 |
|
|---|
| 598 | #define E_GRID_POINT_LATITUDE_MASK(a, nbits) ADDBITS(nbits, a) /* DF+090 (new RTCM) nbits corresponds to DF+031*/
|
|---|
| 599 | #define E_GRID_POINT_LONGIITUDE_MASK(a, nbits) ADDBITS(nbits, a) /* DF+091 (new RTCM) nbits corresponds to DF+032*/
|
|---|
| 600 | #define E_EXCLUDED_GRID_POINT_MASK(a, nbits) ADDBITS(nbits, a) /* DF+092 (new RTCM) nbits corresponds to DF+090 * DF091 */
|
|---|
| 601 |
|
|---|
| 602 | #define E_GRID_POINT_OFFSET(a) ADDBITS(12, a) /* DF+094 (new RTCM) */
|
|---|
| 603 |
|
|---|
| 604 | #define E_PLYNOMIAL_MODEL_INDICATOR(a) ADDBITS(1, a) /* DF+096 (new RTCM) */
|
|---|
| 605 | #define E_GNSS_IDENTIFIER(a) ADDBITS(4, a) /* DF+097 (new RTCM) */
|
|---|
| 606 | #define E_GNSS_BE_IDENTYFIER(a) ADDBITS(4, a) /* DF+098 (new RTCM) */
|
|---|
| 607 | #define E_RESIDUAL_MODEL_IDENTUICATOR(a) ADDBITS(1, a) /* DF+099 (new RTCM) */
|
|---|
| 608 | #define E_NUMBER_OF_GRID_POINTS(a) ADDBITS(1, a) /* DF+100 (new RTCM) */
|
|---|
| 609 |
|
|---|
| 610 |
|
|---|
| 611 | static double URAToValue(int ura) {
|
|---|
| 612 | int urac, urav;
|
|---|
| 613 | urac = ura >> 3;
|
|---|
| 614 | urav = ura & 7;
|
|---|
| 615 | if (!ura)
|
|---|
| 616 | return 0;
|
|---|
| 617 | else if (ura == 63)
|
|---|
| 618 | return SSR_MAXURA;
|
|---|
| 619 | return (pow(3, urac) * (1.0 + urav / 4.0) - 1.0) / 1000.0;
|
|---|
| 620 | }
|
|---|
| 621 |
|
|---|
| 622 | static int ValueToURA(double val) {
|
|---|
| 623 | int ura;
|
|---|
| 624 | if (!val)
|
|---|
| 625 | return 0;
|
|---|
| 626 | else if (val > 5.4665)
|
|---|
| 627 | return 63;
|
|---|
| 628 | for (ura = 1; ura < 63 && val > URAToValue(ura); ++ura)
|
|---|
| 629 | ;
|
|---|
| 630 | return ura;
|
|---|
| 631 | }
|
|---|
| 632 |
|
|---|
| 633 | #define DECODESTART \
|
|---|
| 634 | int numbits=0; \
|
|---|
| 635 | uint64_t bitbuffer=0;
|
|---|
| 636 |
|
|---|
| 637 | #define LOADSSRBITS(a) { \
|
|---|
| 638 | while((a) > numbits) { \
|
|---|
| 639 | if(!size--) return GCOBR_SHORTMESSAGE; \
|
|---|
| 640 | bitbuffer = (bitbuffer<<8)|((unsigned char)*(buffer++)); \
|
|---|
| 641 | numbits += 8; \
|
|---|
| 642 | } \
|
|---|
| 643 | }
|
|---|
| 644 |
|
|---|
| 645 | /* extract bits from data stream
|
|---|
| 646 | b = variable to store result, a = number of bits */
|
|---|
| 647 | #define GETSSRBITS(b, a) { \
|
|---|
| 648 | LOADSSRBITS(a) \
|
|---|
| 649 | b = (bitbuffer<<(64-numbits))>>(64-(a)); \
|
|---|
| 650 | numbits -= (a); \
|
|---|
| 651 | }
|
|---|
| 652 |
|
|---|
| 653 | /* extract bits from data stream
|
|---|
| 654 | b = variable to store result, a = number of bits */
|
|---|
| 655 | #define GETSSRBITSSIGN(b, a) { \
|
|---|
| 656 | LOADBITS(a) \
|
|---|
| 657 | b = ((int64_t)(bitfield<<(64-numbits)))>>(64-(a)); \
|
|---|
| 658 | numbits -= (a); \
|
|---|
| 659 | }
|
|---|
| 660 |
|
|---|
| 661 | /* extract bits from data stream
|
|---|
| 662 | b = variable to store result, a = number of bits */
|
|---|
| 663 | #define GETSSRBITSFACTOR(b, a, c) { \
|
|---|
| 664 | LOADSSRBITS(a) \
|
|---|
| 665 | b = ((bitbuffer<<(64-numbits))>>(64-(a)))*(c); \
|
|---|
| 666 | numbits -= (a); \
|
|---|
| 667 | }
|
|---|
| 668 |
|
|---|
| 669 | /* extract signed floating value from data stream
|
|---|
| 670 | b = variable to store result, a = number of bits */
|
|---|
| 671 | #define GETSSRFLOATSIGN(b, a, c) { \
|
|---|
| 672 | LOADSSRBITS(a) \
|
|---|
| 673 | b = ((double)(((int64_t)(bitbuffer<<(64-numbits)))>>(64-(a))))*(c); \
|
|---|
| 674 | numbits -= (a); \
|
|---|
| 675 | }
|
|---|
| 676 |
|
|---|
| 677 | /* extract floating value from data stream
|
|---|
| 678 | b = variable to store result, a = number of bits, c = scale factor */
|
|---|
| 679 | #define GETSSRFLOAT(b, a, c) { \
|
|---|
| 680 | LOADSSRBITS(a) \
|
|---|
| 681 | b = ((double)((bitbuffer<<(sizeof(bitbuffer)*8-numbits))>>(sizeof(bitbuffer)*8-(a))))*(c); \
|
|---|
| 682 | numbits -= (a); \
|
|---|
| 683 | }
|
|---|
| 684 |
|
|---|
| 685 | #define SKIPSSRBITS(b) { LOADSSRBITS(b) numbits -= (b); }
|
|---|
| 686 |
|
|---|
| 687 | /* GPS macros also used for other systems when matching! */
|
|---|
| 688 |
|
|---|
| 689 | #define D_HEADER(a) GETSSRBITS(a, 8)
|
|---|
| 690 | #define D_RESERVEDH(a) GETSSRBITS(a, 6)
|
|---|
| 691 | #define D_SIZE(a) GETSSRBITS(a, 10)
|
|---|
| 692 |
|
|---|
| 693 | /* GNSS macros - Header part */
|
|---|
| 694 | #define D_RTCM_MESSAGE_NUMBER(a) GETSSRBITS(a, 12) /* DF002 */
|
|---|
| 695 | #define D_IGS_MESSAGE_NUMBER(a) GETSSRBITS(a, 8) /* IDF002 */
|
|---|
| 696 | #define D_IGS_SSR_VERSION(a) GETSSRBITS(a, 3) /* IDF001 */
|
|---|
| 697 |
|
|---|
| 698 | #define D_GPS_EPOCH_TIME(a) GETSSRBITS(a, 20) /* IDF003 DF385 DF458 DF460 DF465*/
|
|---|
| 699 | #define D_GLONASS_EPOCH_TIME(a) GETSSRBITS(a, 17) /* DF386 */
|
|---|
| 700 | #define D_GPS_EPOCH_TIME_CHECK(a, b) {unsigned int temp; GETSSRBITS(temp, 20) if(b && a != temp) return GCOBR_TIMEMISMATCH; a = temp;}
|
|---|
| 701 | #define D_GLONASS_EPOCH_TIME_CHECK(a, b) {unsigned int temp; GETSSRBITS(temp, 17) if(b && a != temp) return GCOBR_TIMEMISMATCH; a = temp;}
|
|---|
| 702 |
|
|---|
| 703 | #define D_SSR_UPDATE_INTERVAL(a) GETSSRBITS(a, 4) /* DF391, IDF004 */
|
|---|
| 704 | #define D_MULTIPLE_MESSAGE_INDICATOR(a) GETSSRBITS(a, 1) /* DF388, IDF005 */
|
|---|
| 705 | #define D_SSR_IOD(a) GETSSRBITS(a, 4) /* DF413, IDF007 */
|
|---|
| 706 | #define D_SSR_PROVIDER_ID(a) GETSSRBITS(a, 16) /* DF414, IDF008 */
|
|---|
| 707 | #define D_SSR_SOLUTION_ID(a) GETSSRBITS(a, 4) /* DF415, IDF009 */
|
|---|
| 708 | #define D_SATELLITE_REFERENCE_DATUM(a) GETSSRBITS(a, 1) /* DF375, IDF006 */
|
|---|
| 709 | #define D_NO_OF_SATELLITES(a) GETSSRBITS(a, 6) /* DF387, IDF010 */
|
|---|
| 710 |
|
|---|
| 711 | /* GNSS macros - Satellite specific part */
|
|---|
| 712 | #define D_GPS_SATELLITE_ID(a) GETSSRBITS(a, 6) /* IDF011 DF068 DF488 */
|
|---|
| 713 | #define D_GLONASS_SATELLITE_ID_OLD(a) GETSSRBITS(a, 5) /* DF384 (old RTCM)*/
|
|---|
| 714 | #define D_QZSS_SATELLITE_ID_OLD(a) GETSSRBITS(a, 4) /* DF249 */
|
|---|
| 715 |
|
|---|
| 716 | #define D_GPS_IODE(a) GETSSRBITS(a, 8) /* DF071, DF467, IDF012 */
|
|---|
| 717 | #define D_GLONASS_IOD(a) GETSSRBITS(a, 8) /* DF392 */
|
|---|
| 718 | #define D_GALILEO_IOD(a) GETSSRBITS(a, 10) /* DF459 */
|
|---|
| 719 |
|
|---|
| 720 | #define D_SBAS_T0MOD(a) GETSSRBITSFACTOR(a, 9, 16) /* DF468 */
|
|---|
| 721 | #define D_SBAS_IODCRC(a) GETSSRBITS(a, 24) /* DF469 */
|
|---|
| 722 | #define D_BDS_TOEMOD(a) GETSSRBITSFACTOR(a, 10, 8) /* DF470 */
|
|---|
| 723 |
|
|---|
| 724 | /* Orbit Corrections */
|
|---|
| 725 | #define D_DELTA_RADIAL(a) GETSSRFLOATSIGN(a, 22, 1/10000.0) /* DF365, IDF013 */
|
|---|
| 726 | #define D_DELTA_ALONG_TRACK(a) GETSSRFLOATSIGN(a, 20, 1/2500.0) /* DF366, IDF014 */
|
|---|
| 727 | #define D_DELTA_CROSS_TRACK(a) GETSSRFLOATSIGN(a, 20, 1/2500.0) /* DF367, IDF015 */
|
|---|
| 728 | #define D_DOT_DELTA_RADIAL(a) GETSSRFLOATSIGN(a, 21, 1/1000000.0) /* DF368, IDF016 */
|
|---|
| 729 | #define D_DOT_DELTA_ALONG_TRACK(a) GETSSRFLOATSIGN(a, 19, 1/250000.0) /* DF369, IDF017 */
|
|---|
| 730 | #define D_DOT_DELTA_CROSS_TRACK(a) GETSSRFLOATSIGN(a, 19, 1/250000.0) /* DF370, IDF018 */
|
|---|
| 731 |
|
|---|
| 732 | /* Clock Corrections */
|
|---|
| 733 | #define D_DELTA_CLOCK_C0(a) GETSSRFLOATSIGN(a, 22, 1/10000.0) /* DF376, IDF019 */
|
|---|
| 734 | #define D_DELTA_CLOCK_C1(a) GETSSRFLOATSIGN(a, 21, 1/1000000.0) /* DF377, IDF020 */
|
|---|
| 735 | #define D_DELTA_CLOCK_C2(a) GETSSRFLOATSIGN(a, 27, 1/50000000.0) /* DF378, IDF021 */
|
|---|
| 736 | #define D_HR_CLOCK_CORRECTION(a) GETSSRFLOATSIGN(a, 22, 1/10000.0) /* DF390, IDF022 */
|
|---|
| 737 |
|
|---|
| 738 | /* Biases */
|
|---|
| 739 | #define D_NO_OF_BIASES(a) GETSSRBITS(a, 5) /* DF479 DF379 IDF023 */
|
|---|
| 740 | #define D_GNSS_SIGNAL_IDENTIFIER(a) GETSSRBITS(a, 5) /* DF460 IDF024 */
|
|---|
| 741 | #define D_CODE_BIAS(a) GETSSRFLOATSIGN(a, 14, 1/100.0) /* DF383, IDF025 */
|
|---|
| 742 | #define D_YAW_ANGLE(a) GETSSRFLOAT (a, 9, MPI/256.0) /* DF480, IDF026 */
|
|---|
| 743 | #define D_YAW_RATE(a) GETSSRFLOATSIGN(a, 8, MPI/8192.0) /* DF481, IDF027 */
|
|---|
| 744 | #define D_PHASE_BIAS_CORRECTION(a) GETSSRFLOATSIGN(a, 20, 1/10000.) /* DF482, IDF028 */
|
|---|
| 745 |
|
|---|
| 746 | /* Phase specific part of GNSS phase bias message */
|
|---|
| 747 | #define D_INTEGER_INDICATOR(a) GETSSRBITS(a, 1) /* DF483, IDF029 */
|
|---|
| 748 | #define D_WIDE_LANE_INDICATOR(a) GETSSRBITS(a, 2) /* DF484, IDF030 */
|
|---|
| 749 | #define D_DISCONTINUITY_COUNTER(a) GETSSRBITS(a, 4) /* DF485, IDF031 */
|
|---|
| 750 | #define D_DISPERSIVE_BIAS_INDICATOR(a) GETSSRBITS(a, 1) /* DF486 (old RTCM), IDF032 */
|
|---|
| 751 | #define D_YAW_INFO_INDICATOR(a) GETSSRBITS(a, 1) /* DF486 (new RTCM) */
|
|---|
| 752 | #define D_MW_CONSISTENCY_INDICATOR(a) GETSSRBITS(a, 1) /* DF487, IDF033 */
|
|---|
| 753 |
|
|---|
| 754 | #define D_EXTENDED_PHASE_BIAS_ID(a) GETSSRBITS(a, 4) /* DF+002 (new RTCM)*/
|
|---|
| 755 |
|
|---|
| 756 | #define D_GLONASS_SATELLITE_ID(a) GETSSRBITS(a, 6) /* DF+003 (new RTCM)*/
|
|---|
| 757 |
|
|---|
| 758 | /* URA */
|
|---|
| 759 | #define D_SSR_URA(a) {int temp; GETSSRBITS(temp, 6) a = URAToValue(temp);} /* DF389, IDF034 */
|
|---|
| 760 |
|
|---|
| 761 | /* Ionosphere */
|
|---|
| 762 | #define D_NO_IONO_LAYERS(a) {unsigned int temp; GETSSRBITS(temp, 2) a = temp+1;} /* DF472, IDF035 */
|
|---|
| 763 | #define D_IONO_HEIGHT(a) GETSSRFLOAT(a, 8, 10000.0) /* DF473, IDF036 */
|
|---|
| 764 | #define D_IONO_DEGREE(a) {unsigned int temp; GETSSRBITS(temp, 4) a = temp+1;} /* DF474, IDF037 */
|
|---|
| 765 | #define D_IONO_ORDER(a) {unsigned int temp; GETSSRBITS(temp, 4) a = temp+1;} /* DF475, IDF038 */
|
|---|
| 766 | #define D_IONO_COEFF_C(a) GETSSRFLOATSIGN(a, 16, 1/200.0) /* DF476, IDF039 */
|
|---|
| 767 | #define D_IONO_COEFF_S(a) GETSSRFLOATSIGN(a, 16, 1/200.0) /* DF477, IDF040 */
|
|---|
| 768 | #define D_VTEC_QUALITY_INDICATOR(a) GETSSRFLOAT(a, 9, 1/20.0) /* DF478, IDF041 */
|
|---|
| 769 |
|
|---|
| 770 | /* Antenna Information*/
|
|---|
| 771 | #define D_SATELLITE_ANTENNA_IOD(a) GETSSRBITS(a, 6) /* DF+010 (new RTCM) */
|
|---|
| 772 | #define D_PHASE_CENTER_INFO_INDICATORD(a) GETSSRBITS(a, 1) /* DF+011 (new RTCM) */
|
|---|
| 773 | #define D_GROUP_DELAY_INFO_INDICATOR(a) GETSSRBITS(a, 1) /* DF+012 (new RTCM) */
|
|---|
| 774 | #define D_NADIR_ANGLE_DEPENDENT_CORR_INDICATOR(a) GETSSRBITS(a, 1) /* DF+013 (new RTCM) */
|
|---|
| 775 | #define D_NADIR_ANGLE_DEPENDENT_CORR_RANGE_EXTENSION(a) GETSSRBITS(a, 4) /* DF+015 (new RTCM) required to extend DF+021*/
|
|---|
| 776 | #define D_SATELLITE_SET_INDICATOR(a) GETSSRBITS(a, 1) /* DF+016 (new RTCM) */
|
|---|
| 777 | #define D_FREQUENCY_SET_INDICATOR (a) GETSSRBITS(a, 1) /* DF+017 (new RTCM) */
|
|---|
| 778 | #define D_GNSS_FREQUENCY_MASK (a) GETSSRBITS(a, 6) /* DF+018 (new RTCM) */
|
|---|
| 779 | #define D_NADIR_CORR_INDICATOR(a) GETSSRBITS(a, 1) /* DF+019 (new RTCM) */
|
|---|
| 780 | #define D_NADIR_CORRECTION(a) GETSSRFLOATSIGN(a, 12, 1/1000.0) /* DF+020 (new RTCM) in [m] */
|
|---|
| 781 | #define D_NADIR_ANGLE_DEPENDENT_CORRECTION(a, nbits) GETSSRFLOATSIGN(a, 3 + nbits, 1/1000.0) /* DF+021 (new RTCM) in [m]; can be extended up to 15/18 Bits from DF+015*/
|
|---|
| 782 | /*
|
|---|
| 783 | //Decoding
|
|---|
| 784 | #define D_NEW_PAR(a, nbits) GETSSRBITS(a, nbits) //called as D_NEW_PAR(co->NewPar, co->NewParNumBits)
|
|---|
| 785 | #define D_NEW_PAR_SCALE(a, nbits) GETSSRFLOAT(a, nbits, 10000.0) //called as D_NEW_PAR(co->NewPar, co->NewParNumBits)
|
|---|
| 786 | */
|
|---|
| 787 | /* Grid Messages */
|
|---|
| 788 | #define D_GRID_ID(a) GETSSRBITS(a, 10) /* DF+022 (new RTCM) */
|
|---|
| 789 | #define D_GRID_TYPE(a) GETSSRBITS(a, 3) /* DF+023 (new RTCM) */
|
|---|
| 790 | #define D_LATITUDE_OF_REFERENCE_POINT(a) GETSSRFLOATSIGN(a, 18, 1/1000.0) /* DF+024 (new RTCM) */
|
|---|
| 791 | #define D_LONGITUDE_OF_REFERENCE_POINT(a) GETSSRFLOATSIGN(a, 19, 1/1000.0) /* DF+025 (new RTCM) */
|
|---|
| 792 | #define D_ELLIPSOIDAL_HEIGHT_OF_REFERENCE_POINT(a) {unsigned int temp; GETSSRFLOAT(temp, 10, 12.5) a = temp - 1000.0;} /* DF+026 (new RTCM) */
|
|---|
| 793 | #define D_NUMNBER_OF_RELATIVE_POINTS(a) GETSSRBITS(a, 8) /* DF+027 (new RTCM) */
|
|---|
| 794 | #define D_RELATIVE_LATITUDE(a) GETSSRFLOATSIGN(a, 13, 1/1000.0) /* DF+028 (new RTCM) */
|
|---|
| 795 | #define D_RELATIVE_LONGITUDE(a) GETSSRFLOATSIGN(a, 14, 1/1000.0) /* DF+029 (new RTCM) */
|
|---|
| 796 | #define D_RELATIVE_HIGHT(a) GETSSRFLOATSIGN(a, 9, 12.5) /* DF+030 (new RTCM) */
|
|---|
| 797 | #define D_NUMBER_OF_POINTS_IN_LATITIDE_DIRECTION(a) GETSSRBITS(a, 6) /* DF+031 (new RTCM) */
|
|---|
| 798 | #define D_NUMBER_OF_POINTS_IN_LONGITUDE_DIRECTION(a) GETSSRBITS(a, 6) /* DF+032 (new RTCM) */
|
|---|
| 799 | #define D_GRID_STEP_SIZE_IN_LATITIDE_DIRECTION(a) GETSSRFLOAT(a, 9, 1/100.0) /* DF+033 (new RTCM) */
|
|---|
| 800 | #define D_GRID_STEP_SIZE_IN_LONGITUDE_DIRECTION(a) GETSSRFLOAT(a, 10, 1/100.0) /* DF+034 (new RTCM) */
|
|---|
| 801 | #define D_GRID_MASK_AVAILABILITY_FLAG(a) GETSSRBITS(a, 1) /* DF+035 (new RTCM) */
|
|---|
| 802 | #define D_GRID_MASK(a, nbits) GETSSRBITS(a, nbits) /* DF+036 (new RTCM) nbits from DF+031 or DF+032 */
|
|---|
| 803 |
|
|---|
| 804 | /* Troposphere Messages */
|
|---|
| 805 | #define D_HYDROSTATIC_MAPPING_FUNCTION_PAR_AH(a) {unsigned int dah; GETSSRFLOATSIGN(dah, 11, 2.5/10000000.0) a = dah + 0.00118;} /* DF+038 (new RTCM) */
|
|---|
| 806 | #define D_HYDROSTATIC_MAPPING_FUNCTION_PAR_BH(a) {unsigned int dbh; GETSSRFLOATSIGN(dbh, 9, 5/1000000.0) a = dbh + 0.00298;} /* DF+039 (new RTCM) */
|
|---|
| 807 | #define D_HYDROSTATIC_MAPPING_FUNCTION_PAR_CH(a) {unsigned int dch; GETSSRFLOATSIGN(dch, 9, 2/10000.0) a = dch + 0.0682;} /* DF+040 (new RTCM) */
|
|---|
| 808 | #define D_WET_MAPPING_FUNCTION_PAR_AW(a) {unsigned int daw; GETSSRFLOATSIGN(daw, 13, 1/1000000.0) a = daw + 0.000104;} /* DF+041 (new RTCM) */
|
|---|
| 809 | #define D_WET_MAPPING_FUNCTION_PAR_BW(a) {unsigned int dbw; GETSSRFLOATSIGN(dbw, 6, 2.5/100000.0) a = dbw + 0.0015;} /* DF+042 (new RTCM) */
|
|---|
| 810 | #define D_WET_MAPPING_FUNCTION_PAR_CW(a) {unsigned int dcw; GETSSRFLOATSIGN(dcw, 5, 2/1000.0 ) a = dcw + 0.0048;} /* DF+043 (new RTCM) */
|
|---|
| 811 | #define D_HYDROSTATIC_OFFSET(a) {unsigned int dho; GETSSRFLOATSIGN(dho, 13, 1/10000.0) a = dho + 2.3 } /* DF+044 (new RTCM) [0.1 mm] => [m] +2.3 m */
|
|---|
| 812 | #define D_HYDROSTATIC_GRADIENT_LATITUDE_DIRECTION(a) GETSSRFLOATSIGN(a, 15, 1/100000.0) /* DF+045 (new RTCM) [0.01 mm] => [m]*/
|
|---|
| 813 | #define D_HYDROSTATIC_GRADIENT_LONGITUDE_DIRECTION(a) GETSSRFLOATSIGN(a, 15, 1/100000.0) /* DF+046 (new RTCM) [0.01 mm] => [m]*/
|
|---|
| 814 | #define D_WET_OFFSET(a) {unsigned int dwo; GETSSRFLOATSIGN(dwo, 13, 1/10000.0) a = dwo + 0.252 }/* DF+047 (new RTCM) [0.1 mm] => [m] +0.252 m */
|
|---|
| 815 | #define D_WET_GRADIENT_LATITUDE_DIRECTION(a) GETSSRFLOATSIGN(a, 15, 1/100000.0) /* DF+048 (new RTCM) */
|
|---|
| 816 | #define D_WET_GRADIENT_LONGITUDE_DIRECTION(a) GETSSRFLOATSIGN(a, 15, 1/100000.0) /* DF+049 (new RTCM) */
|
|---|
| 817 | #define D_HYDTOSTATIC_GRID_POINT_RESIDUAL_LENGTH(a) GETSSRBITS(a, 4) /* DF+050 (new RTCM) */
|
|---|
| 818 | #define D_WET_GRID_POINT_RESIDUAL_LENGTH(a) GETSSRBITS(a, 4) /* DF+051 (new RTCM) */
|
|---|
| 819 | #define D_HYDTOSTATIC_GRID_POINT_RESIDUAL(a, nbits) GETSSRFLOATSIGN(a, nbits, 1/10000.0) /* DF+052 (new RTCM) size depends on DF+050 */
|
|---|
| 820 | #define D_WET_GRID_POINT_RESIDUAL(a, nbits) GETSSRFLOATSIGN(a, nbits, 1/10000.0) /* DF+053 (new RTCM) size depends on DF+051 */
|
|---|
| 821 |
|
|---|
| 822 | #define D_SSR_EPOCH_TIME(a) GETSSRBITS(a, 20) /* DF*055 (new RTCM) same definition as in IGS-SSR */
|
|---|
| 823 |
|
|---|
| 824 | /* Ionosphere Messages */
|
|---|
| 825 | #define D_ZENITH_MAPPED_STEC_POLYNOM_COEFF_C00(a) GETSSRFLOATSIGN(a, 17, 1/1000.0) /* DF+057 (new RTCM) */
|
|---|
| 826 | #define D_ZENITH_MAPPED_STEC_POLYNOM_COEFF_C01(a) GETSSRFLOATSIGN(a, 18, 1/10000.0) /* DF+058 (new RTCM) */
|
|---|
| 827 | #define D_ZENITH_MAPPED_STEC_POLYNOM_COEFF_C10(a) GETSSRFLOATSIGN(a, 18, 1/10000.0) /* DF+059 (new RTCM) */
|
|---|
| 828 | #define D_ZENITH_MAPPED_STEC_POLYNOMIAL_GRADIENT_INDICATOR(a) GETSSRBITS(a, 1) /* DF+060 (new RTCM) */
|
|---|
| 829 | #define D_ZENITH_MAPPED_STEC_GRID_POINT_RESIDUAL(a) GETSSRBITS(a, 5) /* DF+061 (new RTCM) size required for DF+062 */
|
|---|
| 830 | #define D_ZENITH_MAPPED_STEC_GRID_POINT_RESIDUAL_CORRECTION(a, nbits) GETSSRBITSSIGN(a, nbits) /* DF+062 (new RTCM) nbits depends on DF+061 */
|
|---|
| 831 |
|
|---|
| 832 | /* Metadata */
|
|---|
| 833 | #define D_NUMBER_OF_SSR_MODEL_CORRECTION_ENTRIES(a) GETSSRBITS(a, 5) /* DF+063 (new RTCM) */
|
|---|
| 834 | #define D_MODEL_CORRECTION_TYPE_INDICATOR(a) GETSSRBITS(a, 5) /* DF+064 (new RTCM) */
|
|---|
| 835 | #define D_MODEL_CORRECTION_APPLICATION_INDICATOR(a) GETSSRBITS(a, 1) /* DF+065 (new RTCM) */
|
|---|
| 836 | #define D_NON_DEFAULT_MODEL_CORRECTION_INDICATOR(a) GETSSRBITS(a, 1) /* DF+066 (new RTCM) */
|
|---|
| 837 | #define D_NON_DEFAULT_MODEL_CORRECTION_IDENTIFIER(a) GETSSRBITS(a, 3) /* DF+067 (new RTCM) */
|
|---|
| 838 | #define D_MODEL_CORRECTION_DATA_IOD_INDICATOR(a) GETSSRBITS(a, 1) /* DF+068 (new RTCM) */
|
|---|
| 839 | #define D_MODEL_CORRECTION_DATA_IOD(a) GETSSRBITS(a, 6) /* DF+069 (new RTCM) */
|
|---|
| 840 | #define D_ADDITIONAL_MODEL_PARAMETER_INDICATOR(a) GETSSRBITS(a, 1) /* DF+070 (new RTCM) */
|
|---|
| 841 | #define D_NUMBER_OF_ADDITIONAL_MODEL_PARAMETER_BITS(a) GETSSRBITS(a, 8) /* DF+071 (new RTCM) */
|
|---|
| 842 | #define D_ADDITIONAL_MODEL_PARAMETER_DATA(a, nbits) GETSSRBITS(a, nbits) /* DF+072 (new RTCM) nbits from DF+071*/
|
|---|
| 843 |
|
|---|
| 844 | #define D_ZENITH_MAPPED_STEC_GRID_POINT_RESIDUAL_RESOLUTION_SCALE_FACTOR_EXPONENT(a) GETSSRBITS(a, 3) /* DF+073 (new RTCM) */
|
|---|
| 845 |
|
|---|
| 846 | #define D_QZSS_SATELLITE_ID(a) GETSSRBITS(a, 6) /* DF+080 (new RTCM) */
|
|---|
| 847 |
|
|---|
| 848 | #define D_GRID_POINT_LATITUDE_MASK(a, nbits) GETSSRBITS(a, nbits) /* DF+090 (new RTCM) nbits corresponds to DF+031*/
|
|---|
| 849 | #define D_GRID_POINT_LONGIITUDE_MASK(a, nbits) GETSSRBITS(a, nbits) /* DF+091 (new RTCM) nbits corresponds to DF+032*/
|
|---|
| 850 | #define D_EXCLUDED_GRID_POINT_MASK(a, nbits) GETSSRBITS(a, nbits) /* DF+092 (new RTCM) nbits corresponds to DF+090 * DF091 */
|
|---|
| 851 |
|
|---|
| 852 | #define D_GRID_POINT_OFFSET(a) GETSSRBITS(a, 12) /* DF+094 (new RTCM) */
|
|---|
| 853 |
|
|---|
| 854 | #define D_PLYNOMIAL_MODEL_INDICATOR(a) GETSSRBITS(a, 1) /* DF+096 (new RTCM) */
|
|---|
| 855 | #define D_GNSS_IDENTIFIER(a) GETSSRBITS(a, 4) /* DF+097 (new RTCM) */
|
|---|
| 856 | #define D_GNSS_BE_IDENTYFIER(a) GETSSRBITS(a, 4) /* DF+098 (new RTCM) */
|
|---|
| 857 | #define D_RESIDUAL_MODEL_IDENTUICATOR(a) GETSSRBITS(a, 1) /* DF+099 (new RTCM) */
|
|---|
| 858 | #define D_NUMBER_OF_GRID_POINTS(a) GETSSRBITS(a, 1) /* DF+100 (new RTCM) */
|
|---|
| 859 |
|
|---|
| 860 | };
|
|---|
| 861 |
|
|---|
| 862 | #endif /* RTCM3_CLOCK_ORBIT_H */
|
|---|