- Timestamp:
- Sep 3, 2026, 9:38:44 PM (10 days ago)
- Location:
- trunk/BNC/src/RTCM3
- Files:
-
- 9 edited
-
RTCM3coDecoder.cpp (modified) (1 diff)
-
RTCM3coDecoder.h (modified) (1 diff)
-
clock_and_orbit/clock_orbit.h (modified) (6 diffs)
-
clock_and_orbit/clock_orbit_igs.cpp (modified) (2 diffs)
-
clock_and_orbit/clock_orbit_igs.h (modified) (2 diffs)
-
clock_and_orbit/clock_orbit_rtcm.cpp (modified) (2 diffs)
-
clock_and_orbit/clock_orbit_rtcm.h (modified) (2 diffs)
-
clock_and_orbit/clock_orbit_rtcm_new.cpp (modified) (4 diffs)
-
clock_and_orbit/clock_orbit_rtcm_new.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/BNC/src/RTCM3/RTCM3coDecoder.cpp
r11003 r11004 181 181 struct SsrCorr::PhaseBias phaseBiasSav; 182 182 struct SsrCorr::VTEC vTECSav; 183 memcpy(&clkOrbSav, &_clkOrb, sizeof(clkOrbSav)); // save state 183 struct SsrCorr::MetaData metaDataSav; 184 // save state 185 memcpy(&clkOrbSav, &_clkOrb, sizeof(clkOrbSav)); 184 186 memcpy(&codeBiasSav, &_codeBias, sizeof(codeBiasSav)); 185 187 memcpy(&phaseBiasSav, &_phaseBias, sizeof(phaseBiasSav)); 186 188 memcpy(&vTECSav, &_vTEC, sizeof(vTECSav)); 189 memcpy(&metaDataSav, &_metaData, sizeof(metaDataSav)); 187 190 188 191 int bytesused = 0; 189 192 190 GCOB_RETURN irc = _ssrCorr->GetSSR(&_clkOrb, &_codeBias, &_vTEC, &_phaseBias, 193 GCOB_RETURN irc = _ssrCorr->GetSSR(&_clkOrb, &_codeBias, &_vTEC, &_phaseBias, &_metaData, 191 194 _buffer.data(), _buffer.size(), &bytesused); 192 195 193 196 if (irc <= -30) { // not enough data - restore state and exit loop 194 memcpy(&_clkOrb, &clkOrbSav, sizeof(clkOrbSav)); 195 memcpy(&_codeBias, &codeBiasSav, sizeof(codeBiasSav)); 196 memcpy(&_phaseBias, &phaseBiasSav, sizeof(phaseBiasSav)); 197 memcpy(&_vTEC, &vTECSav, sizeof(vTECSav)); 197 memcpy(&_clkOrb, &clkOrbSav, sizeof(clkOrbSav)); 198 memcpy(&_codeBias, &codeBiasSav, sizeof(codeBiasSav)); 199 memcpy(&_phaseBias, &phaseBiasSav, sizeof(phaseBiasSav)); 200 memcpy(&_vTEC, &vTECSav, sizeof(vTECSav)); 201 memcpy(&metaDataSav, &_metaData, sizeof(metaDataSav)); 198 202 break; 199 203 } 200 204 201 205 else if (irc < 0) { // error - skip this message (or 1 byte if the 202 // frame itself couldn't be recognized) and retry206 // frame itself couldn't be recognized) and retry 203 207 if (irc != GCOBR_UNKNOWNTYPE) { 204 208 // A recognized-but-unimplemented message (e.g. Tropospheric or -
trunk/BNC/src/RTCM3/RTCM3coDecoder.h
r11002 r11004 83 83 SsrCorr::PhaseBias _phaseBias; 84 84 SsrCorr::VTEC _vTEC; 85 SsrCorr::MetaData _metaData; 85 86 int _providerID[3]; 86 87 e_type _type; -
trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit.h
r10997 r11004 21 21 enum IGS_NUMBERS { 22 22 RTCM_MESSAGE_NUMBER_IGS = 4076, 23 IGS_SSR_VERSION = 3 23 IGS_SSR_VERSION = 3 24 24 }; 25 25 … … 27 27 for these systems to save space */ 28 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 29 COBOFS_MAXNUM = 10, 30 CLOCKORBIT_BUFFERSIZE = 8192, 31 CLOCKORBIT_NUMGPS = t_prn::MAXPRN_GPS, 32 CLOCKORBIT_NUMGLONASS = t_prn::MAXPRN_GLONASS, 33 CLOCKORBIT_NUMGALILEO = t_prn::MAXPRN_GALILEO, 34 CLOCKORBIT_NUMQZSS = t_prn::MAXPRN_QZSS, 35 CLOCKORBIT_NUMSBAS = t_prn::MAXPRN_SBAS, 36 CLOCKORBIT_NUMBDS = t_prn::MAXPRN_BDS, 37 CLOCKORBIT_NUMBIAS = 150, 38 VTEC_NUMIONOLAYERS = 4, 39 VTEC_MAXIONOORDER = 16, 40 VTEC_MAXIONODEGREE = 16, 41 META_MAXNUMENTRIES = 7 40 42 }; 41 43 … … 112 114 CorBase COBBASE_NUM; 113 115 116 114 117 typedef unsigned int CorOffset; 115 118 CorOffset COBOFS_ORBIT; … … 349 352 350 353 #define SSR_MAXURA 5.5 /* > 5466.5mm in meter */ 351 #define COBOFS_MAXNUM 7 354 352 355 353 356 /* satellite system data is stored with offset CLOCKORBIT_OFFSET... … … 448 451 unsigned int Degree; /* 1-16 */ 449 452 unsigned int Order; /* 1-16 */ 450 double Sinus[CLOCKORBIT_MAXIONODEGREE][CLOCKORBIT_MAXIONOORDER]; 451 double Cosinus[CLOCKORBIT_MAXIONODEGREE][CLOCKORBIT_MAXIONOORDER]; 452 } Layers[CLOCKORBIT_NUMIONOLAYERS]; 453 double Sinus[VTEC_MAXIONODEGREE][VTEC_MAXIONOORDER]; 454 double Cosinus[VTEC_MAXIONODEGREE][VTEC_MAXIONOORDER]; 455 } Layers[VTEC_NUMIONOLAYERS]; 456 }; 457 458 struct MetaData { 459 unsigned int EpochTime; /* GPS */ 460 unsigned int SSRIOD; 461 unsigned int SSRProviderID; 462 unsigned int SSRSolutionID; 463 unsigned int NumEntries; /* 1-7 */ 464 struct ModelPart { 465 unsigned int TypeIndicator; 466 unsigned int ApplicationIndicator; 467 unsigned int nonDefaultIndicator; 468 unsigned int nonDefaultIdentifier; 469 unsigned int DataIODIndicator; 470 unsigned int DataIOD; 471 unsigned int additionalParameterIndicator; 472 unsigned int additionalParameterNumBits; 473 unsigned int additionalParameterData; 474 } Entries[META_MAXNUMENTRIES]; 453 475 }; 454 476 … … 458 480 virtual size_t MakePhaseBias(const struct PhaseBias *b, CodeBiasType type, int moremessagesfollow, char *buffer, size_t size) = 0; 459 481 virtual size_t MakeVTEC(const struct VTEC *v, int moremessagesfollow, char *buffer, size_t size) = 0; 460 461 482 /* buffer should point to a RTCM3 block */ 462 virtual enum GCOB_RETURN GetSSR(struct ClockOrbit *co, struct CodeBias *b, struct VTEC *v, struct PhaseBias *pb, 483 virtual enum GCOB_RETURN GetSSR(struct ClockOrbit *co, 484 struct CodeBias *b, struct VTEC *v, 485 struct PhaseBias *pb, 486 struct MetaData *md, 463 487 const char *buffer, size_t size, int *bytesused) = 0; 488 489 virtual std::string metaTypeToStr(unsigned int ind) = 0; 464 490 virtual std::string codeTypeToRnxType(char system, CodeType type) = 0; 465 virtual CodeType rnxTypeToCodeType(char system, std::string type) = 0; 491 virtual CodeType rnxTypeToCodeType(char system, std::string type) = 0; 492 466 493 467 494 #define MPI 3.141592653589793 -
trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_igs.cpp
r10997 r11004 315 315 316 316 enum GCOB_RETURN SsrCorrIgs::GetSSR(struct ClockOrbit *co, struct CodeBias *b,struct VTEC *v, 317 struct PhaseBias *pb, const char *buffer, size_t size, int *bytesused) { 317 struct PhaseBias *pb, struct MetaData *md, const char *buffer, size_t size, int *bytesused) { 318 318 int mmi = 0, h, rs; 319 319 unsigned int igstype, pos, i, j, s, nums, id; … … 920 920 return CODETYPE_RESERVED; 921 921 } 922 922 // 923 //////////////////////////////////////////////////////////////////////////// 924 std::string SsrCorrIgs::metaTypeToStr(unsigned int) { 925 // This format does not decode Metadata message content (see md/GetSSR 926 // above); only present to satisfy SsrCorr's interface. 927 return ""; 928 } 929 -
trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_igs.h
r10997 r11004 217 217 }; 218 218 219 std::string codeTypeToRnxType(char system, CodeType type); 219 std::string metaTypeToStr(unsigned int ind); 220 std::string codeTypeToRnxType(char system, CodeType type); 220 221 SsrCorr::CodeType rnxTypeToCodeType(char system, std::string type); 221 222 … … 229 230 size_t size); 230 231 enum GCOB_RETURN GetSSR(struct ClockOrbit *co, struct CodeBias *b, 231 struct VTEC *v, struct PhaseBias *pb, const char *buffer, size_t size,232 int *bytesused); 232 struct VTEC *v, struct PhaseBias *pb, struct MetaData *md, 233 const char *buffer, size_t size, int *bytesused); 233 234 }; 234 235 -
trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_rtcm.cpp
r10997 r11004 496 496 497 497 enum GCOB_RETURN SsrCorrRtcm::GetSSR(struct ClockOrbit *co, struct CodeBias *b,struct VTEC *v, 498 struct PhaseBias *pb, const char *buffer, size_t size, int *bytesused) { 498 struct PhaseBias *pb, struct MetaData *md, const char *buffer, size_t size, int *bytesused) { 499 499 int mmi = 0, h, rs; 500 500 unsigned int type, pos, i, j, s, nums, id; … … 1375 1375 return CODETYPE_RESERVED; 1376 1376 } 1377 1377 // 1378 //////////////////////////////////////////////////////////////////////////// 1379 std::string SsrCorrRtcm::metaTypeToStr(unsigned int) { 1380 // Metadata messages are not defined in (old) RTCM-SSR, so this format 1381 // never decodes model-correction-type codes; only present to satisfy 1382 // SsrCorr's interface. 1383 return ""; 1384 } 1385 -
trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_rtcm.h
r10997 r11004 214 214 CODETYPE_BDS_B2a_P = 13; 215 215 CODETYPE_BDS_B2a_DP = 14; 216 217 218 219 220 216 } 221 217 222 std::string codeTypeToRnxType(char system, CodeType type); 218 std::string metaTypeToStr(unsigned int ind); 219 std::string codeTypeToRnxType(char system, CodeType type); 223 220 SsrCorr::CodeType rnxTypeToCodeType(char system, std::string type); 224 221 … … 232 229 size_t size); 233 230 enum GCOB_RETURN GetSSR(struct ClockOrbit *co, struct CodeBias *b, 234 struct VTEC *v, struct PhaseBias *pb, const char *buffer, size_t size, 231 struct VTEC *v, struct PhaseBias *pb, struct MetaData *md, 232 const char *buffer, size_t size, 235 233 int *bytesused); 236 234 }; -
trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_rtcm_new.cpp
r11002 r11004 459 459 } 460 460 461 enum GCOB_RETURN SsrCorrRtcmNew::GetSSR(struct ClockOrbit *co, struct CodeBias *b,struct VTEC *v, 462 struct PhaseBias *pb, const char *buffer, size_t size, int *bytesused) { 461 enum GCOB_RETURN SsrCorrRtcmNew::GetSSR(struct ClockOrbit *co, struct CodeBias *b, struct VTEC *v, 462 struct PhaseBias *pb, struct MetaData *md, const char *buffer, size_t size, int *bytesused) { 463 463 int mmi = 0, h, rs; 464 464 unsigned int type, pos, i, j, s, nums, id; … … 501 501 *bytesused = sizeofrtcmblock + 6; 502 502 503 if (type == VTEC_BASE) {504 unsigned int l, o, d;505 if (! v)503 if (type == METADATATYPE_BASE) { 504 unsigned int i; 505 if (!md) 506 506 return GCOBR_NOVTECPARAMETER; 507 memset( v, 0, sizeof(*v));508 D_ GPS_EPOCH_TIME(v->EpochTime)509 D_SSR_ UPDATE_INTERVAL(v->UpdateInterval)510 D_ MULTIPLE_MESSAGE_INDICATOR(mmi)511 D_ SSR_IOD(v->SSRIOD)512 D_SSR_PROVIDER_ID(v->SSRProviderID) 513 D_SSR_SOLUTION_ID(v->SSRSolutionID)514 D_VTEC_QUALITY_INDICATOR(v->Quality)515 D_NO_IONO_LAYERS(v->NumLayers) 516 #ifdef BNC_DEBUG_SSR 517 fprintf(stderr, "epochTime %d ui %d mmi %d ssrIod %d providerId %d solId %d vtecQ %8.3f numLay %d \n",518 v->EpochTime, v->UpdateInterval, mmi,519 v->SSRIOD, v->SSRProviderID, v->SSRSolutionID, v->Quality, v->NumLayers); 520 #endif 521 for (l = 0; l < v->NumLayers; ++l) {522 D_IONO_HEIGHT(v->Layers[l].Height)523 D_IONO_DEGREE(v->Layers[l].Degree)524 D_IONO_ORDER(v->Layers[l].Order)525 #ifdef BNC_DEBUG_SSR 526 fprintf(stderr, "h %8.3f deg %d ord %d \n",527 v->Layers[l].Height, v->Layers[l].Degree, v->Layers[l].Order);528 #endif 529 for (o = 0; o <= v->Layers[l].Order; ++o) {530 for (d = o; d <= v->Layers[l].Degree; ++d) {531 D_IONO_COEFF_C(v->Layers[l].Cosinus[d][o])532 #ifdef BNC_DEBUG_SSR 533 fprintf(stderr, "C[%02d][%02d] %8.3f \n",534 d, o, v->Layers[l].Cosinus[d][o]);535 #endif 536 }537 }538 for (o = 1; o <= v->Layers[l].Order; ++o) {539 for (d = o; d <= v->Layers[l].Degree; ++d) {540 D_IONO_COEFF_S(v->Layers[l].Sinus[d][o])541 #ifdef BNC_DEBUG_SSR 542 fprintf(stderr, "S[%02d][%02d] %8.3f\n",543 d, o, v->Layers[l].Sinus[d][o]);544 #endif 545 } 546 } 507 memset(md, 0, sizeof(*md)); 508 D_SSR_IOD(md->SSRIOD) 509 D_SSR_PROVIDER_ID(md->SSRProviderID) 510 D_SSR_SOLUTION_ID(md->SSRSolutionID) 511 D_NUMBER_OF_SSR_MODEL_CORRECTION_ENTRIES(md->NumEntries) 512 #ifdef BNC_DEBUG_SSR 513 fprintf(stderr, "ssrIod %d providerId %d solId %d numEntries %d \n", 514 md->SSRIOD, md->SSRProviderID, md->SSRSolutionID, md->NumEntries); 515 #endif 516 for (i = 0; i < md->NumEntries; ++i) { 517 unsigned int numbits; 518 D_MODEL_CORRECTION_TYPE_INDICATOR(md->Entries[i].TypeIndicator) 519 D_MODEL_CORRECTION_APPLICATION_INDICATOR(md->Entries[i].ApplicationIndicator) 520 521 D_NON_DEFAULT_MODEL_CORRECTION_INDICATOR(md->Entries[i].nonDefaultIndicator) 522 if (md->Entries[i].ApplicationIndicator) { 523 D_NON_DEFAULT_MODEL_CORRECTION_IDENTIFIER(md->Entries[i].nonDefaultIdentifier) 524 } 525 D_MODEL_CORRECTION_DATA_IOD_INDICATOR(md->Entries[i].DataIODIndicator) 526 if (md->Entries[i].DataIODIndicator) { 527 D_MODEL_CORRECTION_DATA_IOD(md->Entries[i].DataIOD) 528 } 529 if (md->Entries[i].nonDefaultIndicator) { 530 D_ADDITIONAL_MODEL_PARAMETER_INDICATOR(md->Entries[i].additionalParameterIndicator) 531 } 532 if (md->Entries[i].additionalParameterIndicator) { 533 D_NUMBER_OF_ADDITIONAL_MODEL_PARAMETER_BITS(numbits) 534 md->Entries[i].additionalParameterNumBits = numbits; 535 } 536 if (md->Entries[i].nonDefaultIndicator && 537 md->Entries[i].additionalParameterIndicator) { 538 D_ADDITIONAL_MODEL_PARAMETER_DATA(md->Entries[i].additionalParameterData, numbits) 539 } 540 541 #ifdef BNC_DEBUG_SSR 542 fprintf(stderr, "entry %d type (%s) apply: %s \n", 543 i, md->Entries[i].TypeIndicator, metaTypeToStr(md->Entries[i].TypeIndicator), 544 md->Entries[i].ApplicationIndicator ? "yes" : "no"); 545 #endif 546 547 547 } 548 548 #ifdef BNC_DEBUG_SSR … … 1050 1050 } 1051 1051 } 1052 //else if (kind == COBOFS_) 1052 1053 else { 1053 /* COBOFS_ PBEXT / COBOFS_SATANT / COBOFS_REGIONO: message numbers are1054 /* COBOFS_SATANT / COBOFS_REGIONO: message numbers are 1054 1055 recognized (see setCorType()) but decoding is not implemented yet */ 1055 1056 return GCOBR_UNKNOWNTYPE; … … 1234 1235 return CODETYPE_RESERVED; 1235 1236 } 1236 1237 // 1238 //////////////////////////////////////////////////////////////////////////// 1239 std::string SsrCorrRtcmNew::metaTypeToStr(unsigned int ind) { 1240 if (ind == 1) return "satellite antenna PCV: "; 1241 if (ind == 2) return "satellite antenna GDV: "; 1242 if (ind == 3) return "solid earth tides: "; 1243 if (ind == 4) return "ocean loading: "; 1244 if (ind == 5) return "pole tides: "; 1245 if (ind == 6) return "relativity: "; 1246 if (ind == 7) return "GNSS BE reference: "; 1247 1248 return "reserved!"; 1249 } -
trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_rtcm_new.h
r10997 r11004 269 269 } 270 270 } 271 272 std::string codeTypeToRnxType(char system, CodeType type); 271 272 std::string metaTypeToStr(unsigned int ind); 273 std::string codeTypeToRnxType(char system, CodeType type); 273 274 SsrCorr::CodeType rnxTypeToCodeType(char system, std::string type); 274 275 … … 277 278 size_t MakePhaseBias(const struct PhaseBias *b, PhaseBiasType type, int moremessagesfollow, char *buffer, size_t size); 278 279 size_t MakeVTEC(const struct VTEC *v, int moremessagesfollow, char *buffer, size_t size); 279 enum GCOB_RETURN GetSSR(struct ClockOrbit *co, struct CodeBias *b, struct VTEC *v, struct PhaseBias *pb, const char *buffer, size_t size, int *bytesused); 280 enum GCOB_RETURN GetSSR(struct ClockOrbit *co, struct CodeBias *b, struct VTEC *v, 281 struct PhaseBias *pb, struct MetaData *md, 282 const char *buffer, size_t size, int *bytesused); 280 283 }; 281 284
Note:
See TracChangeset
for help on using the changeset viewer.
