Changeset 9036 in ntrip for branches/BNC_2.12/src/RTCM3/RTCM3coDecoder.cpp
- Timestamp:
- Aug 27, 2020, 9:36:18 AM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/BNC_2.12/src/RTCM3/RTCM3coDecoder.cpp
r8987 r9036 53 53 // Constructor 54 54 //////////////////////////////////////////////////////////////////////////// 55 RTCM3coDecoder::RTCM3coDecoder(const QString& staID ) {55 RTCM3coDecoder::RTCM3coDecoder(const QString& staID, const e_type type) { 56 56 57 57 _staID = staID; … … 96 96 _providerID[1] = -1; 97 97 _providerID[2] = -1; 98 99 _type = type; 100 _ssrCorr = 0; 98 101 } 99 102 … … 102 105 RTCM3coDecoder::~RTCM3coDecoder() { 103 106 delete _out; 107 delete _ssrCorr; 104 108 _IODs.clear(); 105 109 _orbCorrections.clear(); … … 166 170 while(_buffer.size()) { 167 171 168 struct ClockOrbit clkOrbSav;169 struct CodeBias codeBiasSav;170 struct PhaseBias phaseBiasSav;171 struct VTEC vTECSav;172 struct SsrCorr::ClockOrbit clkOrbSav; 173 struct SsrCorr::CodeBias codeBiasSav; 174 struct SsrCorr::PhaseBias phaseBiasSav; 175 struct SsrCorr::VTEC vTECSav; 172 176 memcpy(&clkOrbSav, &_clkOrb, sizeof(clkOrbSav)); // save state 173 177 memcpy(&codeBiasSav, &_codeBias, sizeof(codeBiasSav)); … … 176 180 177 181 int bytesused = 0; 178 GCOB_RETURN irc = GetSSR(&_clkOrb, &_codeBias, &_vTEC, &_phaseBias, 182 if (_type == e_type::RTCMssr) { 183 _ssrCorr = new SsrCorrRtcm(); 184 } 185 else { 186 _ssrCorr = new SsrCorrIgs(); 187 } 188 GCOB_RETURN irc = _ssrCorr->GetSSR(&_clkOrb, &_codeBias, &_vTEC, &_phaseBias, 179 189 _buffer.data(), _buffer.size(), &bytesused); 180 190 … … 259 269 continue; 260 270 } 271 261 272 // Orbit correction 262 273 // ---------------- 263 if ( _clkOrb.messageType == COTYPE_GPSCOMBINED ||264 _clkOrb.messageType == COTYPE_GLONASSCOMBINED ||265 _clkOrb.messageType == COTYPE_GALILEOCOMBINED ||266 _clkOrb.messageType == COTYPE_QZSSCOMBINED ||267 _clkOrb.messageType == COTYPE_SBASCOMBINED ||268 _clkOrb.messageType == COTYPE_BDSCOMBINED ||269 _clkOrb.messageType == COTYPE_GPSORBIT ||270 _clkOrb.messageType == COTYPE_GLONASSORBIT ||271 _clkOrb.messageType == COTYPE_GALILEOORBIT ||272 _clkOrb.messageType == COTYPE_QZSSORBIT ||273 _clkOrb.messageType == COTYPE_SBASORBIT ||274 _clkOrb.messageType == COTYPE_BDSORBIT ) {274 if ( _clkOrb.messageType == _ssrCorr->COTYPE_GPSCOMBINED || 275 _clkOrb.messageType == _ssrCorr->COTYPE_GLONASSCOMBINED || 276 _clkOrb.messageType == _ssrCorr->COTYPE_GALILEOCOMBINED || 277 _clkOrb.messageType == _ssrCorr->COTYPE_QZSSCOMBINED || 278 _clkOrb.messageType == _ssrCorr->COTYPE_SBASCOMBINED || 279 _clkOrb.messageType == _ssrCorr->COTYPE_BDSCOMBINED || 280 _clkOrb.messageType == _ssrCorr->COTYPE_GPSORBIT || 281 _clkOrb.messageType == _ssrCorr->COTYPE_GLONASSORBIT || 282 _clkOrb.messageType == _ssrCorr->COTYPE_GALILEOORBIT || 283 _clkOrb.messageType == _ssrCorr->COTYPE_QZSSORBIT || 284 _clkOrb.messageType == _ssrCorr->COTYPE_SBASORBIT || 285 _clkOrb.messageType == _ssrCorr->COTYPE_BDSORBIT ) { 275 286 276 287 t_orbCorr orbCorr; … … 295 306 // Clock Corrections 296 307 // ----------------- 297 if ( _clkOrb.messageType == COTYPE_GPSCOMBINED ||298 _clkOrb.messageType == COTYPE_GLONASSCOMBINED ||299 _clkOrb.messageType == COTYPE_GALILEOCOMBINED ||300 _clkOrb.messageType == COTYPE_QZSSCOMBINED ||301 _clkOrb.messageType == COTYPE_SBASCOMBINED ||302 _clkOrb.messageType == COTYPE_BDSCOMBINED ||303 _clkOrb.messageType == COTYPE_GPSCLOCK ||304 _clkOrb.messageType == COTYPE_GLONASSCLOCK ||305 _clkOrb.messageType == COTYPE_GALILEOCLOCK ||306 _clkOrb.messageType == COTYPE_QZSSCLOCK ||307 _clkOrb.messageType == COTYPE_SBASCLOCK ||308 _clkOrb.messageType == COTYPE_BDSCLOCK) {308 if ( _clkOrb.messageType == _ssrCorr->COTYPE_GPSCOMBINED || 309 _clkOrb.messageType == _ssrCorr->COTYPE_GLONASSCOMBINED || 310 _clkOrb.messageType == _ssrCorr->COTYPE_GALILEOCOMBINED || 311 _clkOrb.messageType == _ssrCorr->COTYPE_QZSSCOMBINED || 312 _clkOrb.messageType == _ssrCorr->COTYPE_SBASCOMBINED || 313 _clkOrb.messageType == _ssrCorr->COTYPE_BDSCOMBINED || 314 _clkOrb.messageType == _ssrCorr->COTYPE_GPSCLOCK || 315 _clkOrb.messageType == _ssrCorr->COTYPE_GLONASSCLOCK || 316 _clkOrb.messageType == _ssrCorr->COTYPE_GALILEOCLOCK || 317 _clkOrb.messageType == _ssrCorr->COTYPE_QZSSCLOCK || 318 _clkOrb.messageType == _ssrCorr->COTYPE_SBASCLOCK || 319 _clkOrb.messageType == _ssrCorr->COTYPE_BDSCLOCK) { 309 320 310 321 t_clkCorr clkCorr; … … 327 338 // High-Resolution Clocks 328 339 // ---------------------- 329 if ( _clkOrb.messageType == COTYPE_GPSHR ||330 _clkOrb.messageType == COTYPE_GLONASSHR ||331 _clkOrb.messageType == COTYPE_GALILEOHR ||332 _clkOrb.messageType == COTYPE_QZSSHR ||333 _clkOrb.messageType == COTYPE_SBASHR ||334 _clkOrb.messageType == COTYPE_BDSHR) {340 if ( _clkOrb.messageType == _ssrCorr->COTYPE_GPSHR || 341 _clkOrb.messageType == _ssrCorr->COTYPE_GLONASSHR || 342 _clkOrb.messageType == _ssrCorr->COTYPE_GALILEOHR || 343 _clkOrb.messageType == _ssrCorr->COTYPE_QZSSHR || 344 _clkOrb.messageType == _ssrCorr->COTYPE_SBASHR || 345 _clkOrb.messageType == _ssrCorr->COTYPE_BDSHR) { 335 346 t_prn prn(sysCh, _clkOrb.Sat[ii].ID, flag); 336 347 if (_lastClkCorrections.contains(prn)) { … … 390 401 satCodeBias._updateInt = _codeBias.UpdateInterval; 391 402 for (unsigned jj = 0; jj < _codeBias.Sat[ii].NumberOfCodeBiases; jj++) { 392 const CodeBias::BiasSat::CodeBiasEntry& biasEntry = _codeBias.Sat[ii].Biases[jj];403 const SsrCorr::CodeBias::BiasSat::CodeBiasEntry& biasEntry = _codeBias.Sat[ii].Biases[jj]; 393 404 t_frqCodeBias frqCodeBias; 394 frqCodeBias._rnxType2ch.assign( codeTypeToRnxType(sysCh, biasEntry.Type));405 frqCodeBias._rnxType2ch.assign(_ssrCorr->codeTypeToRnxType(sysCh, biasEntry.Type)); 395 406 frqCodeBias._value = biasEntry.Bias; 396 407 if (!frqCodeBias._rnxType2ch.empty()) { … … 447 458 satPhaseBias._yawDegRate = _phaseBias.Sat[ii].YawRate * 180.0 / M_PI; 448 459 for (unsigned jj = 0; jj < _phaseBias.Sat[ii].NumberOfPhaseBiases; jj++) { 449 const PhaseBias::PhaseBiasSat::PhaseBiasEntry& biasEntry = _phaseBias.Sat[ii].Biases[jj];460 const SsrCorr::PhaseBias::PhaseBiasSat::PhaseBiasEntry& biasEntry = _phaseBias.Sat[ii].Biases[jj]; 450 461 t_frqPhaseBias frqPhaseBias; 451 frqPhaseBias._rnxType2ch.assign( codeTypeToRnxType(sysCh, biasEntry.Type));462 frqPhaseBias._rnxType2ch.assign(_ssrCorr->codeTypeToRnxType(sysCh, biasEntry.Type)); 452 463 frqPhaseBias._value = biasEntry.Bias; 453 464 frqPhaseBias._fixIndicator = biasEntry.SignalIntegerIndicator; … … 468 479 _vTecMap[_lastTime]._staID = _staID.toStdString(); 469 480 for (unsigned ii = 0; ii < _vTEC.NumLayers; ii++) { 470 const VTEC::IonoLayers& ionoLayer = _vTEC.Layers[ii];481 const SsrCorr::VTEC::IonoLayers& ionoLayer = _vTEC.Layers[ii]; 471 482 t_vTecLayer layer; 472 483 layer._height = ionoLayer.Height; … … 647 658 } 648 659 else if (epoSecGlo != -1) { 649 #ifdef USE_SSR_RTCM 650 QDate date = dateAndTimeFromGPSweek(currentTime.gpsw(), currentTime.gpssec()).date();651 epoSecGlo = epoSecGlo - 3 * 3600 + gnumleap(date.year(), date.month(), date.day());652 #endif 660 if (_type == e_type::RTCMssr) { 661 QDate date = dateAndTimeFromGPSweek(currentTime.gpsw(), currentTime.gpssec()).date(); 662 epoSecGlo = epoSecGlo - 3 * 3600 + gnumleap(date.year(), date.month(), date.day()); 663 } 653 664 _lastTime.set(currentWeek, epoSecGlo); 654 665 } … … 663 674 } 664 675 else if (epoSecBds != -1) { 665 #ifdef USE_SSR_RTCM 666 epoSecBds += 14.0;667 if (epoSecBds > 604800.0) {668 epoSecBds -= 7.0*24.0*60.0*60.0;669 }670 #endif 676 if (_type == e_type::RTCMssr) { 677 epoSecBds += 14.0; 678 if (epoSecBds > 604800.0) { 679 epoSecBds -= 7.0*24.0*60.0*60.0; 680 } 681 } 671 682 _lastTime.set(currentWeek, epoSecBds); 672 683 } … … 682 693 } 683 694 } 684 685 //686 ////////////////////////////////////////////////////////////////////////////687 string RTCM3coDecoder::codeTypeToRnxType(char system, CodeType type) const {688 if (system == 'G') {689 switch (type) {690 case CODETYPEGPS_L1_CA: return "1C";691 case CODETYPEGPS_L1_P: return "1P";692 case CODETYPEGPS_L1_Z: return "1W";693 694 case CODETYPEGPS_SEMI_CODELESS: return "2D";695 case CODETYPEGPS_L2_CA: return "2C";696 case CODETYPEGPS_L2_P: return "2P";697 case CODETYPEGPS_L2_Z: return "2W";698 699 case CODETYPEGPS_L2C_M: return "2S";700 case CODETYPEGPS_L2C_L: return "2L";701 #ifdef USE_SSR_RTCM702 case CODETYPEGPS_L2C_ML: return "2X";703 #endif704 705 case CODETYPEGPS_L5_I: return "5I";706 case CODETYPEGPS_L5_Q: return "5Q";707 #ifdef USE_SSR_RTCM708 case CODETYPEGPS_L5_IQ: return "5X";709 #endif710 case CODETYPEGPS_L1C_D: return "1S";711 case CODETYPEGPS_L1C_P: return "1L";712 #ifdef USE_SSR_RTCM713 case CODETYPEGPS_L1C_DP: return "1X";714 #endif715 default: return "";716 }717 }718 else if (system == 'R') {719 switch (type) {720 case CODETYPEGLONASS_L1_CA: return "1C";721 case CODETYPEGLONASS_L1_P: return "1P";722 case CODETYPEGLONASS_L2_CA: return "2C";723 case CODETYPEGLONASS_L2_P: return "2P";724 case CODETYPEGLONASS_L1a_OCd: return "4A";725 case CODETYPEGLONASS_L1a_OCp: return "4B";726 #ifdef USE_SSR_RTCM727 case CODETYPEGLONASS_L1a_OCdp: return "4X";728 #endif729 case CODETYPEGLONASS_L2a_CSI: return "6A";730 case CODETYPEGLONASS_L2a_OCp: return "6B";731 #ifdef USE_SSR_RTCM732 case CODETYPEGLONASS_L2a_CSIOCp:return "6X";733 #endif734 case CODETYPEGLONASS_L3_I: return "3I";735 case CODETYPEGLONASS_L3_Q: return "3Q";736 #ifdef USE_SSR_RTCM737 case CODETYPEGLONASS_L3_IQ: return "3X";738 #endif739 default: return "";740 }741 }742 else if (system == 'E') {743 switch (type) {744 case CODETYPEGALILEO_E1_A: return "1A";745 case CODETYPEGALILEO_E1_B: return "1B";746 case CODETYPEGALILEO_E1_C: return "1C";747 #ifdef USE_SSR_RTCM748 case CODETYPEGALILEO_E1_BC: return "1X";749 case CODETYPEGALILEO_E1_ABC: return "1Z";750 #endif751 case CODETYPEGALILEO_E5A_I: return "5I";752 case CODETYPEGALILEO_E5A_Q: return "5Q";753 #ifdef USE_SSR_RTCM754 case CODETYPEGALILEO_E5A_IQ: return "5X";755 #endif756 case CODETYPEGALILEO_E5B_I: return "7I";757 case CODETYPEGALILEO_E5B_Q: return "7Q";758 #ifdef USE_SSR_RTCM759 case CODETYPEGALILEO_E5B_IQ: return "7X";760 761 case CODETYPEGALILEO_E5_I: return "8I";762 case CODETYPEGALILEO_E5_Q: return "8Q";763 case CODETYPEGALILEO_E5_IQ: return "8X";764 #endif765 case CODETYPEGALILEO_E6_A: return "6A";766 case CODETYPEGALILEO_E6_B: return "6B";767 case CODETYPEGALILEO_E6_C: return "6C";768 #ifdef USE_SSR_RTCM769 case CODETYPEGALILEO_E6_BC: return "6X";770 case CODETYPEGALILEO_E6_ABC: return "6Z";771 #endif772 default: return "";773 }774 }775 else if (system == 'J') {776 switch (type) {777 case CODETYPEQZSS_L1_CA: return "1C";778 case CODETYPEQZSS_L1C_D: return "1S";779 case CODETYPEQZSS_L1C_P: return "1L";780 781 case CODETYPEQZSS_L2C_M: return "2S";782 case CODETYPEQZSS_L2C_L: return "2L";783 #ifdef USE_SSR_RTCM784 case CODETYPEQZSS_L2C_ML: return "2X";785 #endif786 case CODETYPEQZSS_L5_I: return "5I";787 case CODETYPEQZSS_L5_Q: return "5Q";788 #ifdef USE_SSR_RTCM789 case CODETYPEQZSS_L5_IQ: return "5X";790 #endif791 case CODETYPEQZSS_L6_D: return "6S";792 case CODETYPEQZSS_L6_P: return "6L";793 #ifdef USE_SSR_RTCM794 case CODETYPEQZSS_L6_DP: return "6X";795 796 case CODETYPEQZSS_L1C_DP: return "1X";797 case CODETYPEQZSS_L1_S: return "1Z";798 799 case CODETYPEQZSS_L5_D: return "5D";800 case CODETYPEQZSS_L5_P: return "5P";801 case CODETYPEQZSS_L5_DP: return "5Z";802 #endif803 804 case CODETYPEQZSS_L6_E: return "6E";805 #ifdef USE_SSR_RTCM806 case CODETYPEQZSS_L6_DE: return "6Z";807 #endif808 default: return "";809 }810 }811 else if (system == 'C') {812 switch (type) {813 case CODETYPE_BDS_B1_I: return "2I";814 case CODETYPE_BDS_B1_Q: return "2Q";815 #ifdef USE_SSR_RTCM816 case CODETYPE_BDS_B1_IQ: return "2X";817 #endif818 case CODETYPE_BDS_B3_I: return "6I";819 case CODETYPE_BDS_B3_Q: return "6Q";820 #ifdef USE_SSR_RTCM821 case CODETYPE_BDS_B3_IQ: return "6X";822 #endif823 case CODETYPE_BDS_B2_I: return "7I";824 case CODETYPE_BDS_B2_Q: return "7Q";825 #ifdef USE_SSR_RTCM826 case CODETYPE_BDS_B2_IQ: return "7X";827 #endif828 case CODETYPE_BDS_B1a_D: return "1D";829 case CODETYPE_BDS_B1a_P: return "1P";830 #ifdef USE_SSR_RTCM831 case CODETYPE_BDS_B1a_DP: return "1X";832 #endif833 case CODETYPE_BDS_B2a_D: return "5D";834 case CODETYPE_BDS_B2a_P: return "5P";835 #ifdef USE_SSR_RTCM836 case CODETYPE_BDS_B2a_DP: return "5X";837 #elif USE_SSR_IGS838 case CODETYPE_BDS_B1_A: return "1A";839 case CODETYPE_BDS_B3_A: return "6A";840 #endif841 default: return "";842 }843 }844 else if (system == 'S') {845 switch (type) {846 case CODETYPE_SBAS_L1_CA: return "1C";847 848 case CODETYPE_SBAS_L5_I: return "5I";849 case CODETYPE_SBAS_L5_Q: return "5Q";850 #ifdef USE_SSR_RTCM851 case CODETYPE_SBAS_L5_IQ: return "5X";852 #endif853 default: return "";854 }855 }856 return "";857 };
Note:
See TracChangeset
for help on using the changeset viewer.