mirror of
				https://github.com/gnss-sdr/gnss-sdr
				synced 2025-10-31 15:23:04 +00:00 
			
		
		
		
	Fixes in RINEX files and RTCM messages related to time
This commit is contained in:
		| @@ -1931,7 +1931,7 @@ int rtklib_pvt_gs::work(int noutput_items, gr_vector_const_void_star& input_item | ||||
|                                                                         { | ||||
|                                                                             std::string gal_signal("1B"); | ||||
|                                                                             rp->rinex_obs_header(rp->obsFile, gps_ephemeris_iter->second, galileo_ephemeris_iter->second, d_rx_time, gal_signal); | ||||
|                                                                             rp->rinex_nav_header(rp->navMixFile, d_pvt_solver->gps_iono, d_pvt_solver->gps_utc_model, d_pvt_solver->galileo_iono, d_pvt_solver->galileo_utc_model); | ||||
|                                                                             rp->rinex_nav_header(rp->navMixFile, d_pvt_solver->gps_iono, d_pvt_solver->gps_utc_model, gps_ephemeris_iter->second, d_pvt_solver->galileo_iono, d_pvt_solver->galileo_utc_model); | ||||
|                                                                             b_rinex_header_written = true;  // do not write header anymore | ||||
|                                                                         } | ||||
|                                                                     break; | ||||
| @@ -1940,7 +1940,7 @@ int rtklib_pvt_gs::work(int noutput_items, gr_vector_const_void_star& input_item | ||||
|                                                                         { | ||||
|                                                                             std::string gal_signal("5X"); | ||||
|                                                                             rp->rinex_obs_header(rp->obsFile, gps_ephemeris_iter->second, galileo_ephemeris_iter->second, d_rx_time, gal_signal); | ||||
|                                                                             rp->rinex_nav_header(rp->navMixFile, d_pvt_solver->gps_iono, d_pvt_solver->gps_utc_model, d_pvt_solver->galileo_iono, d_pvt_solver->galileo_utc_model); | ||||
|                                                                             rp->rinex_nav_header(rp->navMixFile, d_pvt_solver->gps_iono, d_pvt_solver->gps_utc_model, gps_ephemeris_iter->second, d_pvt_solver->galileo_iono, d_pvt_solver->galileo_utc_model); | ||||
|                                                                             b_rinex_header_written = true;  // do not write header anymore | ||||
|                                                                         } | ||||
|                                                                     break; | ||||
| @@ -1949,7 +1949,7 @@ int rtklib_pvt_gs::work(int noutput_items, gr_vector_const_void_star& input_item | ||||
|                                                                         { | ||||
|                                                                             std::string gal_signal("7X"); | ||||
|                                                                             rp->rinex_obs_header(rp->obsFile, gps_ephemeris_iter->second, galileo_ephemeris_iter->second, d_rx_time, gal_signal); | ||||
|                                                                             rp->rinex_nav_header(rp->navMixFile, d_pvt_solver->gps_iono, d_pvt_solver->gps_utc_model, d_pvt_solver->galileo_iono, d_pvt_solver->galileo_utc_model); | ||||
|                                                                             rp->rinex_nav_header(rp->navMixFile, d_pvt_solver->gps_iono, d_pvt_solver->gps_utc_model, gps_ephemeris_iter->second, d_pvt_solver->galileo_iono, d_pvt_solver->galileo_utc_model); | ||||
|                                                                             rp->log_rinex_nav(rp->navMixFile, d_pvt_solver->gps_ephemeris_map, d_pvt_solver->galileo_ephemeris_map); | ||||
|                                                                             b_rinex_header_written = true;  // do not write header anymore | ||||
|                                                                         } | ||||
| @@ -2019,7 +2019,7 @@ int rtklib_pvt_gs::work(int noutput_items, gr_vector_const_void_star& input_item | ||||
|                                                                             rp->rinex_obs_header(rp->obsFile, gps_ephemeris_iter->second, glonass_gnav_ephemeris_iter->second, d_rx_time, glo_signal); | ||||
|                                                                             if (d_rinex_version == 3) | ||||
|                                                                                 { | ||||
|                                                                                     rp->rinex_nav_header(rp->navMixFile, d_pvt_solver->gps_iono, d_pvt_solver->gps_utc_model, d_pvt_solver->glonass_gnav_utc_model, d_pvt_solver->glonass_gnav_almanac); | ||||
|                                                                                     rp->rinex_nav_header(rp->navMixFile, d_pvt_solver->gps_iono, d_pvt_solver->gps_utc_model, gps_ephemeris_iter->second, d_pvt_solver->glonass_gnav_utc_model, d_pvt_solver->glonass_gnav_almanac); | ||||
|                                                                                     rp->log_rinex_nav(rp->navMixFile, d_pvt_solver->gps_ephemeris_map, d_pvt_solver->glonass_gnav_ephemeris_map); | ||||
|                                                                                 } | ||||
|                                                                             if (d_rinex_version == 2) | ||||
| @@ -2060,7 +2060,7 @@ int rtklib_pvt_gs::work(int noutput_items, gr_vector_const_void_star& input_item | ||||
|                                                                             rp->rinex_obs_header(rp->obsFile, gps_ephemeris_iter->second, glonass_gnav_ephemeris_iter->second, d_rx_time, glo_signal); | ||||
|                                                                             if (d_rinex_version == 3) | ||||
|                                                                                 { | ||||
|                                                                                     rp->rinex_nav_header(rp->navMixFile, d_pvt_solver->gps_iono, d_pvt_solver->gps_utc_model, d_pvt_solver->glonass_gnav_utc_model, d_pvt_solver->glonass_gnav_almanac); | ||||
|                                                                                     rp->rinex_nav_header(rp->navMixFile, d_pvt_solver->gps_iono, d_pvt_solver->gps_utc_model, gps_ephemeris_iter->second, d_pvt_solver->glonass_gnav_utc_model, d_pvt_solver->glonass_gnav_almanac); | ||||
|                                                                                     rp->log_rinex_nav(rp->navMixFile, d_pvt_solver->gps_ephemeris_map, d_pvt_solver->glonass_gnav_ephemeris_map); | ||||
|                                                                                 } | ||||
|                                                                             if (d_rinex_version == 2) | ||||
| @@ -2102,7 +2102,7 @@ int rtklib_pvt_gs::work(int noutput_items, gr_vector_const_void_star& input_item | ||||
|                                                                             std::string gal_signal("1B 5X"); | ||||
|                                                                             std::string gps_signal("1C L5"); | ||||
|                                                                             rp->rinex_obs_header(rp->obsFile, gps_ephemeris_iter->second, gps_cnav_ephemeris_iter->second, galileo_ephemeris_iter->second, d_rx_time, gps_signal, gal_signal); | ||||
|                                                                             rp->rinex_nav_header(rp->navMixFile, d_pvt_solver->gps_iono, d_pvt_solver->gps_utc_model, d_pvt_solver->galileo_iono, d_pvt_solver->galileo_utc_model); | ||||
|                                                                             rp->rinex_nav_header(rp->navMixFile, d_pvt_solver->gps_iono, d_pvt_solver->gps_utc_model, gps_ephemeris_iter->second, d_pvt_solver->galileo_iono, d_pvt_solver->galileo_utc_model); | ||||
|                                                                             rp->log_rinex_nav(rp->navMixFile, d_pvt_solver->gps_ephemeris_map, d_pvt_solver->galileo_ephemeris_map); | ||||
|                                                                             b_rinex_header_written = true;  // do not write header anymore | ||||
|                                                                         } | ||||
| @@ -2113,7 +2113,7 @@ int rtklib_pvt_gs::work(int noutput_items, gr_vector_const_void_star& input_item | ||||
|                                                                         { | ||||
|                                                                             std::string gal_signal("1B 5X"); | ||||
|                                                                             rp->rinex_obs_header(rp->obsFile, gps_ephemeris_iter->second, galileo_ephemeris_iter->second, d_rx_time, gal_signal); | ||||
|                                                                             rp->rinex_nav_header(rp->navMixFile, d_pvt_solver->gps_iono, d_pvt_solver->gps_utc_model, d_pvt_solver->galileo_iono, d_pvt_solver->galileo_utc_model); | ||||
|                                                                             rp->rinex_nav_header(rp->navMixFile, d_pvt_solver->gps_iono, d_pvt_solver->gps_utc_model, gps_ephemeris_iter->second, d_pvt_solver->galileo_iono, d_pvt_solver->galileo_utc_model); | ||||
|                                                                             rp->log_rinex_nav(rp->navMixFile, d_pvt_solver->gps_ephemeris_map, d_pvt_solver->galileo_ephemeris_map); | ||||
|                                                                             b_rinex_header_written = true;  // do not write header anymore | ||||
|                                                                         } | ||||
| @@ -2262,12 +2262,12 @@ int rtklib_pvt_gs::work(int noutput_items, gr_vector_const_void_star& input_item | ||||
|                                                                             if ((galileo_ephemeris_iter != d_pvt_solver->galileo_ephemeris_map.cend()) and (gps_ephemeris_iter != d_pvt_solver->gps_ephemeris_map.cend())) | ||||
|                                                                                 { | ||||
|                                                                                     rp->log_rinex_obs(rp->obsFile, gps_ephemeris_iter->second, galileo_ephemeris_iter->second, d_rx_time, gnss_observables_map); | ||||
|                                                                                 } | ||||
|                                                                             if (!b_rinex_header_updated and (d_pvt_solver->gps_utc_model.d_A0 != 0)) | ||||
|                                                                                 { | ||||
|                                                                                     rp->update_obs_header(rp->obsFile, d_pvt_solver->gps_utc_model); | ||||
|                                                                                     rp->update_nav_header(rp->navMixFile, d_pvt_solver->gps_iono, d_pvt_solver->gps_utc_model, d_pvt_solver->galileo_iono, d_pvt_solver->galileo_utc_model); | ||||
|                                                                                     b_rinex_header_updated = true; | ||||
|                                                                                     if (!b_rinex_header_updated and (d_pvt_solver->gps_utc_model.d_A0 != 0)) | ||||
|                                                                                         { | ||||
|                                                                                             rp->update_obs_header(rp->obsFile, d_pvt_solver->gps_utc_model); | ||||
|                                                                                             rp->update_nav_header(rp->navMixFile, d_pvt_solver->gps_iono, d_pvt_solver->gps_utc_model, gps_ephemeris_iter->second, d_pvt_solver->galileo_iono, d_pvt_solver->galileo_utc_model); | ||||
|                                                                                             b_rinex_header_updated = true; | ||||
|                                                                                         } | ||||
|                                                                                 } | ||||
|                                                                             break; | ||||
|                                                                         case 13:  // L5+E5a | ||||
| @@ -2346,12 +2346,12 @@ int rtklib_pvt_gs::work(int noutput_items, gr_vector_const_void_star& input_item | ||||
|                                                                             if ((glonass_gnav_ephemeris_iter != d_pvt_solver->glonass_gnav_ephemeris_map.cend()) and (gps_ephemeris_iter != d_pvt_solver->gps_ephemeris_map.cend())) | ||||
|                                                                                 { | ||||
|                                                                                     rp->log_rinex_obs(rp->obsFile, gps_ephemeris_iter->second, glonass_gnav_ephemeris_iter->second, d_rx_time, gnss_observables_map); | ||||
|                                                                                 } | ||||
|                                                                             if (!b_rinex_header_updated and (d_pvt_solver->gps_utc_model.d_A0 != 0)) | ||||
|                                                                                 { | ||||
|                                                                                     rp->update_obs_header(rp->obsFile, d_pvt_solver->gps_utc_model); | ||||
|                                                                                     rp->update_nav_header(rp->navMixFile, d_pvt_solver->gps_iono, d_pvt_solver->gps_utc_model, d_pvt_solver->glonass_gnav_utc_model, d_pvt_solver->glonass_gnav_almanac); | ||||
|                                                                                     b_rinex_header_updated = true;  // do not write header anymore | ||||
|                                                                                     if (!b_rinex_header_updated and (d_pvt_solver->gps_utc_model.d_A0 != 0)) | ||||
|                                                                                         { | ||||
|                                                                                             rp->update_obs_header(rp->obsFile, d_pvt_solver->gps_utc_model); | ||||
|                                                                                             rp->update_nav_header(rp->navMixFile, d_pvt_solver->gps_iono, d_pvt_solver->gps_utc_model, gps_ephemeris_iter->second, d_pvt_solver->glonass_gnav_utc_model, d_pvt_solver->glonass_gnav_almanac); | ||||
|                                                                                             b_rinex_header_updated = true;  // do not write header anymore | ||||
|                                                                                         } | ||||
|                                                                                 } | ||||
|                                                                             break; | ||||
|                                                                         case 27:  // Galileo E1B + GLONASS L1 C/A | ||||
| @@ -2382,12 +2382,12 @@ int rtklib_pvt_gs::work(int noutput_items, gr_vector_const_void_star& input_item | ||||
|                                                                             if ((glonass_gnav_ephemeris_iter != d_pvt_solver->glonass_gnav_ephemeris_map.cend()) and (gps_ephemeris_iter != d_pvt_solver->gps_ephemeris_map.cend())) | ||||
|                                                                                 { | ||||
|                                                                                     rp->log_rinex_obs(rp->obsFile, gps_ephemeris_iter->second, glonass_gnav_ephemeris_iter->second, d_rx_time, gnss_observables_map); | ||||
|                                                                                 } | ||||
|                                                                             if (!b_rinex_header_updated and (d_pvt_solver->gps_utc_model.d_A0 != 0)) | ||||
|                                                                                 { | ||||
|                                                                                     rp->update_obs_header(rp->obsFile, d_pvt_solver->gps_utc_model); | ||||
|                                                                                     rp->update_nav_header(rp->navMixFile, d_pvt_solver->gps_iono, d_pvt_solver->gps_utc_model, d_pvt_solver->glonass_gnav_utc_model, d_pvt_solver->glonass_gnav_almanac); | ||||
|                                                                                     b_rinex_header_updated = true;  // do not write header anymore | ||||
|                                                                                     if (!b_rinex_header_updated and (d_pvt_solver->gps_utc_model.d_A0 != 0)) | ||||
|                                                                                         { | ||||
|                                                                                             rp->update_obs_header(rp->obsFile, d_pvt_solver->gps_utc_model); | ||||
|                                                                                             rp->update_nav_header(rp->navMixFile, d_pvt_solver->gps_iono, d_pvt_solver->gps_utc_model, gps_ephemeris_iter->second, d_pvt_solver->glonass_gnav_utc_model, d_pvt_solver->glonass_gnav_almanac); | ||||
|                                                                                             b_rinex_header_updated = true;  // do not write header anymore | ||||
|                                                                                         } | ||||
|                                                                                 } | ||||
|                                                                             break; | ||||
|                                                                         case 30:  // Galileo E1B + GLONASS L2 C/A | ||||
| @@ -2418,32 +2418,32 @@ int rtklib_pvt_gs::work(int noutput_items, gr_vector_const_void_star& input_item | ||||
|                                                                             if ((gps_ephemeris_iter != d_pvt_solver->gps_ephemeris_map.cend()) and (gps_cnav_ephemeris_iter != d_pvt_solver->gps_cnav_ephemeris_map.cend()) and (galileo_ephemeris_iter != d_pvt_solver->galileo_ephemeris_map.cend())) | ||||
|                                                                                 { | ||||
|                                                                                     rp->log_rinex_obs(rp->obsFile, gps_ephemeris_iter->second, gps_cnav_ephemeris_iter->second, galileo_ephemeris_iter->second, d_rx_time, gnss_observables_map); | ||||
|                                                                                 } | ||||
|                                                                             if (!b_rinex_header_updated and ((d_pvt_solver->gps_cnav_utc_model.d_A0 != 0) or (d_pvt_solver->gps_utc_model.d_A0 != 0)) and (d_pvt_solver->galileo_utc_model.A0_6 != 0)) | ||||
|                                                                                 { | ||||
|                                                                                     if (d_pvt_solver->gps_cnav_utc_model.d_A0 != 0) | ||||
|                                                                                     if (!b_rinex_header_updated and ((d_pvt_solver->gps_cnav_utc_model.d_A0 != 0) or (d_pvt_solver->gps_utc_model.d_A0 != 0)) and (d_pvt_solver->galileo_utc_model.A0_6 != 0)) | ||||
|                                                                                         { | ||||
|                                                                                             rp->update_obs_header(rp->obsFile, d_pvt_solver->gps_cnav_utc_model); | ||||
|                                                                                             rp->update_nav_header(rp->navMixFile, d_pvt_solver->gps_cnav_utc_model, d_pvt_solver->gps_cnav_iono, d_pvt_solver->galileo_iono, d_pvt_solver->galileo_utc_model); | ||||
|                                                                                             if (d_pvt_solver->gps_cnav_utc_model.d_A0 != 0) | ||||
|                                                                                                 { | ||||
|                                                                                                     rp->update_obs_header(rp->obsFile, d_pvt_solver->gps_cnav_utc_model); | ||||
|                                                                                                     rp->update_nav_header(rp->navMixFile, d_pvt_solver->gps_cnav_utc_model, d_pvt_solver->gps_cnav_iono, d_pvt_solver->galileo_iono, d_pvt_solver->galileo_utc_model); | ||||
|                                                                                                 } | ||||
|                                                                                             else | ||||
|                                                                                                 { | ||||
|                                                                                                     rp->update_obs_header(rp->obsFile, d_pvt_solver->gps_utc_model); | ||||
|                                                                                                     rp->update_nav_header(rp->navMixFile, d_pvt_solver->gps_iono, d_pvt_solver->gps_utc_model, gps_ephemeris_iter->second, d_pvt_solver->galileo_iono, d_pvt_solver->galileo_utc_model); | ||||
|                                                                                                 } | ||||
|                                                                                             b_rinex_header_updated = true;  // do not write header anymore | ||||
|                                                                                         } | ||||
|                                                                                     else | ||||
|                                                                                         { | ||||
|                                                                                             rp->update_obs_header(rp->obsFile, d_pvt_solver->gps_utc_model); | ||||
|                                                                                             rp->update_nav_header(rp->navMixFile, d_pvt_solver->gps_iono, d_pvt_solver->gps_utc_model, d_pvt_solver->galileo_iono, d_pvt_solver->galileo_utc_model); | ||||
|                                                                                         } | ||||
|                                                                                     b_rinex_header_updated = true;  // do not write header anymore | ||||
|                                                                                 } | ||||
|                                                                             break; | ||||
|                                                                         case 33:  // L1+E1+E5a | ||||
|                                                                             if ((gps_ephemeris_iter != d_pvt_solver->gps_ephemeris_map.cend()) and (galileo_ephemeris_iter != d_pvt_solver->galileo_ephemeris_map.cend())) | ||||
|                                                                                 { | ||||
|                                                                                     rp->log_rinex_obs(rp->obsFile, gps_ephemeris_iter->second, galileo_ephemeris_iter->second, d_rx_time, gnss_observables_map); | ||||
|                                                                                 } | ||||
|                                                                             if (!b_rinex_header_updated and (d_pvt_solver->gps_utc_model.d_A0 != 0) and (d_pvt_solver->galileo_utc_model.A0_6 != 0)) | ||||
|                                                                                 { | ||||
|                                                                                     rp->update_obs_header(rp->obsFile, d_pvt_solver->gps_utc_model); | ||||
|                                                                                     rp->update_nav_header(rp->navMixFile, d_pvt_solver->gps_iono, d_pvt_solver->gps_utc_model, d_pvt_solver->galileo_iono, d_pvt_solver->galileo_utc_model); | ||||
|                                                                                     b_rinex_header_updated = true;  // do not write header anymore | ||||
|                                                                                     if (!b_rinex_header_updated and (d_pvt_solver->gps_utc_model.d_A0 != 0) and (d_pvt_solver->galileo_utc_model.A0_6 != 0)) | ||||
|                                                                                         { | ||||
|                                                                                             rp->update_obs_header(rp->obsFile, d_pvt_solver->gps_utc_model); | ||||
|                                                                                             rp->update_nav_header(rp->navMixFile, d_pvt_solver->gps_iono, d_pvt_solver->gps_utc_model, gps_ephemeris_iter->second, d_pvt_solver->galileo_iono, d_pvt_solver->galileo_utc_model); | ||||
|                                                                                             b_rinex_header_updated = true;  // do not write header anymore | ||||
|                                                                                         } | ||||
|                                                                                 } | ||||
|                                                                             break; | ||||
|                                                                         case 50:  // BDS B1I only | ||||
|   | ||||
| @@ -599,7 +599,7 @@ void Rinex_Printer::rinex_nav_header(std::fstream& out, const Glonass_Gnav_Utc_M | ||||
| } | ||||
|  | ||||
|  | ||||
| void Rinex_Printer::rinex_nav_header(std::fstream& out, const Gps_Iono& gps_iono, const Gps_Utc_Model& gps_utc_model, const Glonass_Gnav_Utc_Model& glonass_gnav_utc_model, const Glonass_Gnav_Almanac& glonass_gnav_almanac) | ||||
| void Rinex_Printer::rinex_nav_header(std::fstream& out, const Gps_Iono& gps_iono, const Gps_Utc_Model& gps_utc_model, const Gps_Ephemeris& eph, const Glonass_Gnav_Utc_Model& glonass_gnav_utc_model, const Glonass_Gnav_Almanac& glonass_gnav_almanac) | ||||
| { | ||||
|     if (glonass_gnav_almanac.i_satellite_freq_channel) | ||||
|         { | ||||
| @@ -696,7 +696,28 @@ void Rinex_Printer::rinex_nav_header(std::fstream& out, const Gps_Iono& gps_iono | ||||
|     line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(gps_utc_model.d_A0, 16, 2), 18); | ||||
|     line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(gps_utc_model.d_A1, 15, 2), 16); | ||||
|     line += Rinex_Printer::rightJustify(std::to_string(gps_utc_model.d_t_OT), 7); | ||||
|     line += Rinex_Printer::rightJustify(std::to_string(gps_utc_model.i_WN_T + 1024), 5);  // valid until 2019 | ||||
|     if (eph.i_GPS_week < 512) | ||||
|         { | ||||
|             if (gps_utc_model.i_WN_T == 0) | ||||
|                 { | ||||
|                     line += Rinex_Printer::rightJustify(std::to_string(eph.i_GPS_week + 2048), 5);  // valid from 2019 to 2029 | ||||
|                 } | ||||
|             else | ||||
|                 { | ||||
|                     line += Rinex_Printer::rightJustify(std::to_string(gps_utc_model.i_WN_T + (eph.i_GPS_week / 256) * 256 + 2048), 5);  // valid from 2019 to 2029 | ||||
|                 } | ||||
|         } | ||||
|     else | ||||
|         { | ||||
|             if (gps_utc_model.i_WN_T == 0) | ||||
|                 { | ||||
|                     line += Rinex_Printer::rightJustify(std::to_string(eph.i_GPS_week + 1024), 5);  // valid from 2009 to 2019 | ||||
|                 } | ||||
|             else | ||||
|                 { | ||||
|                     line += Rinex_Printer::rightJustify(std::to_string(gps_utc_model.i_WN_T + (eph.i_GPS_week / 256) * 256 + 1024), 5);  // valid from 2009 to 2019 | ||||
|                 } | ||||
|         } | ||||
|     line += std::string(10, ' '); | ||||
|     line += Rinex_Printer::leftJustify("TIME SYSTEM CORR", 20); | ||||
|     Rinex_Printer::lengthCheck(line); | ||||
| @@ -820,7 +841,7 @@ void Rinex_Printer::rinex_nav_header(std::fstream& out, const Gps_CNAV_Iono& gps | ||||
|     line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(gps_utc_model.d_A0, 16, 2), 18); | ||||
|     line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(gps_utc_model.d_A1, 15, 2), 16); | ||||
|     line += Rinex_Printer::rightJustify(std::to_string(gps_utc_model.d_t_OT), 7); | ||||
|     line += Rinex_Printer::rightJustify(std::to_string(gps_utc_model.i_WN_T + 1024), 5);  // valid until 2019 | ||||
|     line += Rinex_Printer::rightJustify(std::to_string(gps_utc_model.i_WN_T), 5); | ||||
|     line += std::string(10, ' '); | ||||
|     line += Rinex_Printer::leftJustify("TIME SYSTEM CORR", 20); | ||||
|     Rinex_Printer::lengthCheck(line); | ||||
| @@ -1146,7 +1167,7 @@ void Rinex_Printer::rinex_nav_header(std::fstream& out, const Gps_CNAV_Iono& ion | ||||
|     line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(utc_model.d_A0, 16, 2), 18); | ||||
|     line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(utc_model.d_A1, 15, 2), 16); | ||||
|     line += Rinex_Printer::rightJustify(std::to_string(utc_model.d_t_OT), 7); | ||||
|     line += Rinex_Printer::rightJustify(std::to_string(utc_model.i_WN_T + 1024), 5);  // valid until 2019 | ||||
|     line += Rinex_Printer::rightJustify(std::to_string(utc_model.i_WN_T), 5); | ||||
|     /*  if ( SBAS ) | ||||
|     { | ||||
|       line += string(1, ' '); | ||||
| @@ -1288,7 +1309,7 @@ void Rinex_Printer::rinex_nav_header(std::fstream& out, const Gps_CNAV_Iono& ion | ||||
|     line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(utc_model.d_A0, 16, 2), 18); | ||||
|     line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(utc_model.d_A1, 15, 2), 16); | ||||
|     line += Rinex_Printer::rightJustify(std::to_string(utc_model.d_t_OT), 7); | ||||
|     line += Rinex_Printer::rightJustify(std::to_string(utc_model.i_WN_T + 1024), 5);  // valid until 2019 | ||||
|     line += Rinex_Printer::rightJustify(std::to_string(utc_model.i_WN_T), 5); | ||||
|     line += std::string(10, ' '); | ||||
|     line += Rinex_Printer::leftJustify("TIME SYSTEM CORR", 20); | ||||
|     Rinex_Printer::lengthCheck(line); | ||||
| @@ -1534,7 +1555,7 @@ void Rinex_Printer::rinex_nav_header(std::fstream& out, const Gps_Iono& iono, co | ||||
| } | ||||
|  | ||||
|  | ||||
| void Rinex_Printer::rinex_nav_header(std::fstream& out, const Gps_Iono& gps_iono, const Gps_Utc_Model& gps_utc_model, const Galileo_Iono& galileo_iono, const Galileo_Utc_Model& galileo_utc_model) | ||||
| void Rinex_Printer::rinex_nav_header(std::fstream& out, const Gps_Iono& gps_iono, const Gps_Utc_Model& gps_utc_model, const Gps_Ephemeris& eph, const Galileo_Iono& galileo_iono, const Galileo_Utc_Model& galileo_utc_model) | ||||
| { | ||||
|     std::string line; | ||||
|  | ||||
| @@ -1638,7 +1659,28 @@ void Rinex_Printer::rinex_nav_header(std::fstream& out, const Gps_Iono& gps_iono | ||||
|     line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(gps_utc_model.d_A0, 16, 2), 18); | ||||
|     line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(gps_utc_model.d_A1, 15, 2), 16); | ||||
|     line += Rinex_Printer::rightJustify(std::to_string(gps_utc_model.d_t_OT), 7); | ||||
|     line += Rinex_Printer::rightJustify(std::to_string(gps_utc_model.i_WN_T + 1024), 5);  // valid until 2019 | ||||
|     if (eph.i_GPS_week < 512) | ||||
|         { | ||||
|             if (gps_utc_model.i_WN_T == 0) | ||||
|                 { | ||||
|                     line += Rinex_Printer::rightJustify(std::to_string(eph.i_GPS_week + 2048), 5);  // valid from 2019 to 2029 | ||||
|                 } | ||||
|             else | ||||
|                 { | ||||
|                     line += Rinex_Printer::rightJustify(std::to_string(gps_utc_model.i_WN_T + (eph.i_GPS_week / 256) * 256 + 2048), 5);  // valid from 2019 to 2029 | ||||
|                 } | ||||
|         } | ||||
|     else | ||||
|         { | ||||
|             if (gps_utc_model.i_WN_T == 0) | ||||
|                 { | ||||
|                     line += Rinex_Printer::rightJustify(std::to_string(eph.i_GPS_week + 1024), 5);  // valid from 2009 to 2019 | ||||
|                 } | ||||
|             else | ||||
|                 { | ||||
|                     line += Rinex_Printer::rightJustify(std::to_string(gps_utc_model.i_WN_T + (eph.i_GPS_week / 256) * 256 + 1024), 5);  // valid from 2009 to 2019 | ||||
|                 } | ||||
|         } | ||||
|     line += std::string(10, ' '); | ||||
|     line += Rinex_Printer::leftJustify("TIME SYSTEM CORR", 20); | ||||
|     Rinex_Printer::lengthCheck(line); | ||||
| @@ -2119,7 +2161,6 @@ void Rinex_Printer::update_nav_header(std::fstream& out, const Gps_Utc_Model& ut | ||||
|                                     line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(utc_model.d_A0, 18, 2), 19); | ||||
|                                     line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(utc_model.d_A1, 18, 2), 19); | ||||
|                                     line_aux += Rinex_Printer::rightJustify(std::to_string(utc_model.d_t_OT), 9); | ||||
|  | ||||
|                                     if (eph.i_GPS_week < 512) | ||||
|                                         { | ||||
|                                             line_aux += Rinex_Printer::rightJustify(std::to_string(utc_model.i_WN_T + (eph.i_GPS_week / 256) * 256 + 2048), 9);  // valid from 2019 to 2029 | ||||
| @@ -2285,7 +2326,7 @@ void Rinex_Printer::update_nav_header(std::fstream& out, const Gps_CNAV_Utc_Mode | ||||
|                             line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(utc_model.d_A0, 16, 2), 18); | ||||
|                             line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(utc_model.d_A1, 15, 2), 16); | ||||
|                             line_aux += Rinex_Printer::rightJustify(std::to_string(utc_model.d_t_OT), 7); | ||||
|                             line_aux += Rinex_Printer::rightJustify(std::to_string(utc_model.i_WN_T + 1024), 5);  // valid until 2019 | ||||
|                             line_aux += Rinex_Printer::rightJustify(std::to_string(utc_model.i_WN_T), 5); | ||||
|                             line_aux += std::string(10, ' '); | ||||
|                             line_aux += Rinex_Printer::leftJustify("TIME SYSTEM CORR", 20); | ||||
|                             data.push_back(line_aux); | ||||
| @@ -2415,7 +2456,7 @@ void Rinex_Printer::update_nav_header(std::fstream& out, const Gps_CNAV_Utc_Mode | ||||
|                             line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(utc_model.d_A0, 16, 2), 18); | ||||
|                             line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(utc_model.d_A1, 15, 2), 16); | ||||
|                             line_aux += Rinex_Printer::rightJustify(std::to_string(utc_model.d_t_OT), 7); | ||||
|                             line_aux += Rinex_Printer::rightJustify(std::to_string(utc_model.i_WN_T + 1024), 5);  // valid until 2019 | ||||
|                             line_aux += Rinex_Printer::rightJustify(std::to_string(utc_model.i_WN_T), 5); | ||||
|                             line_aux += std::string(10, ' '); | ||||
|                             line_aux += Rinex_Printer::leftJustify("TIME SYSTEM CORR", 20); | ||||
|                             data.push_back(line_aux); | ||||
| @@ -2459,7 +2500,7 @@ void Rinex_Printer::update_nav_header(std::fstream& out, const Gps_CNAV_Utc_Mode | ||||
| } | ||||
|  | ||||
|  | ||||
| void Rinex_Printer::update_nav_header(std::fstream& out, const Gps_Iono& gps_iono, const Gps_Utc_Model& gps_utc_model, const Galileo_Iono& galileo_iono, const Galileo_Utc_Model& galileo_utc_model) | ||||
| void Rinex_Printer::update_nav_header(std::fstream& out, const Gps_Iono& gps_iono, const Gps_Utc_Model& gps_utc_model, const Gps_Ephemeris& eph, const Galileo_Iono& galileo_iono, const Galileo_Utc_Model& galileo_utc_model) | ||||
| { | ||||
|     std::vector<std::string> data; | ||||
|     std::string line_aux; | ||||
| @@ -2522,7 +2563,14 @@ void Rinex_Printer::update_nav_header(std::fstream& out, const Gps_Iono& gps_ion | ||||
|                             line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(gps_utc_model.d_A0, 16, 2), 18); | ||||
|                             line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(gps_utc_model.d_A1, 15, 2), 16); | ||||
|                             line_aux += Rinex_Printer::rightJustify(std::to_string(gps_utc_model.d_t_OT), 7); | ||||
|                             line_aux += Rinex_Printer::rightJustify(std::to_string(gps_utc_model.i_WN_T + 1024), 5);  // valid until 2019 | ||||
|                             if (eph.i_GPS_week < 512) | ||||
|                                 { | ||||
|                                     line_aux += Rinex_Printer::rightJustify(std::to_string(gps_utc_model.i_WN_T + (eph.i_GPS_week / 256) * 256 + 2048), 5);  // valid from 2019 to 2029 | ||||
|                                 } | ||||
|                             else | ||||
|                                 { | ||||
|                                     line_aux += Rinex_Printer::rightJustify(std::to_string(gps_utc_model.i_WN_T + (eph.i_GPS_week / 256) * 256 + 1024), 5);  // valid from 2009 to 2019 | ||||
|                                 } | ||||
|                             line_aux += std::string(10, ' '); | ||||
|                             line_aux += Rinex_Printer::leftJustify("TIME SYSTEM CORR", 20); | ||||
|                             data.push_back(line_aux); | ||||
| @@ -2589,7 +2637,7 @@ void Rinex_Printer::update_nav_header(std::fstream& out, const Gps_Iono& gps_ion | ||||
| } | ||||
|  | ||||
|  | ||||
| void Rinex_Printer::update_nav_header(std::fstream& out, const Gps_Iono& gps_iono, const Gps_Utc_Model& gps_utc_model, const Glonass_Gnav_Utc_Model& glonass_gnav_utc_model, const Glonass_Gnav_Almanac& glonass_gnav_almanac) | ||||
| void Rinex_Printer::update_nav_header(std::fstream& out, const Gps_Iono& gps_iono, const Gps_Utc_Model& gps_utc_model, const Gps_Ephemeris& eph, const Glonass_Gnav_Utc_Model& glonass_gnav_utc_model, const Glonass_Gnav_Almanac& glonass_gnav_almanac) | ||||
| { | ||||
|     if (glonass_gnav_almanac.i_satellite_freq_channel) | ||||
|         { | ||||
| @@ -2630,7 +2678,14 @@ void Rinex_Printer::update_nav_header(std::fstream& out, const Gps_Iono& gps_ion | ||||
|                             line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(gps_utc_model.d_A0, 16, 2), 18); | ||||
|                             line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(gps_utc_model.d_A1, 15, 2), 16); | ||||
|                             line_aux += Rinex_Printer::rightJustify(std::to_string(gps_utc_model.d_t_OT), 7); | ||||
|                             line_aux += Rinex_Printer::rightJustify(std::to_string(gps_utc_model.i_WN_T + 1024), 5);  // valid until 2019 | ||||
|                             if (eph.i_GPS_week < 512) | ||||
|                                 { | ||||
|                                     line_aux += Rinex_Printer::rightJustify(std::to_string(gps_utc_model.i_WN_T + (eph.i_GPS_week / 256) * 256 + 2048), 5);  // valid from 2019 to 2029 | ||||
|                                 } | ||||
|                             else | ||||
|                                 { | ||||
|                                     line_aux += Rinex_Printer::rightJustify(std::to_string(gps_utc_model.i_WN_T + (eph.i_GPS_week / 256) * 256 + 1024), 5);  // valid from 2009 to 2019 | ||||
|                                 } | ||||
|                             line_aux += std::string(10, ' '); | ||||
|                             line_aux += Rinex_Printer::leftJustify("TIME SYSTEM CORR", 20); | ||||
|                             data.push_back(line_aux); | ||||
| @@ -2738,7 +2793,7 @@ void Rinex_Printer::update_nav_header(std::fstream& out, const Gps_CNAV_Iono& gp | ||||
|                             line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(gps_utc_model.d_A0, 16, 2), 18); | ||||
|                             line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(gps_utc_model.d_A1, 15, 2), 16); | ||||
|                             line_aux += Rinex_Printer::rightJustify(std::to_string(gps_utc_model.d_t_OT), 7); | ||||
|                             line_aux += Rinex_Printer::rightJustify(std::to_string(gps_utc_model.i_WN_T + 1024), 5);  // valid until 2019 | ||||
|                             line_aux += Rinex_Printer::rightJustify(std::to_string(gps_utc_model.i_WN_T), 5); | ||||
|                             line_aux += std::string(10, ' '); | ||||
|                             line_aux += Rinex_Printer::leftJustify("TIME SYSTEM CORR", 20); | ||||
|                             data.push_back(line_aux); | ||||
| @@ -2929,7 +2984,7 @@ void Rinex_Printer::update_nav_header(std::fstream& out, const Beidou_Dnav_Utc_M | ||||
|  | ||||
|                     if (line_str.find("BDSA", 0) != std::string::npos) | ||||
|                         { | ||||
|                             line_aux += std::string("GPSA"); | ||||
|                             line_aux += std::string("BDSA"); | ||||
|                             line_aux += std::string(1, ' '); | ||||
|                             line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.d_alpha0, 10, 2), 12); | ||||
|                             line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.d_alpha1, 10, 2), 12); | ||||
| @@ -2941,7 +2996,7 @@ void Rinex_Printer::update_nav_header(std::fstream& out, const Beidou_Dnav_Utc_M | ||||
|                         } | ||||
|                     else if (line_str.find("BDSB", 0) != std::string::npos) | ||||
|                         { | ||||
|                             line_aux += std::string("GPSB"); | ||||
|                             line_aux += std::string("BDSB"); | ||||
|                             line_aux += std::string(1, ' '); | ||||
|                             line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.d_beta0, 10, 2), 12); | ||||
|                             line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.d_beta1, 10, 2), 12); | ||||
| @@ -2953,7 +3008,7 @@ void Rinex_Printer::update_nav_header(std::fstream& out, const Beidou_Dnav_Utc_M | ||||
|                         } | ||||
|                     else if (line_str.find("BDUT", 0) != std::string::npos) | ||||
|                         { | ||||
|                             line_aux += std::string("GPUT"); | ||||
|                             line_aux += std::string("BDUT"); | ||||
|                             line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(utc_model.d_A0_UTC, 16, 2), 18); | ||||
|                             line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(utc_model.d_A1_UTC, 15, 2), 16); | ||||
|                             line_aux += std::string(22, ' '); | ||||
| @@ -3250,7 +3305,7 @@ void Rinex_Printer::log_rinex_nav(std::fstream& out, const std::map<int32_t, Gps | ||||
|             // This week goes with Toe. This is different from the GPS week in the original satellite message! | ||||
|             if (gps_ephemeris_iter->second.d_Toe < 7200.0) | ||||
|                 { | ||||
|                     GPS_week_continuous_number += 1; | ||||
|                     GPS_week_continuous_number += 1.0; | ||||
|                 } | ||||
|             line += Rinex_Printer::doub2for(GPS_week_continuous_number, 18, 2); | ||||
|             line += std::string(1, ' '); | ||||
| @@ -3499,7 +3554,13 @@ void Rinex_Printer::log_rinex_nav(std::fstream& out, const std::map<int32_t, Gps | ||||
|             double my_zero = 0.0; | ||||
|             line += Rinex_Printer::doub2for(my_zero, 18, 2); | ||||
|             line += std::string(1, ' '); | ||||
|             auto GPS_week_continuous_number = static_cast<double>(gps_ephemeris_iter->second.i_GPS_week + 1024);  // valid until April 7, 2019 (check http://www.colorado.edu/geography/gcraft/notes/gps/gpseow.htm) | ||||
|             auto GPS_week_continuous_number = static_cast<double>(gps_ephemeris_iter->second.i_GPS_week); | ||||
|             // This week goes with Toe. This is different from the GPS week in the original satellite message! | ||||
|             if (gps_ephemeris_iter->second.d_Toe1 < 7200.0) | ||||
|                 { | ||||
|                     GPS_week_continuous_number += 1.0; | ||||
|                 } | ||||
|             line += Rinex_Printer::doub2for(GPS_week_continuous_number, 18, 2); | ||||
|             line += Rinex_Printer::doub2for(GPS_week_continuous_number, 18, 2); | ||||
|             line += std::string(1, ' '); | ||||
|             line += Rinex_Printer::doub2for(my_zero, 18, 2); | ||||
| @@ -3525,7 +3586,7 @@ void Rinex_Printer::log_rinex_nav(std::fstream& out, const std::map<int32_t, Gps | ||||
|             line += std::string(5, ' '); | ||||
|             line += Rinex_Printer::doub2for(gps_ephemeris_iter->second.d_TOW, 18, 2); | ||||
|             line += std::string(1, ' '); | ||||
|             double curve_fit_interval = 3;  /// ?? Not defined in CNAV | ||||
|             double curve_fit_interval = 0.0;  /// ?? Not defined in CNAV | ||||
|             line += Rinex_Printer::doub2for(curve_fit_interval, 18, 2); | ||||
|             line += std::string(1, ' '); | ||||
|             line += std::string(18, ' ');  // spare | ||||
| @@ -11220,18 +11281,9 @@ boost::posix_time::ptime Rinex_Printer::compute_GPS_time(const Gps_CNAV_Ephemeri | ||||
|     // (see Section 3 in http://igscb.jpl.nasa.gov/igscb/data/format/rinex211.txt) | ||||
|     // (see Pag. 17 in http://igscb.jpl.nasa.gov/igscb/data/format/rinex300.pdf) | ||||
|     // --??? No time correction here, since it will be done in the RINEX processor | ||||
|     const double gps_t = obs_time; | ||||
|     boost::posix_time::time_duration t = boost::posix_time::milliseconds(static_cast<int64_t>((gps_t + 604800 * static_cast<double>(eph.i_GPS_week % 1024)) * 1000)); | ||||
|     if (eph.i_GPS_week < 512) | ||||
|         { | ||||
|             boost::posix_time::ptime p_time(boost::gregorian::date(2019, 4, 7), t); | ||||
|             return p_time; | ||||
|         } | ||||
|     else | ||||
|         { | ||||
|             boost::posix_time::ptime p_time(boost::gregorian::date(1999, 8, 22), t); | ||||
|             return p_time; | ||||
|         } | ||||
|     boost::posix_time::time_duration t = boost::posix_time::milliseconds(static_cast<int64_t>((obs_time + 604800 * static_cast<double>(eph.i_GPS_week % 1024)) * 1000)); | ||||
|     boost::posix_time::ptime p_time(boost::gregorian::date(1999, 8, 22), t); | ||||
|     return p_time; | ||||
| } | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -122,7 +122,7 @@ public: | ||||
|     /*! | ||||
|      *  \brief Generates the Mixed (GPS/Galileo) Navigation Data header | ||||
|      */ | ||||
|     void rinex_nav_header(std::fstream& out, const Gps_Iono& gps_iono, const Gps_Utc_Model& gps_utc_model, const Galileo_Iono& galileo_iono, const Galileo_Utc_Model& galileo_utc_model); | ||||
|     void rinex_nav_header(std::fstream& out, const Gps_Iono& gps_iono, const Gps_Utc_Model& gps_utc_model, const Gps_Ephemeris& eph, const Galileo_Iono& galileo_iono, const Galileo_Utc_Model& galileo_utc_model); | ||||
|  | ||||
|     /*! | ||||
|      *  \brief Generates the Mixed (GPS CNAV/Galileo) Navigation Data header | ||||
| @@ -142,7 +142,7 @@ public: | ||||
|     /*! | ||||
|      *  \brief Generates the Mixed (GPS L1 C/A/GLONASS L1, L2) Navigation Data header | ||||
|      */ | ||||
|     void rinex_nav_header(std::fstream& out, const Gps_Iono& gps_iono, const Gps_Utc_Model& gps_utc_model, const Glonass_Gnav_Utc_Model& glonass_gnav_utc_model, const Glonass_Gnav_Almanac& glonass_gnav_almanac); | ||||
|      void rinex_nav_header(std::fstream& out, const Gps_Iono& gps_iono, const Gps_Utc_Model& gps_utc_model, const Gps_Ephemeris& eph, const Glonass_Gnav_Utc_Model& glonass_gnav_utc_model, const Glonass_Gnav_Almanac& glonass_gnav_almanac); | ||||
|  | ||||
|     /*! | ||||
|      *  \brief Generates the Mixed (GPS L2C C/A/GLONASS L1, L2) Navigation Data header | ||||
| @@ -386,7 +386,7 @@ public: | ||||
|  | ||||
|     void update_nav_header(std::fstream& out, const Gps_CNAV_Utc_Model& utc_model, const Gps_CNAV_Iono& iono); | ||||
|  | ||||
|     void update_nav_header(std::fstream& out, const Gps_Iono& gps_iono, const Gps_Utc_Model& gps_utc_model, const Galileo_Iono& galileo_iono, const Galileo_Utc_Model& galileo_utc_model); | ||||
|     void update_nav_header(std::fstream& out, const Gps_Iono& gps_iono, const Gps_Utc_Model& gps_utc_model, const Gps_Ephemeris& eph, const Galileo_Iono& galileo_iono, const Galileo_Utc_Model& galileo_utc_model); | ||||
|  | ||||
|     void update_nav_header(std::fstream& out, const Gps_CNAV_Utc_Model& utc_model, const Gps_CNAV_Iono& iono, const Galileo_Iono& galileo_iono, const Galileo_Utc_Model& galileo_utc_model); | ||||
|  | ||||
| @@ -394,7 +394,7 @@ public: | ||||
|  | ||||
|     void update_nav_header(std::fstream& out, const Glonass_Gnav_Utc_Model& glonass_gnav_utc_model, const Glonass_Gnav_Almanac& glonass_gnav_almanac); | ||||
|  | ||||
|     void update_nav_header(std::fstream& out, const Gps_Iono& gps_iono, const Gps_Utc_Model& gps_utc, const Glonass_Gnav_Utc_Model& glonass_gnav_utc_model, const Glonass_Gnav_Almanac& glonass_gnav_almanac); | ||||
|     void update_nav_header(std::fstream& out, const Gps_Iono& gps_iono, const Gps_Utc_Model& gps_utc, const Gps_Ephemeris& eph, const Glonass_Gnav_Utc_Model& glonass_gnav_utc_model, const Glonass_Gnav_Almanac& glonass_gnav_almanac); | ||||
|  | ||||
|     void update_nav_header(std::fstream& out, const Gps_CNAV_Iono& gps_iono, const Gps_CNAV_Utc_Model& gps_utc_model, const Glonass_Gnav_Utc_Model& glonass_gnav_utc_model, const Glonass_Gnav_Almanac& glonass_gnav_almanac); | ||||
|  | ||||
|   | ||||
| @@ -3401,7 +3401,7 @@ std::map<std::string, int> Rtcm::galileo_signal_map = [] { | ||||
| boost::posix_time::ptime Rtcm::compute_GPS_time(const Gps_Ephemeris& eph, double obs_time) const | ||||
| { | ||||
|     const double gps_t = obs_time; | ||||
|     boost::posix_time::time_duration t = boost::posix_time::milliseconds(static_cast<long>((gps_t + 604800 * static_cast<double>(eph.i_GPS_week % 1024)) * 1000));  // NOLINT(google-runtime-int) | ||||
|     boost::posix_time::time_duration t = boost::posix_time::milliseconds(static_cast<long>((gps_t + 604800 * static_cast<double>(eph.i_GPS_week)) * 1000));  // NOLINT(google-runtime-int) | ||||
|  | ||||
|     if (eph.i_GPS_week < 512) | ||||
|         { | ||||
| @@ -3417,14 +3417,7 @@ boost::posix_time::ptime Rtcm::compute_GPS_time(const Gps_Ephemeris& eph, double | ||||
| boost::posix_time::ptime Rtcm::compute_GPS_time(const Gps_CNAV_Ephemeris& eph, double obs_time) const | ||||
| { | ||||
|     const double gps_t = obs_time; | ||||
|     boost::posix_time::time_duration t = boost::posix_time::milliseconds(static_cast<long>((gps_t + 604800 * static_cast<double>(eph.i_GPS_week % 1024)) * 1000));  // NOLINT(google-runtime-int) | ||||
|  | ||||
|     if (eph.i_GPS_week < 512) | ||||
|         { | ||||
|             boost::posix_time::ptime p_time(boost::gregorian::date(2019, 4, 7), t); | ||||
|             return p_time; | ||||
|         } | ||||
|  | ||||
|     boost::posix_time::time_duration t = boost::posix_time::milliseconds(static_cast<long>((gps_t + 604800 * static_cast<double>(eph.i_GPS_week)) * 1000));  // NOLINT(google-runtime-int) | ||||
|     boost::posix_time::ptime p_time(boost::gregorian::date(1999, 8, 22), t); | ||||
|     return p_time; | ||||
| } | ||||
| @@ -4226,9 +4219,18 @@ int32_t Rtcm::set_DF050(const Gnss_Synchro& gnss_synchro) | ||||
| int32_t Rtcm::set_DF051(const Gps_Ephemeris& gps_eph, double obs_time) | ||||
| { | ||||
|     const double gps_t = obs_time; | ||||
|     boost::posix_time::time_duration t = boost::posix_time::milliseconds(static_cast<int64_t>((gps_t + 604800 * static_cast<double>(gps_eph.i_GPS_week % 1024)) * 1000)); | ||||
|     boost::posix_time::ptime p_time(boost::gregorian::date(1999, 8, 22), t); | ||||
|     std::string now_ptime = to_iso_string(p_time); | ||||
|     boost::posix_time::time_duration t = boost::posix_time::milliseconds(static_cast<int64_t>((gps_t + 604800 * static_cast<double>(gps_eph.i_GPS_week)) * 1000)); | ||||
|     std::string now_ptime; | ||||
|     if (gps_eph.i_GPS_week < 512) | ||||
|         { | ||||
|             boost::posix_time::ptime p_time(boost::gregorian::date(2019, 4, 7), t); | ||||
|             now_ptime = to_iso_string(p_time); | ||||
|         } | ||||
|     else | ||||
|         { | ||||
|             boost::posix_time::ptime p_time(boost::gregorian::date(1999, 8, 22), t); | ||||
|             now_ptime = to_iso_string(p_time); | ||||
|         } | ||||
|     std::string today_ptime = now_ptime.substr(0, 8); | ||||
|     boost::gregorian::date d(boost::gregorian::from_undelimited_string(today_ptime)); | ||||
|     uint32_t mjd = d.modjulian_day(); | ||||
| @@ -4240,9 +4242,18 @@ int32_t Rtcm::set_DF051(const Gps_Ephemeris& gps_eph, double obs_time) | ||||
| int32_t Rtcm::set_DF052(const Gps_Ephemeris& gps_eph, double obs_time) | ||||
| { | ||||
|     const double gps_t = obs_time; | ||||
|     boost::posix_time::time_duration t = boost::posix_time::milliseconds(static_cast<int64_t>((gps_t + 604800 * static_cast<double>(gps_eph.i_GPS_week % 1024)) * 1000)); | ||||
|     boost::posix_time::ptime p_time(boost::gregorian::date(1999, 8, 22), t); | ||||
|     std::string now_ptime = to_iso_string(p_time); | ||||
|     boost::posix_time::time_duration t = boost::posix_time::milliseconds(static_cast<int64_t>((gps_t + 604800 * static_cast<double>(gps_eph.i_GPS_week)) * 1000)); | ||||
|     std::string now_ptime; | ||||
|     if (gps_eph.i_GPS_week < 512) | ||||
|         { | ||||
|             boost::posix_time::ptime p_time(boost::gregorian::date(2019, 4, 7), t); | ||||
|             now_ptime = to_iso_string(p_time); | ||||
|         } | ||||
|     else | ||||
|         { | ||||
|             boost::posix_time::ptime p_time(boost::gregorian::date(1999, 8, 22), t); | ||||
|             now_ptime = to_iso_string(p_time); | ||||
|         } | ||||
|     std::string hours = now_ptime.substr(9, 2); | ||||
|     std::string minutes = now_ptime.substr(11, 2); | ||||
|     std::string seconds = now_ptime.substr(13, 8); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Carles Fernandez
					Carles Fernandez