Changeset 9025 in ntrip for trunk/BNC/src/RTCM3/clock_and_orbit
- Timestamp:
- Aug 25, 2020, 11:02:49 PM (5 years ago)
- Location:
- trunk/BNC/src/RTCM3/clock_and_orbit
- Files:
-
- 3 added
- 2 deleted
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_igs.h
r8984 r9025 4 4 /* Programheader 5 5 6 7 8 9 10 11 */ 12 6 Name: clock_orbit_igs.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: IGS 11 */ 12 #include <QDebug> 13 13 #include <string.h> 14 15 enum IGS_NUMBERS { 16 RTCM_MESSAGE_NUMBER_IGS = 4076, 17 IGS_SSR_VERSION = 3 18 }; 19 20 enum SatelliteReferenceDatum { 21 DATUM_ITRF = 0, 22 DATUM_LOCAL = 1 23 }; 24 25 enum COR_BASE { 26 COBBASE_GPS = 21, 27 COBBASE_GLONASS = 41, 28 COBBASE_GALILEO = 61, 29 COBBASE_QZSS = 81, 30 COBBASE_BDS = 101, 31 COBBASE_SBAS = 121, 32 COBBASE_NUM 33 }; 34 35 enum COR_OFFSET { // sub-type message, for example: 36 COBOFS_ORBIT = 0, // GPS: IM21 37 COBOFS_CLOCK, // GPS: IM22 38 COBOFS_COMBINED, // GPS: IM23 39 COBOFS_HR, // GPS: IM24 40 COBOFS_CBIAS, // GPS: IM25 41 COBOFS_PBIAS, // GPS: IM26 42 COBOFS_URA, // GPS: IM27 43 COBOFS_NUM 44 }; 45 46 enum ClockOrbitType { 47 COTYPE_GPSORBIT = COBBASE_GPS + COBOFS_ORBIT, 48 COTYPE_GPSCLOCK, 49 COTYPE_GPSCOMBINED = COBBASE_GPS + COBOFS_COMBINED, 50 COTYPE_GPSHR, 51 COTYPE_GPSURA = COBBASE_GPS + COBOFS_URA, 52 53 COTYPE_GLONASSORBIT = COBBASE_GLONASS + COBOFS_ORBIT, 54 COTYPE_GLONASSCLOCK, 55 COTYPE_GLONASSCOMBINED = COBBASE_GLONASS + COBOFS_COMBINED, 56 COTYPE_GLONASSHR, 57 COTYPE_GLONASSURA = COBBASE_GLONASS + COBOFS_URA, 58 59 COTYPE_GALILEOORBIT = COBBASE_GALILEO + COBOFS_ORBIT, 60 COTYPE_GALILEOCLOCK, 61 COTYPE_GALILEOCOMBINED = COBBASE_GALILEO + COBOFS_COMBINED, 62 COTYPE_GALILEOHR, 63 COTYPE_GALILEOURA = COBBASE_GALILEO + COBOFS_URA, 64 65 COTYPE_QZSSORBIT = COBBASE_QZSS + COBOFS_ORBIT, 66 COTYPE_QZSSCLOCK, 67 COTYPE_QZSSCOMBINED = COBBASE_QZSS + COBOFS_COMBINED, 68 COTYPE_QZSSHR, 69 COTYPE_QZSSURA = COBBASE_QZSS + COBOFS_URA, 70 71 COTYPE_SBASORBIT = COBBASE_SBAS + COBOFS_ORBIT, 72 COTYPE_SBASCLOCK, 73 COTYPE_SBASCOMBINED = COBBASE_SBAS + COBOFS_COMBINED, 74 COTYPE_SBASHR, 75 COTYPE_SBASURA = COBBASE_SBAS + COBOFS_URA, 76 77 COTYPE_BDSORBIT = COBBASE_BDS + COBOFS_ORBIT, 78 COTYPE_BDSCLOCK, 79 COTYPE_BDSCOMBINED = COBBASE_BDS + COBOFS_COMBINED, 80 COTYPE_BDSHR, 81 COTYPE_BDSURA = COBBASE_BDS + COBOFS_URA, 82 83 COTYPE_AUTO = 0, 84 }; 85 86 enum CodeBiasType { 87 CBTYPE_GPS = COBBASE_GPS + COBOFS_CBIAS, 88 CBTYPE_GLONASS = COBBASE_GLONASS + COBOFS_CBIAS, 89 CBTYPE_GALILEO = COBBASE_GALILEO + COBOFS_CBIAS, 90 CBTYPE_QZSS = COBBASE_QZSS + COBOFS_CBIAS, 91 CBTYPE_SBAS = COBBASE_SBAS + COBOFS_CBIAS, 92 CBTYPE_BDS = COBBASE_BDS + COBOFS_CBIAS, 93 CBTYPE_AUTO = 0 94 }; 95 96 enum PhaseBiasType { 97 PBTYPE_GPS = COBBASE_GPS + COBOFS_PBIAS, 98 PBTYPE_GLONASS = COBBASE_GLONASS + COBOFS_PBIAS, 99 PBTYPE_GALILEO = COBBASE_GALILEO + COBOFS_PBIAS, 100 PBTYPE_QZSS = COBBASE_QZSS + COBOFS_PBIAS, 101 PBTYPE_SBAS = COBBASE_SBAS + COBOFS_PBIAS, 102 PBTYPE_BDS = COBBASE_BDS + COBOFS_PBIAS, 103 PBTYPE_AUTO = 0 104 }; 105 106 enum VTECType { 107 VTEC_BASE = 201 108 }; 109 110 /* if some systems aren't supported at all, change the following numbers to zero 111 for these systems to save space */ 112 enum COR_CONSTANTS { 113 CLOCKORBIT_BUFFERSIZE = 8192, 114 CLOCKORBIT_NUMGPS = 32, 115 CLOCKORBIT_NUMGLONASS = 26, 116 CLOCKORBIT_NUMGALILEO = 36, 117 CLOCKORBIT_NUMQZSS = 10, 118 CLOCKORBIT_NUMSBAS = 38, 119 CLOCKORBIT_NUMBDS = 65, 120 CLOCKORBIT_NUMBIAS = 100, 121 CLOCKORBIT_NUMIONOLAYERS = 4, 122 CLOCKORBIT_MAXIONOORDER = 16, 123 CLOCKORBIT_MAXIONODEGREE = 16 124 }; 125 126 enum COR_SATSYSTEM { 127 CLOCKORBIT_SATGPS=0, 128 CLOCKORBIT_SATGLONASS, 129 CLOCKORBIT_SATGALILEO, 130 CLOCKORBIT_SATQZSS, 131 CLOCKORBIT_SATSBAS, 132 CLOCKORBIT_SATBDS, 133 CLOCKORBIT_SATNUM 134 }; 135 136 enum COR_OFFSETS { 137 CLOCKORBIT_OFFSETGPS = 0, 138 CLOCKORBIT_OFFSETGLONASS = CLOCKORBIT_NUMGPS, 139 CLOCKORBIT_OFFSETGALILEO = CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS, 140 CLOCKORBIT_OFFSETQZSS = CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS + CLOCKORBIT_NUMGALILEO, 141 CLOCKORBIT_OFFSETSBAS = CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS + CLOCKORBIT_NUMGALILEO 142 + CLOCKORBIT_NUMQZSS, 143 CLOCKORBIT_OFFSETBDS = CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS + CLOCKORBIT_NUMGALILEO 144 + CLOCKORBIT_NUMQZSS + CLOCKORBIT_NUMSBAS, 145 CLOCKORBIT_COUNTSAT = CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS + CLOCKORBIT_NUMGALILEO 146 + CLOCKORBIT_NUMQZSS + CLOCKORBIT_NUMSBAS + CLOCKORBIT_NUMBDS 147 }; 148 149 enum CodeType { 150 CODETYPEGPS_L1_CA = 0, 151 CODETYPEGPS_L1_P = 1, 152 CODETYPEGPS_L1_Z = 2, 153 CODETYPEGPS_L1C_D = 3, 154 CODETYPEGPS_L1C_P = 4, 155 CODETYPEGPS_L2_CA = 5, 156 CODETYPEGPS_SEMI_CODELESS = 6, 157 CODETYPEGPS_L2C_M = 7, 158 CODETYPEGPS_L2C_L = 8, 159 //RESERVED = 9, 160 CODETYPEGPS_L2_P = 10, 161 CODETYPEGPS_L2_Z = 11, 162 //RESERVED = 12, 163 //RESERVED = 13, 164 CODETYPEGPS_L5_I = 14, 165 CODETYPEGPS_L5_Q = 15, 166 167 CODETYPEGLONASS_L1_CA = 0, 168 CODETYPEGLONASS_L1_P = 1, 169 CODETYPEGLONASS_L2_CA = 2, 170 CODETYPEGLONASS_L2_P = 3, 171 CODETYPEGLONASS_L1a_OCd = 4, 172 CODETYPEGLONASS_L1a_OCp = 5, 173 CODETYPEGLONASS_L2a_CSI = 6, 174 CODETYPEGLONASS_L2a_OCp = 7, 175 CODETYPEGLONASS_L3_I = 8, 176 CODETYPEGLONASS_L3_Q = 9, 177 178 CODETYPEGALILEO_E1_A = 0, 179 CODETYPEGALILEO_E1_B = 1, 180 CODETYPEGALILEO_E1_C = 2, 181 //RESERVED_E1_BC = 3, 182 //RESERVED_E1_ABC = 4, 183 CODETYPEGALILEO_E5A_I = 5, 184 CODETYPEGALILEO_E5A_Q = 6, 185 //RESERVED_E5A_IQ = 7, 186 CODETYPEGALILEO_E5B_I = 8, 187 CODETYPEGALILEO_E5B_Q = 9, 188 //RESERVED_E5B_IQ = 10, 189 //RESERVED_E5_I = 11, 190 //RESERVED_E5_Q = 12, 191 //RESERVED_E5_IQ = 13, 192 CODETYPEGALILEO_E6_A = 14, 193 CODETYPEGALILEO_E6_B = 15, 194 CODETYPEGALILEO_E6_C = 16, 195 //RESERVED_E6_BC = 17, 196 //RESERVED_E6_ABC = 18, 197 198 CODETYPEQZSS_L1_CA = 0, 199 CODETYPEQZSS_L1C_D = 1, 200 CODETYPEQZSS_L1C_P = 2, 201 CODETYPEQZSS_L2C_M = 3, 202 CODETYPEQZSS_L2C_L = 4, 203 //RESEVED_L2C_ML = 5, 204 CODETYPEQZSS_L5_I = 6, 205 CODETYPEQZSS_L5_Q = 7, 206 //RESERVED_L5_IQ = 8, 207 CODETYPEQZSS_L6_D = 9, 208 CODETYPEQZSS_L6_P = 10, 209 //RESERVED_L6_DP = 11, 210 //RESERVED_L1C_DP = 12, 211 //RESERVED_L1_S = 13, 212 //RESERVED_L5_D = 14, 213 //RESERVED_L5_P = 15, 214 //RESERVED_L5_DP = 16, 215 CODETYPEQZSS_L6_E = 17, 216 //RESERVED_L6_DE = 18, 217 218 CODETYPE_SBAS_L1_CA = 0, 219 CODETYPE_SBAS_L5_I = 1, 220 CODETYPE_SBAS_L5_Q = 2, 221 //RESERVED_SBAS_L5_IQ = 3, 222 223 CODETYPE_BDS_B1_I = 0, 224 CODETYPE_BDS_B1_Q = 1, 225 //RESERVED_BDS_B1_IQ = 2, 226 CODETYPE_BDS_B3_I = 3, 227 CODETYPE_BDS_B3_Q = 4, 228 //RESERVED_BDS_B3_IQ = 5, 229 CODETYPE_BDS_B2_I = 6, 230 CODETYPE_BDS_B2_Q = 7, 231 //RESERVED_BDS_B2_IQ = 8, 232 CODETYPE_BDS_B1a_D = 9, 233 CODETYPE_BDS_B1a_P = 10, 234 //RESERVED_BDS_B1a_DP = 11, 235 CODETYPE_BDS_B2a_D = 12, 236 CODETYPE_BDS_B2a_P = 13, 237 //RESEVED_BDS_B2a_DP = 14, 238 CODETYPE_BDS_B1_A = 15, //NEW 1A 239 //RESERVED = 16, 240 //RESERVED = 17, 241 CODETYPE_BDS_B3_A = 18 //NEW 6A 242 }; 243 244 #define SSR_MAXURA 5.5 /* > 5466.5mm in meter */ 245 246 /* satellite system data is stored with offset CLOCKORBIT_OFFSET... 247 in the data structures. So first GLONASS satellite is at 248 xxx->Sat[CLOCKORBIT_OFFSETGLONASS], first GPS satellite is 249 xxx->Sat[CLOCKORBIT_OFFSETGPS]. */ 250 251 struct ClockOrbit { 252 enum ClockOrbitType messageType; 253 unsigned int EpochTime[CLOCKORBIT_SATNUM]; /* 0 .. system specific maximum */ 254 unsigned int NumberOfSat[CLOCKORBIT_SATNUM]; /* 0 .. CLOCKORBIT_NUM... */ 255 unsigned int Supplied[COBOFS_NUM]; /* boolean */ 256 unsigned int SSRIOD; 257 unsigned int SSRProviderID; 258 unsigned int SSRSolutionID; 259 unsigned int UpdateInterval; 260 enum SatelliteReferenceDatum SatRefDatum; 261 struct SatData { 262 unsigned int ID; /* all */ 263 unsigned int IOD; /* all */ 264 unsigned int toe; /* SBAS, BDS */ 265 double UserRangeAccuracy; /* accuracy values in [m] */ 266 double hrclock; 267 struct OrbitPart { 268 double DeltaRadial; /* m */ 269 double DeltaAlongTrack; /* m */ 270 double DeltaCrossTrack; /* m */ 271 double DotDeltaRadial; /* m/s */ 272 double DotDeltaAlongTrack; /* m/s */ 273 double DotDeltaCrossTrack; /* m/s */ 274 } Orbit; 275 struct ClockPart { 276 double DeltaA0; /* m */ 277 double DeltaA1; /* m/s */ 278 double DeltaA2; /* m/ss */ 279 } Clock; 280 } Sat[CLOCKORBIT_COUNTSAT]; 281 }; 282 283 struct CodeBias { 284 enum CodeBiasType messageType; 285 unsigned int EpochTime[CLOCKORBIT_SATNUM]; /* 0 .. system specific maximum */ 286 unsigned int NumberOfSat[CLOCKORBIT_SATNUM]; /* 0 .. CLOCKORBIT_NUM... */ 287 unsigned int UpdateInterval; 288 unsigned int SSRIOD; 289 unsigned int SSRProviderID; 290 unsigned int SSRSolutionID; 291 struct BiasSat { 292 unsigned int ID; /* all */ 293 unsigned int NumberOfCodeBiases; 294 struct CodeBiasEntry { 295 enum CodeType Type; 296 float Bias; /* m */ 297 } Biases[CLOCKORBIT_NUMBIAS]; 298 } Sat[CLOCKORBIT_COUNTSAT]; 299 }; 300 301 struct PhaseBias { 302 enum PhaseBiasType messageType; 303 unsigned int EpochTime[CLOCKORBIT_SATNUM]; /* 0 .. system specific maximum */ 304 unsigned int NumberOfSat[CLOCKORBIT_SATNUM]; /* 0 .. CLOCKORBIT_NUM... */ 305 unsigned int UpdateInterval; 306 unsigned int SSRIOD; 307 unsigned int SSRProviderID; 308 unsigned int SSRSolutionID; 309 unsigned int DispersiveBiasConsistencyIndicator; 310 unsigned int MWConsistencyIndicator; 311 struct PhaseBiasSat { 312 unsigned int ID; /* all */ 313 unsigned int NumberOfPhaseBiases; 314 double YawAngle; /* radiant */ 315 double YawRate; /* radiant/s */ 316 struct PhaseBiasEntry { 317 enum CodeType Type; 318 unsigned int SignalIntegerIndicator; 319 unsigned int SignalsWideLaneIntegerIndicator; 320 unsigned int SignalDiscontinuityCounter; 321 float Bias; /* m */ 322 } Biases[CLOCKORBIT_NUMBIAS]; 323 } Sat[CLOCKORBIT_COUNTSAT]; 324 }; 325 326 struct VTEC { 327 unsigned int EpochTime; /* GPS */ 328 unsigned int UpdateInterval; 329 unsigned int SSRIOD; 330 unsigned int SSRProviderID; 331 unsigned int SSRSolutionID; 332 unsigned int NumLayers; /* 1-4 */ 333 double Quality; 334 struct IonoLayers { 335 double Height; /* m */ 336 unsigned int Degree; /* 1-16 */ 337 unsigned int Order; /* 1-16 */ 338 double Sinus[CLOCKORBIT_MAXIONODEGREE][CLOCKORBIT_MAXIONOORDER]; 339 double Cosinus[CLOCKORBIT_MAXIONODEGREE][CLOCKORBIT_MAXIONOORDER]; 340 } Layers[CLOCKORBIT_NUMIONOLAYERS]; 341 }; 342 343 /* return size of resulting data or 0 in case of an error */ 344 size_t MakeClockOrbit(const struct ClockOrbit *co, enum ClockOrbitType type, 14 #include "clock_orbit.h" 15 16 class SsrCorrIgs: public SsrCorr { 17 //Q_OBJECT 18 19 public: 20 SsrCorrIgs() {qDebug() << "SsrCorrIgs()"; 21 setCorBase(); 22 setCorOffset(); 23 setCoType(); 24 setCbType(); 25 setPbType(); 26 setVtecType(); 27 setCodeType(); 28 29 satoffset << CLOCKORBIT_OFFSETGPS 30 << CLOCKORBIT_OFFSETGLONASS 31 << CLOCKORBIT_OFFSETGALILEO 32 << CLOCKORBIT_OFFSETQZSS 33 << CLOCKORBIT_OFFSETSBAS 34 << CLOCKORBIT_OFFSETBDS 35 << CLOCKORBIT_COUNTSAT; 36 }; 37 38 ~SsrCorrIgs() {}; 39 40 void setCorBase() { 41 COBBASE_GPS = 21; 42 COBBASE_GLONASS = 41; 43 COBBASE_GALILEO = 61; 44 COBBASE_QZSS = 81; 45 COBBASE_BDS = 101; 46 COBBASE_SBAS = 121; 47 COBBASE_NUM = 6; 48 49 corbase << COBBASE_GPS 50 << COBBASE_GLONASS 51 << COBBASE_GALILEO 52 << COBBASE_QZSS 53 << COBBASE_SBAS 54 << COBBASE_BDS; 55 } 56 57 void setCorOffset() { 58 COBOFS_ORBIT = 0; // GPS: IM21 59 COBOFS_CLOCK = 1; // GPS: IM22 60 COBOFS_COMBINED = 2; // GPS: IM23 61 COBOFS_HR = 3; // GPS: IM24 62 COBOFS_CBIAS = 4; // GPS: IM25 63 COBOFS_PBIAS = 5; // GPS: IM26 64 COBOFS_URA = 6; // GPS: IM27 65 COBOFS_NUM = 7; 66 }; 67 68 void setCoType() { 69 COTYPE_GPSORBIT = COBBASE_GPS + COBOFS_ORBIT; 70 COTYPE_GPSCLOCK = COTYPE_GPSORBIT + 1; 71 COTYPE_GPSCOMBINED = COBBASE_GPS + COBOFS_COMBINED; 72 COTYPE_GPSHR = COTYPE_GPSCOMBINED + 1; 73 COTYPE_GPSURA = COBBASE_GPS + COBOFS_URA; 74 75 COTYPE_GLONASSORBIT = COBBASE_GLONASS + COBOFS_ORBIT; 76 COTYPE_GLONASSCLOCK = COTYPE_GLONASSORBIT + 1; 77 COTYPE_GLONASSCOMBINED = COBBASE_GLONASS + COBOFS_COMBINED, 78 COTYPE_GLONASSHR = COTYPE_GLONASSCOMBINED + 1; 79 COTYPE_GLONASSURA = COBBASE_GLONASS + COBOFS_URA, 80 81 COTYPE_GALILEOORBIT = COBBASE_GALILEO + COBOFS_ORBIT; 82 COTYPE_GALILEOCLOCK = COTYPE_GALILEOORBIT + 1; 83 COTYPE_GALILEOCOMBINED = COBBASE_GALILEO + COBOFS_COMBINED, 84 COTYPE_GALILEOHR = COTYPE_GALILEOCOMBINED + 1; 85 COTYPE_GALILEOURA = COBBASE_GALILEO + COBOFS_URA; 86 87 COTYPE_QZSSORBIT = COBBASE_QZSS + COBOFS_ORBIT; 88 COTYPE_QZSSCLOCK = COTYPE_QZSSORBIT + 1; 89 COTYPE_QZSSCOMBINED = COBBASE_QZSS + COBOFS_COMBINED; 90 COTYPE_QZSSHR = COTYPE_QZSSCOMBINED + 1; 91 COTYPE_QZSSURA = COBBASE_QZSS + COBOFS_URA; 92 93 COTYPE_SBASORBIT = COBBASE_SBAS + COBOFS_ORBIT; 94 COTYPE_SBASCLOCK = COTYPE_SBASORBIT + 1; 95 COTYPE_SBASCOMBINED = COBBASE_SBAS + COBOFS_COMBINED; 96 COTYPE_SBASHR = COTYPE_SBASCOMBINED + 1; 97 COTYPE_SBASURA = COBBASE_SBAS + COBOFS_URA; 98 99 COTYPE_BDSORBIT = COBBASE_BDS + COBOFS_ORBIT; 100 COTYPE_BDSCLOCK = COTYPE_BDSORBIT + 1; 101 COTYPE_BDSCOMBINED = COBBASE_BDS + COBOFS_COMBINED; 102 COTYPE_BDSHR = COTYPE_BDSCOMBINED + 1; 103 COTYPE_BDSURA = COBBASE_BDS + COBOFS_URA; 104 105 COTYPE_AUTO = 0; 106 }; 107 108 void setCbType() { 109 CBTYPE_GPS = COBBASE_GPS + COBOFS_CBIAS; 110 CBTYPE_GLONASS = COBBASE_GLONASS + COBOFS_CBIAS; 111 CBTYPE_GALILEO = COBBASE_GALILEO + COBOFS_CBIAS; 112 CBTYPE_QZSS = COBBASE_QZSS + COBOFS_CBIAS; 113 CBTYPE_SBAS = COBBASE_SBAS + COBOFS_CBIAS; 114 CBTYPE_BDS = COBBASE_BDS + COBOFS_CBIAS; 115 CBTYPE_AUTO = 0; 116 }; 117 118 void setPbType() { 119 PBTYPE_GPS = COBBASE_GPS + COBOFS_PBIAS; 120 PBTYPE_GLONASS = COBBASE_GLONASS + COBOFS_PBIAS; 121 PBTYPE_GALILEO = COBBASE_GALILEO + COBOFS_PBIAS; 122 PBTYPE_QZSS = COBBASE_QZSS + COBOFS_PBIAS; 123 PBTYPE_SBAS = COBBASE_SBAS + COBOFS_PBIAS; 124 PBTYPE_BDS = COBBASE_BDS + COBOFS_PBIAS; 125 PBTYPE_AUTO = 0; 126 }; 127 128 void setVtecType() { 129 VTEC_BASE = 201; 130 }; 131 132 void setCodeType() { 133 CODETYPE_GPS_L1_CA = 0; 134 CODETYPE_GPS_L1_P = 1; 135 CODETYPE_GPS_L1_Z = 2; 136 CODETYPE_GPS_L1C_D = 3; 137 CODETYPE_GPS_L1C_P = 4; 138 CODETYPE_GPS_L2_CA = 5; 139 CODETYPE_GPS_SEMI_CODELESS = 6; 140 CODETYPE_GPS_L2C_M = 7; 141 CODETYPE_GPS_L2C_L = 8; 142 //RESERVED = 9; 143 CODETYPE_GPS_L2_P = 10; 144 CODETYPE_GPS_L2_Z = 11; 145 //RESERVED = 12; 146 //RESERVED = 13; 147 CODETYPE_GPS_L5_I = 14; 148 CODETYPE_GPS_L5_Q = 15; 149 150 151 152 153 154 CODETYPE_GLONASS_L1_CA = 0; 155 CODETYPE_GLONASS_L1_P = 1; 156 CODETYPE_GLONASS_L2_CA = 2; 157 CODETYPE_GLONASS_L2_P = 3; 158 CODETYPE_GLONASS_L1a_OCd = 4; 159 CODETYPE_GLONASS_L1a_OCp = 5; 160 CODETYPE_GLONASS_L2a_CSI = 6; 161 CODETYPE_GLONASS_L2a_OCp = 7; 162 CODETYPE_GLONASS_L3_I = 8; 163 CODETYPE_GLONASS_L3_Q = 9; 164 165 166 167 168 CODETYPE_GALILEO_E1_A = 0; 169 CODETYPE_GALILEO_E1_B = 1; 170 CODETYPE_GALILEO_E1_C = 2; 171 //RESERVED_E1_BC = 3; 172 //RESERVED_E1_ABC = 4; 173 CODETYPE_GALILEO_E5A_I = 5; 174 CODETYPE_GALILEO_E5A_Q = 6; 175 //RESERVED_E5A_IQ = 7; 176 CODETYPE_GALILEO_E5B_I = 8; 177 CODETYPE_GALILEO_E5B_Q = 9; 178 //RESERVED_E5B_IQ = 10; 179 //RESERVED_E5_I = 11; 180 //RESERVED_E5_Q = 12; 181 //RESERVED_E5_IQ = 13; 182 CODETYPE_GALILEO_E6_A = 14; 183 CODETYPE_GALILEO_E6_B = 15; 184 CODETYPE_GALILEO_E6_C = 16; 185 //RESERVED_E6_BC = 17; 186 //RESERVED_E6_ABC = 18; 187 188 CODETYPE_QZSS_L1_CA = 0; 189 CODETYPE_QZSS_L1C_D = 1; 190 CODETYPE_QZSS_L1C_P = 2; 191 CODETYPE_QZSS_L2C_M = 3; 192 CODETYPE_QZSS_L2C_L = 4; 193 //RESEVED_L2C_ML = 5; 194 CODETYPE_QZSS_L5_I = 6; 195 CODETYPE_QZSS_L5_Q = 7; 196 //RESERVED_L5_IQ = 8; 197 CODETYPE_QZSS_L6_D = 9; 198 CODETYPE_QZSS_L6_P = 10; 199 //RESERVED_L6_DP = 11; 200 //RESERVED_L1C_DP = 12; 201 //RESERVED_L1_S = 13; 202 //RESERVED_L5_D = 14; 203 //RESERVED_L5_P = 15; 204 //RESERVED_L5_DP = 16; 205 CODETYPE_QZSS_L6_E = 17; 206 //RESERVED_L6_DE = 18; 207 208 CODETYPE_SBAS_L1_CA = 0; 209 CODETYPE_SBAS_L5_I = 1; 210 CODETYPE_SBAS_L5_Q = 2; 211 //RESERVED_CODETYPE_SBAS_L5_IQ = 3; 212 213 CODETYPE_BDS_B1_I = 0; 214 CODETYPE_BDS_B1_Q = 1; 215 //RESERVED_CODETYPE_BDS_B1_IQ = 2; 216 CODETYPE_BDS_B3_I = 3; 217 CODETYPE_BDS_B3_Q = 4; 218 //RESERVED_CODETYPE_BDS_B3_IQ = 5; 219 CODETYPE_BDS_B2_I = 6; 220 CODETYPE_BDS_B2_Q = 7; 221 //RESERVED_CODETYPE_BDS_B2_IQ = 8; 222 CODETYPE_BDS_B1a_D = 9; 223 CODETYPE_BDS_B1a_P = 10; 224 //RESERVED_CODETYPE_BDS_B1a_DP = 11; 225 CODETYPE_BDS_B2a_D = 12; 226 CODETYPE_BDS_B2a_P = 13; 227 //RESEVED_CODETYPE_BDS_B2a_DP = 14; 228 CODETYPE_BDS_B1_A = 15; //NEW 1A 229 //RESERVED = 16; 230 //RESERVED = 17; 231 CODETYPE_BDS_B3_A = 18; //NEW 6A 232 }; 233 234 std::string codeTypeToRnxType(char system, CodeType type); 235 SsrCorr::CodeType rnxTypeToCodeType(char system, std::string type); 236 237 size_t MakeClockOrbit(const struct ClockOrbit *co, ClockOrbitType type, 345 238 int moremessagesfollow, char *buffer, size_t size); 346 size_t MakeCodeBias(const struct CodeBias *b, enumCodeBiasType type,239 size_t MakeCodeBias(const struct CodeBias *b, CodeBiasType type, 347 240 int moremessagesfollow, char *buffer, size_t size); 348 size_t MakePhaseBias(const struct PhaseBias *b, enumPhaseBiasType type,241 size_t MakePhaseBias(const struct PhaseBias *b, PhaseBiasType type, 349 242 int moremessagesfollow, char *buffer, size_t size); 350 size_t MakeVTEC(const struct VTEC * b, int moremessagesfollow, char *buffer,243 size_t MakeVTEC(const struct VTEC *v, int moremessagesfollow, char *buffer, 351 244 size_t size); 352 353 enum GCOB_RETURN { 354 /* all well */ 355 GCOBR_MESSAGEFOLLOWS = 1, 356 GCOBR_OK = 0, 357 /* unknown data, a warning */ 358 GCOBR_UNKNOWNTYPE = -1, 359 GCOBR_UNKNOWNDATA = -2, 360 GCOBR_CRCMISMATCH = -3, 361 GCOBR_SHORTMESSAGE = -4, 362 /* failed to do the work */ 363 GCOBR_NOCLOCKORBITPARAMETER = -10, 364 GCOBR_NOCODEBIASPARAMETER = -11, 365 GCOBR_NOPHASEBIASPARAMETER = -12, 366 GCOBR_NOVTECPARAMETER = -13, 367 /* data mismatch - data in storage does not match new data */ 368 GCOBR_TIMEMISMATCH = -20, 369 GCOBR_DATAMISMATCH = -21, 370 /* not enough data - can decode the block completely */ 371 GCOBR_SHORTBUFFER = -30, 372 GCOBR_MESSAGEEXCEEDSBUFFER = -31}; 373 374 /* NOTE: When an error message has been emitted, the output structures may have been modified. Make a copy of the previous variant before calling the 375 function to have a clean state. */ 376 377 /* buffer should point to a RTCM3 block */ 378 enum GCOB_RETURN GetSSR(struct ClockOrbit *co, struct CodeBias *b, struct VTEC *v, 379 struct PhaseBias *pb, const char *buffer, size_t size, int *bytesused); 245 enum GCOB_RETURN GetSSR(struct ClockOrbit *co, struct CodeBias *b, 246 struct VTEC *v, struct PhaseBias *pb, const char *buffer, size_t size, 247 int *bytesused); 248 }; 380 249 381 250 #endif /* RTCM3_CLOCK_ORBIT_IGS_H */ -
trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_rtcm.h
r8982 r9025 4 4 /* Programheader 5 5 6 7 8 9 10 11 */ 6 Name: clock_orbit_rtcm.h 7 Project: RTCM3 8 Version: $Id$ 9 Authors: Dirk Stöcker, Andrea Stürze 10 Description: state space approach: RTCM 11 */ 12 12 13 13 #include <string.h> 14 15 16 17 18 19 20 enum SatelliteReferenceDatum { 21 DATUM_ITRF = 0, 22 DATUM_LOCAL = 1 23 }; 24 25 enum COR_BASE { 26 COBBASE_GPS = 1057, 27 COBBASE_GLONASS = 1063, 28 COBBASE_GALILEO = 1240, 29 COBBASE_QZSS = 1246, 30 COBBASE_SBAS = 1252, 31 COBBASE_BDS = 1258, 32 COBBASE_NUM 33 }; 34 35 enum COR_OFFSET { 36 COBOFS_ORBIT = 0, 37 COBOFS_CLOCK, 38 COBOFS_CBIAS, 39 COBOFS_COMBINED, 40 COBOFS_URA, 41 COBOFS_HR, 42 COBOFS_NUM 43 }; 44 45 enum ClockOrbitType { 46 COTYPE_GPSORBIT = COBBASE_GPS + COBOFS_ORBIT, 47 COTYPE_GPSCLOCK, 48 COTYPE_GPSCOMBINED = COBBASE_GPS + COBOFS_COMBINED, 49 COTYPE_GPSURA, 50 COTYPE_GPSHR, 51 52 COTYPE_GLONASSORBIT = COBBASE_GLONASS + COBOFS_ORBIT, 53 COTYPE_GLONASSCLOCK, 54 COTYPE_GLONASSCOMBINED = COBBASE_GLONASS + COBOFS_COMBINED, 55 COTYPE_GLONASSURA, 56 COTYPE_GLONASSHR, 57 58 COTYPE_GALILEOORBIT = COBBASE_GALILEO + COBOFS_ORBIT, 59 COTYPE_GALILEOCLOCK, 60 COTYPE_GALILEOCOMBINED = COBBASE_GALILEO + COBOFS_COMBINED, 61 COTYPE_GALILEOURA, 62 COTYPE_GALILEOHR, 63 64 COTYPE_QZSSORBIT = COBBASE_QZSS + COBOFS_ORBIT, 65 COTYPE_QZSSCLOCK, 66 COTYPE_QZSSCOMBINED = COBBASE_QZSS + COBOFS_COMBINED, 67 COTYPE_QZSSURA, 68 COTYPE_QZSSHR, 69 70 COTYPE_SBASORBIT = COBBASE_SBAS + COBOFS_ORBIT, 71 COTYPE_SBASCLOCK, 72 COTYPE_SBASCOMBINED = COBBASE_SBAS + COBOFS_COMBINED, 73 COTYPE_SBASURA, 74 COTYPE_SBASHR, 75 76 COTYPE_BDSORBIT = COBBASE_BDS + COBOFS_ORBIT, 77 COTYPE_BDSCLOCK, 78 COTYPE_BDSCOMBINED = COBBASE_BDS + COBOFS_COMBINED, 79 COTYPE_BDSURA, 80 COTYPE_BDSHR, 81 82 COTYPE_AUTO = 0, 83 }; 84 85 enum CodeBiasType { 86 CBTYPE_GPS = COBBASE_GPS + COBOFS_CBIAS, 87 CBTYPE_GLONASS = COBBASE_GLONASS + COBOFS_CBIAS, 88 CBTYPE_GALILEO = COBBASE_GALILEO + COBOFS_CBIAS, 89 CBTYPE_QZSS = COBBASE_QZSS + COBOFS_CBIAS, 90 CBTYPE_SBAS = COBBASE_SBAS + COBOFS_CBIAS, 91 CBTYPE_BDS = COBBASE_BDS + COBOFS_CBIAS, 92 CBTYPE_AUTO = 0 93 }; 94 95 enum PhaseBiasType{ 96 PBTYPE_BASE = 1265, 97 PBTYPE_GPS = PBTYPE_BASE, 98 PBTYPE_GLONASS, 99 PBTYPE_GALILEO, 100 PBTYPE_QZSS, 101 PBTYPE_SBAS, 102 PBTYPE_BDS, 103 PBTYPE_AUTO = 0 104 }; 105 106 enum VTECType { 107 VTEC_BASE = 1264 108 }; 109 110 /* if some systems aren't supported at all, change the following numbers to zero 111 for these systems to save space */ 112 enum COR_CONSTANTS { 113 CLOCKORBIT_BUFFERSIZE = 8192, 114 CLOCKORBIT_NUMGPS = 32, 115 CLOCKORBIT_NUMGLONASS = 26, 116 CLOCKORBIT_NUMGALILEO = 36, 117 CLOCKORBIT_NUMQZSS = 10, 118 CLOCKORBIT_NUMSBAS = 38, 119 CLOCKORBIT_NUMBDS = 65, 120 CLOCKORBIT_NUMBIAS = 100, 121 CLOCKORBIT_NUMIONOLAYERS = 4, 122 CLOCKORBIT_MAXIONOORDER = 16, 123 CLOCKORBIT_MAXIONODEGREE = 16 124 }; 125 126 enum COR_SATSYSTEM { 127 CLOCKORBIT_SATGPS=0, 128 CLOCKORBIT_SATGLONASS, 129 CLOCKORBIT_SATGALILEO, 130 CLOCKORBIT_SATQZSS, 131 CLOCKORBIT_SATSBAS, 132 CLOCKORBIT_SATBDS, 133 CLOCKORBIT_SATNUM 134 }; 135 136 enum COR_OFFSETS { 137 CLOCKORBIT_OFFSETGPS = 0, 138 CLOCKORBIT_OFFSETGLONASS = CLOCKORBIT_NUMGPS, 139 CLOCKORBIT_OFFSETGALILEO = CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS, 140 CLOCKORBIT_OFFSETQZSS = CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS + CLOCKORBIT_NUMGALILEO, 141 CLOCKORBIT_OFFSETSBAS = CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS + CLOCKORBIT_NUMGALILEO 142 + CLOCKORBIT_NUMQZSS, 143 CLOCKORBIT_OFFSETBDS = CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS + CLOCKORBIT_NUMGALILEO 144 + CLOCKORBIT_NUMQZSS + CLOCKORBIT_NUMSBAS, 145 CLOCKORBIT_COUNTSAT = CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS + CLOCKORBIT_NUMGALILEO 146 + CLOCKORBIT_NUMQZSS + CLOCKORBIT_NUMSBAS + CLOCKORBIT_NUMBDS 147 }; 148 149 enum CodeType { 150 CODETYPEGPS_L1_CA = 0, 151 CODETYPEGPS_L1_P = 1, 152 CODETYPEGPS_L1_Z = 2, 153 //CODETYPEGPS_L1_Y = 3, 154 //CODETYPEGPS_L1_M = 4, 155 CODETYPEGPS_L2_CA = 5, 156 CODETYPEGPS_SEMI_CODELESS = 6, 157 CODETYPEGPS_L2C_M = 7, 158 CODETYPEGPS_L2C_L = 8, 159 CODETYPEGPS_L2C_ML = 9, 160 CODETYPEGPS_L2_P = 10, 161 CODETYPEGPS_L2_Z = 11, 162 //CODETYPEGPS_L2_Y = 12, 163 //CODETYPEGPS_L2_M = 13, 164 CODETYPEGPS_L5_I = 14, 165 CODETYPEGPS_L5_Q = 15, 166 CODETYPEGPS_L5_IQ = 16, 167 CODETYPEGPS_L1C_D = 17, 168 CODETYPEGPS_L1C_P = 18, 169 CODETYPEGPS_L1C_DP = 19, 170 171 CODETYPEGLONASS_L1_CA = 0, 172 CODETYPEGLONASS_L1_P = 1, 173 CODETYPEGLONASS_L2_CA = 2, 174 CODETYPEGLONASS_L2_P = 3, 175 CODETYPEGLONASS_L1a_OCd = 4, 176 CODETYPEGLONASS_L1a_OCp = 5, 177 CODETYPEGLONASS_L1a_OCdp = 6, 178 CODETYPEGLONASS_L2a_CSI = 7, 179 CODETYPEGLONASS_L2a_OCp = 8, 180 CODETYPEGLONASS_L2a_CSIOCp = 9, 181 CODETYPEGLONASS_L3_I = 10, 182 CODETYPEGLONASS_L3_Q = 11, 183 CODETYPEGLONASS_L3_IQ = 12, 184 185 CODETYPEGALILEO_E1_A = 0, 186 CODETYPEGALILEO_E1_B = 1, 187 CODETYPEGALILEO_E1_C = 2, 188 CODETYPEGALILEO_E1_BC = 3, 189 CODETYPEGALILEO_E1_ABC = 4, 190 CODETYPEGALILEO_E5A_I = 5, 191 CODETYPEGALILEO_E5A_Q = 6, 192 CODETYPEGALILEO_E5A_IQ = 7, 193 CODETYPEGALILEO_E5B_I = 8, 194 CODETYPEGALILEO_E5B_Q = 9, 195 CODETYPEGALILEO_E5B_IQ = 10, 196 CODETYPEGALILEO_E5_I = 11, 197 CODETYPEGALILEO_E5_Q = 12, 198 CODETYPEGALILEO_E5_IQ = 13, 199 CODETYPEGALILEO_E6_A = 14, 200 CODETYPEGALILEO_E6_B = 15, 201 CODETYPEGALILEO_E6_C = 16, 202 CODETYPEGALILEO_E6_BC = 17, 203 CODETYPEGALILEO_E6_ABC = 18, 204 205 CODETYPEQZSS_L1_CA = 0, 206 CODETYPEQZSS_L1C_D = 1, 207 CODETYPEQZSS_L1C_P = 2, 208 CODETYPEQZSS_L2C_M = 3, 209 CODETYPEQZSS_L2C_L = 4, 210 CODETYPEQZSS_L2C_ML = 5, 211 CODETYPEQZSS_L5_I = 6, 212 CODETYPEQZSS_L5_Q = 7, 213 CODETYPEQZSS_L5_IQ = 8, 214 CODETYPEQZSS_L6_D = 9, 215 CODETYPEQZSS_L6_P = 10, 216 CODETYPEQZSS_L6_DP = 11, 217 CODETYPEQZSS_L1C_DP = 12, 218 CODETYPEQZSS_L1_S = 13, 219 CODETYPEQZSS_L5_D = 14, 220 CODETYPEQZSS_L5_P = 15, 221 CODETYPEQZSS_L5_DP = 16, 222 CODETYPEQZSS_L6_E = 17, 223 CODETYPEQZSS_L6_DE = 18, 224 225 CODETYPE_SBAS_L1_CA = 0, 226 CODETYPE_SBAS_L5_I = 1, 227 CODETYPE_SBAS_L5_Q = 2, 228 CODETYPE_SBAS_L5_IQ = 3, 229 230 CODETYPE_BDS_B1_I = 0, 231 CODETYPE_BDS_B1_Q = 1, 232 CODETYPE_BDS_B1_IQ = 2, 233 CODETYPE_BDS_B3_I = 3, 234 CODETYPE_BDS_B3_Q = 4, 235 CODETYPE_BDS_B3_IQ = 5, 236 CODETYPE_BDS_B2_I = 6, 237 CODETYPE_BDS_B2_Q = 7, 238 CODETYPE_BDS_B2_IQ = 8, 239 CODETYPE_BDS_B1a_D = 9, 240 CODETYPE_BDS_B1a_P = 10, 241 CODETYPE_BDS_B1a_DP = 11, 242 CODETYPE_BDS_B2a_D = 12, 243 CODETYPE_BDS_B2a_P = 13, 244 CODETYPE_BDS_B2a_DP = 14 245 }; 246 247 #define SSR_MAXURA 5.5 /* > 5466.5mm in meter */ 248 249 /* satellite system data is stored with offset CLOCKORBIT_OFFSET... 250 in the data structures. So first GLONASS satellite is at 251 xxx->Sat[CLOCKORBIT_OFFSETGLONASS], first GPS satellite is 252 xxx->Sat[CLOCKORBIT_OFFSETGPS]. */ 253 254 struct ClockOrbit { 255 enum ClockOrbitType messageType; 256 unsigned int EpochTime[CLOCKORBIT_SATNUM]; /* 0 .. system specific maximum */ 257 unsigned int NumberOfSat[CLOCKORBIT_SATNUM]; /* 0 .. CLOCKORBIT_NUM... */ 258 unsigned int Supplied[COBOFS_NUM]; /* boolean */ 259 unsigned int SSRIOD; 260 unsigned int SSRProviderID; 261 unsigned int SSRSolutionID; 262 unsigned int UpdateInterval; 263 enum SatelliteReferenceDatum SatRefDatum; 264 struct SatData { 265 unsigned int ID; /* all */ 266 unsigned int IOD; /* all */ 267 unsigned int toe; /* SBAS, BDS */ 268 double UserRangeAccuracy; /* accuracy values in [m] */ 269 double hrclock; 270 struct OrbitPart { 271 double DeltaRadial; /* m */ 272 double DeltaAlongTrack; /* m */ 273 double DeltaCrossTrack; /* m */ 274 double DotDeltaRadial; /* m/s */ 275 double DotDeltaAlongTrack; /* m/s */ 276 double DotDeltaCrossTrack; /* m/s */ 277 } Orbit; 278 struct ClockPart { 279 double DeltaA0; /* m */ 280 double DeltaA1; /* m/s */ 281 double DeltaA2; /* m/ss */ 282 } Clock; 283 } Sat[CLOCKORBIT_COUNTSAT]; 284 }; 285 286 struct CodeBias { 287 enum CodeBiasType messageType; 288 unsigned int EpochTime[CLOCKORBIT_SATNUM]; /* 0 .. system specific maximum */ 289 unsigned int NumberOfSat[CLOCKORBIT_SATNUM]; /* 0 .. CLOCKORBIT_NUM... */ 290 unsigned int UpdateInterval; 291 unsigned int SSRIOD; 292 unsigned int SSRProviderID; 293 unsigned int SSRSolutionID; 294 struct BiasSat { 295 unsigned int ID; /* all */ 296 unsigned int NumberOfCodeBiases; 297 struct CodeBiasEntry { 298 enum CodeType Type; 299 float Bias; /* m */ 300 } Biases[CLOCKORBIT_NUMBIAS]; 301 } Sat[CLOCKORBIT_COUNTSAT]; 302 }; 303 304 struct PhaseBias { 305 enum PhaseBiasType messageType; 306 unsigned int EpochTime[CLOCKORBIT_SATNUM]; /* 0 .. system specific maximum */ 307 unsigned int NumberOfSat[CLOCKORBIT_SATNUM]; /* 0 .. CLOCKORBIT_NUM... */ 308 unsigned int UpdateInterval; 309 unsigned int SSRIOD; 310 unsigned int SSRProviderID; 311 unsigned int SSRSolutionID; 312 unsigned int DispersiveBiasConsistencyIndicator; 313 unsigned int MWConsistencyIndicator; 314 struct PhaseBiasSat { 315 unsigned int ID; /* all */ 316 unsigned int NumberOfPhaseBiases; 317 double YawAngle; /* radiant */ 318 double YawRate; /* radiant/s */ 319 struct PhaseBiasEntry { 320 enum CodeType Type; 321 unsigned int SignalIntegerIndicator; 322 unsigned int SignalsWideLaneIntegerIndicator; 323 unsigned int SignalDiscontinuityCounter; 324 float Bias; /* m */ 325 } Biases[CLOCKORBIT_NUMBIAS]; 326 } Sat[CLOCKORBIT_COUNTSAT]; 327 }; 328 329 struct VTEC { 330 unsigned int EpochTime; /* GPS */ 331 unsigned int UpdateInterval; 332 unsigned int SSRIOD; 333 unsigned int SSRProviderID; 334 unsigned int SSRSolutionID; 335 unsigned int NumLayers; /* 1-4 */ 336 double Quality; 337 struct IonoLayers { 338 double Height; /* m */ 339 unsigned int Degree; /* 1-16 */ 340 unsigned int Order; /* 1-16 */ 341 double Sinus[CLOCKORBIT_MAXIONODEGREE][CLOCKORBIT_MAXIONOORDER]; 342 double Cosinus[CLOCKORBIT_MAXIONODEGREE][CLOCKORBIT_MAXIONOORDER]; 343 } Layers[CLOCKORBIT_NUMIONOLAYERS]; 344 }; 345 346 /* return size of resulting data or 0 in case of an error */ 347 size_t MakeClockOrbit(const struct ClockOrbit *co, enum ClockOrbitType type, 348 int moremessagesfollow, char *buffer, size_t size); 349 size_t MakeCodeBias(const struct CodeBias *b, enum CodeBiasType type, 350 int moremessagesfollow, char *buffer, size_t size); 351 size_t MakePhaseBias(const struct PhaseBias *b, enum PhaseBiasType type, 352 int moremessagesfollow, char *buffer, size_t size); 353 size_t MakeVTEC(const struct VTEC *b, int moremessagesfollow, char *buffer, 354 size_t size); 355 356 enum GCOB_RETURN { 357 /* all well */ 358 GCOBR_MESSAGEFOLLOWS = 1, 359 GCOBR_OK = 0, 360 /* unknown data, a warning */ 361 GCOBR_UNKNOWNTYPE = -1, 362 GCOBR_UNKNOWNDATA = -2, 363 GCOBR_CRCMISMATCH = -3, 364 GCOBR_SHORTMESSAGE = -4, 365 /* failed to do the work */ 366 GCOBR_NOCLOCKORBITPARAMETER = -10, 367 GCOBR_NOCODEBIASPARAMETER = -11, 368 GCOBR_NOPHASEBIASPARAMETER = -12, 369 GCOBR_NOVTECPARAMETER = -13, 370 /* data mismatch - data in storage does not match new data */ 371 GCOBR_TIMEMISMATCH = -20, 372 GCOBR_DATAMISMATCH = -21, 373 /* not enough data - can decode the block completely */ 374 GCOBR_SHORTBUFFER = -30, 375 GCOBR_MESSAGEEXCEEDSBUFFER = -31}; 376 377 /* NOTE: When an error message has been emitted, the output structures may have been modified. Make a copy of the previous variant before calling the 378 function to have a clean state. */ 379 380 /* buffer should point to a RTCM3 block */ 381 enum GCOB_RETURN GetSSR(struct ClockOrbit *co, struct CodeBias *b, struct VTEC *v, 382 struct PhaseBias *pb, const char *buffer, size_t size, int *bytesused); 14 #include "clock_orbit.h" 15 16 class SsrCorrRtcm: public SsrCorr { 17 //Q_OBJECT 18 19 public: 20 SsrCorrRtcm() { 21 setCorBase(); 22 setCorOffset(); 23 setCoType(); 24 setCbType(); 25 setPbType(); 26 setVtecType(); 27 setCodeType(); 28 29 satoffset << CLOCKORBIT_OFFSETGPS 30 << CLOCKORBIT_OFFSETGLONASS 31 << CLOCKORBIT_OFFSETGALILEO 32 << CLOCKORBIT_OFFSETQZSS 33 << CLOCKORBIT_OFFSETSBAS 34 << CLOCKORBIT_OFFSETBDS 35 << CLOCKORBIT_COUNTSAT; 36 }; 37 38 ~SsrCorrRtcm() {}; 39 40 void setCorBase() { 41 COBBASE_GPS = 1057; 42 COBBASE_GLONASS = 1063; 43 COBBASE_GALILEO = 1240; 44 COBBASE_QZSS = 1246; 45 COBBASE_SBAS = 1252; 46 COBBASE_BDS = 1258; 47 COBBASE_NUM = 6; 48 corbase << COBBASE_GPS 49 << COBBASE_GLONASS 50 << COBBASE_GALILEO 51 << COBBASE_QZSS 52 << COBBASE_SBAS 53 << COBBASE_BDS; 54 }; 55 56 void setCorOffset() { 57 COBOFS_ORBIT = 0; 58 COBOFS_CLOCK = 1; 59 COBOFS_CBIAS = 2; 60 COBOFS_COMBINED = 3; 61 COBOFS_URA = 4; 62 COBOFS_HR = 5; 63 COBOFS_NUM = 6; 64 }; 65 66 void setCoType() { 67 COTYPE_GPSORBIT = COBBASE_GPS + COBOFS_ORBIT; 68 COTYPE_GPSCLOCK = COTYPE_GPSORBIT + 1; 69 COTYPE_GPSCOMBINED = COBBASE_GPS + COBOFS_COMBINED; 70 COTYPE_GPSURA = COTYPE_GPSCOMBINED + 1; 71 COTYPE_GPSHR = COTYPE_GPSURA + 1; 72 73 COTYPE_GLONASSORBIT = COBBASE_GLONASS + COBOFS_ORBIT; 74 COTYPE_GLONASSCLOCK = COTYPE_GLONASSORBIT + 1; 75 COTYPE_GLONASSCOMBINED = COBBASE_GLONASS + COBOFS_COMBINED; 76 COTYPE_GLONASSURA = COTYPE_GLONASSCOMBINED + 1; 77 COTYPE_GLONASSHR = COTYPE_GLONASSURA + 1; 78 79 COTYPE_GALILEOORBIT = COBBASE_GALILEO + COBOFS_ORBIT, 80 COTYPE_GALILEOCLOCK = COTYPE_GALILEOORBIT + 1; 81 COTYPE_GALILEOCOMBINED = COBBASE_GALILEO + COBOFS_COMBINED; 82 COTYPE_GALILEOURA = COTYPE_GALILEOCOMBINED + 1; 83 COTYPE_GALILEOHR = COTYPE_GALILEOURA + 1; 84 85 COTYPE_QZSSORBIT = COBBASE_QZSS + COBOFS_ORBIT; 86 COTYPE_QZSSCLOCK = COTYPE_QZSSORBIT + 1; 87 COTYPE_QZSSCOMBINED = COBBASE_QZSS + COBOFS_COMBINED, 88 COTYPE_QZSSURA = COTYPE_QZSSCOMBINED + 1; 89 COTYPE_QZSSHR = COTYPE_QZSSURA + 1; 90 91 COTYPE_SBASORBIT = COBBASE_SBAS + COBOFS_ORBIT; 92 COTYPE_SBASCLOCK = COTYPE_SBASORBIT + 1; 93 COTYPE_SBASCOMBINED = COBBASE_SBAS + COBOFS_COMBINED; 94 COTYPE_SBASURA = COTYPE_SBASCOMBINED + 1; 95 COTYPE_SBASHR = COTYPE_SBASURA + 1; 96 97 COTYPE_BDSORBIT = COBBASE_BDS + COBOFS_ORBIT; 98 COTYPE_BDSCLOCK = COTYPE_BDSORBIT + 1; 99 COTYPE_BDSCOMBINED = COBBASE_BDS + COBOFS_COMBINED, 100 COTYPE_BDSURA = COTYPE_BDSCOMBINED + 1; 101 COTYPE_BDSHR = COTYPE_BDSURA + 1; 102 103 COTYPE_AUTO = 0; 104 }; 105 106 void setCbType() { 107 CBTYPE_GPS = COBBASE_GPS + COBOFS_CBIAS; 108 CBTYPE_GLONASS = COBBASE_GLONASS + COBOFS_CBIAS; 109 CBTYPE_GALILEO = COBBASE_GALILEO + COBOFS_CBIAS; 110 CBTYPE_QZSS = COBBASE_QZSS + COBOFS_CBIAS; 111 CBTYPE_SBAS = COBBASE_SBAS + COBOFS_CBIAS; 112 CBTYPE_BDS = COBBASE_BDS + COBOFS_CBIAS; 113 CBTYPE_AUTO = 0; 114 }; 115 116 void setPbType() { 117 PBTYPE_BASE = 1265; 118 PBTYPE_GPS = PBTYPE_BASE; 119 PBTYPE_GLONASS = PBTYPE_GPS++; 120 PBTYPE_GALILEO = PBTYPE_GLONASS++; 121 PBTYPE_QZSS = PBTYPE_GALILEO++; 122 PBTYPE_SBAS = PBTYPE_QZSS++; 123 PBTYPE_BDS = PBTYPE_SBAS++; 124 PBTYPE_AUTO = 0; 125 }; 126 127 void setVtecType() { 128 VTEC_BASE = 1264; 129 }; 130 131 void setCodeType() { 132 CODETYPE_GPS_L1_CA = 0; 133 CODETYPE_GPS_L1_P = 1; 134 CODETYPE_GPS_L1_Z = 2; 135 136 137 CODETYPE_GPS_L2_CA = 5; 138 CODETYPE_GPS_SEMI_CODELESS = 6; 139 CODETYPE_GPS_L2C_M = 7; 140 CODETYPE_GPS_L2C_L = 8; 141 CODETYPE_GPS_L2C_ML = 9; 142 CODETYPE_GPS_L2_P = 10; 143 CODETYPE_GPS_L2_Z = 11; 144 145 146 CODETYPE_GPS_L5_I = 14; 147 CODETYPE_GPS_L5_Q = 15; 148 CODETYPE_GPS_L5_IQ = 16; 149 CODETYPE_GPS_L1C_D = 17; 150 CODETYPE_GPS_L1C_P = 18; 151 CODETYPE_GPS_L1C_DP = 19; 152 153 CODETYPE_GLONASS_L1_CA = 0; 154 CODETYPE_GLONASS_L1_P = 1; 155 CODETYPE_GLONASS_L2_CA = 2; 156 CODETYPE_GLONASS_L2_P = 3; 157 CODETYPE_GLONASS_L1a_OCd = 4; 158 CODETYPE_GLONASS_L1a_OCp = 5; 159 CODETYPE_GLONASS_L1a_OCdp = 6; 160 CODETYPE_GLONASS_L2a_CSI = 7; 161 CODETYPE_GLONASS_L2a_OCp = 8; 162 CODETYPE_GLONASS_L2a_CSIOCp = 9; 163 CODETYPE_GLONASS_L3_I = 10; 164 CODETYPE_GLONASS_L3_Q = 11; 165 CODETYPE_GLONASS_L3_IQ = 12; 166 167 CODETYPE_GALILEO_E1_A = 0; 168 CODETYPE_GALILEO_E1_B = 1; 169 CODETYPE_GALILEO_E1_C = 2; 170 CODETYPE_GALILEO_E1_BC = 3; 171 CODETYPE_GALILEO_E1_ABC = 4; 172 CODETYPE_GALILEO_E5A_I = 5; 173 CODETYPE_GALILEO_E5A_Q = 6; 174 CODETYPE_GALILEO_E5A_IQ = 7; 175 CODETYPE_GALILEO_E5B_I = 8; 176 CODETYPE_GALILEO_E5B_Q = 9; 177 CODETYPE_GALILEO_E5B_IQ = 10; 178 CODETYPE_GALILEO_E5_I = 11; 179 CODETYPE_GALILEO_E5_Q = 12; 180 CODETYPE_GALILEO_E5_IQ = 13; 181 CODETYPE_GALILEO_E6_A = 14; 182 CODETYPE_GALILEO_E6_B = 15; 183 CODETYPE_GALILEO_E6_C = 16; 184 CODETYPE_GALILEO_E6_BC = 17; 185 CODETYPE_GALILEO_E6_ABC = 18; 186 187 CODETYPE_QZSS_L1_CA = 0; 188 CODETYPE_QZSS_L1C_D = 1; 189 CODETYPE_QZSS_L1C_P = 2; 190 CODETYPE_QZSS_L2C_M = 3; 191 CODETYPE_QZSS_L2C_L = 4; 192 CODETYPE_QZSS_L2C_ML = 5; 193 CODETYPE_QZSS_L5_I = 6; 194 CODETYPE_QZSS_L5_Q = 7; 195 CODETYPE_QZSS_L5_IQ = 8; 196 CODETYPE_QZSS_L6_D = 9; 197 CODETYPE_QZSS_L6_P = 10; 198 CODETYPE_QZSS_L6_DP = 11; 199 CODETYPE_QZSS_L1C_DP = 12; 200 CODETYPE_QZSS_L1_S = 13; 201 CODETYPE_QZSS_L5_D = 14; 202 CODETYPE_QZSS_L5_P = 15; 203 CODETYPE_QZSS_L5_DP = 16; 204 CODETYPE_QZSS_L6_E = 17; 205 CODETYPE_QZSS_L6_DE = 18; 206 207 CODETYPE_SBAS_L1_CA = 0; 208 CODETYPE_SBAS_L5_I = 1; 209 CODETYPE_SBAS_L5_Q = 2; 210 CODETYPE_SBAS_L5_IQ = 3; 211 212 CODETYPE_BDS_B1_I = 0; 213 CODETYPE_BDS_B1_Q = 1; 214 CODETYPE_BDS_B1_IQ = 2; 215 CODETYPE_BDS_B3_I = 3; 216 CODETYPE_BDS_B3_Q = 4; 217 CODETYPE_BDS_B3_IQ = 5; 218 CODETYPE_BDS_B2_I = 6; 219 CODETYPE_BDS_B2_Q = 7; 220 CODETYPE_BDS_B2_IQ = 8; 221 CODETYPE_BDS_B1a_D = 9; 222 CODETYPE_BDS_B1a_P = 10; 223 CODETYPE_BDS_B1a_DP = 11; 224 CODETYPE_BDS_B2a_D = 12; 225 CODETYPE_BDS_B2a_P = 13; 226 CODETYPE_BDS_B2a_DP = 14; 227 228 229 230 231 } 232 233 std::string codeTypeToRnxType(char system, CodeType type); 234 SsrCorr::CodeType rnxTypeToCodeType(char system, std::string type); 235 236 size_t MakeClockOrbit(const struct ClockOrbit *co, ClockOrbitType type, 237 int moremessagesfollow, char *buffer, size_t size); 238 size_t MakeCodeBias(const struct CodeBias *b, CodeBiasType type, 239 int moremessagesfollow, char *buffer, size_t size); 240 size_t MakePhaseBias(const struct PhaseBias *b, PhaseBiasType type, 241 int moremessagesfollow, char *buffer, size_t size); 242 size_t MakeVTEC(const struct VTEC *v, int moremessagesfollow, char *buffer, 243 size_t size); 244 enum GCOB_RETURN GetSSR(struct ClockOrbit *co, struct CodeBias *b, 245 struct VTEC *v, struct PhaseBias *pb, const char *buffer, size_t size, 246 int *bytesused); 247 }; 383 248 384 249 #endif /* RTCM3_CLOCK_ORBIT_RTCM_H */
Note:
See TracChangeset
for help on using the changeset viewer.