diff --git a/src/algorithms/PVT/adapters/rtklib_pvt.cc b/src/algorithms/PVT/adapters/rtklib_pvt.cc index 9bf6174ab..e03dcad5c 100644 --- a/src/algorithms/PVT/adapters/rtklib_pvt.cc +++ b/src/algorithms/PVT/adapters/rtklib_pvt.cc @@ -412,6 +412,10 @@ Rtklib_Pvt::Rtklib_Pvt(const ConfigurationInterface* configuration, { pvt_output_parameters.type_of_receiver = 107; // GPS L1 C/A + Galileo E6B } + if ((gps_1C_count != 0) && (gps_2S_count == 0) && (gps_L5_count != 0) && (gal_1B_count != 0) && (gal_E5a_count != 0) && (gal_E5b_count == 0) && (gal_E6_count != 0) && (glo_1G_count == 0) && (glo_2G_count == 0) && (bds_B1_count == 0) && (bds_B3_count == 0)) + { + pvt_output_parameters.type_of_receiver = 108; // GPS L1 C/A + Galileo E1B + GPS L5 + Galileo E5a + Galileo E6B + } // BeiDou B1I Receiver if ((gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (gal_E6_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0) && (bds_B1_count != 0) && (bds_B3_count == 0)) { diff --git a/src/algorithms/PVT/gnuradio_blocks/rtklib_pvt_gs.cc b/src/algorithms/PVT/gnuradio_blocks/rtklib_pvt_gs.cc index fc79642ea..8e24687ba 100644 --- a/src/algorithms/PVT/gnuradio_blocks/rtklib_pvt_gs.cc +++ b/src/algorithms/PVT/gnuradio_blocks/rtklib_pvt_gs.cc @@ -434,7 +434,7 @@ rtklib_pvt_gs::rtklib_pvt_gs(uint32_t nchannels, } // Initialize HAS simple printer - d_enable_has_messages = (((d_type_of_rx >= 100) && (d_type_of_rx < 107)) && (conf_.output_enabled)); + d_enable_has_messages = (((d_type_of_rx >= 100) && (d_type_of_rx < 109)) && (conf_.output_enabled)); if (d_enable_has_messages) { d_has_simple_printer = std::make_unique(); diff --git a/src/algorithms/PVT/libs/rinex_printer.cc b/src/algorithms/PVT/libs/rinex_printer.cc index 6efd2de45..7b17a4295 100644 --- a/src/algorithms/PVT/libs/rinex_printer.cc +++ b/src/algorithms/PVT/libs/rinex_printer.cc @@ -724,6 +724,20 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver, cons d_rinex_header_written = true; // do not write header anymore } break; + case 108: // GPS L1 C/A + Galileo E1B + GPS L5 + Galileo E5a + Galileo E6B + if ((galileo_ephemeris_iter != pvt_solver->galileo_ephemeris_map.cend()) and + (gps_ephemeris_iter != pvt_solver->gps_ephemeris_map.cend()) and + (gps_cnav_ephemeris_iter != pvt_solver->gps_cnav_ephemeris_map.cend())) + { + const std::string gal_signal("1B 5X E6"); + const std::string gps_signal("1C L5"); + rinex_obs_header(obsFile, gps_ephemeris_iter->second, gps_cnav_ephemeris_iter->second, galileo_ephemeris_iter->second, rx_time, gps_signal, gal_signal); + rinex_nav_header(navMixFile, pvt_solver->gps_iono, pvt_solver->gps_utc_model, gps_ephemeris_iter->second, pvt_solver->galileo_iono, pvt_solver->galileo_utc_model); + output_navfilename.push_back(navMixfilename); + log_rinex_nav(navMixFile, pvt_solver->gps_ephemeris_map, pvt_solver->galileo_ephemeris_map); + d_rinex_header_written = true; // do not write header anymore + } + break; case 500: // BDS B1I only if (beidou_dnav_ephemeris_iter != pvt_solver->beidou_dnav_ephemeris_map.cend()) { @@ -1237,7 +1251,33 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver, cons } } } - + break; + case 108: // GPS L1 C/A + Galileo E1B + GPS L5 + Galileo E5a + Galileo E6B + if (gps_ephemeris_iter != pvt_solver->gps_ephemeris_map.cend()) + { + if (galileo_ephemeris_iter != pvt_solver->galileo_ephemeris_map.cend()) + { + // we have Galileo ephemeris, maybe from assistance + log_rinex_obs(obsFile, gps_ephemeris_iter->second, galileo_ephemeris_iter->second, rx_time, gnss_observables_map); + if (!d_rinex_header_updated && (pvt_solver->gps_utc_model.A0 != 0)) + { + update_obs_header(obsFile, pvt_solver->gps_utc_model); + update_nav_header(navMixFile, pvt_solver->gps_iono, pvt_solver->gps_utc_model, gps_ephemeris_iter->second, pvt_solver->galileo_iono, pvt_solver->galileo_utc_model); + d_rinex_header_updated = true; + } + } + else + { + // we do not have galileo ephemeris, print only GPS data + log_rinex_obs(obsFile, gps_ephemeris_iter->second, rx_time, gnss_observables_map); + if (!d_rinex_header_updated && (pvt_solver->gps_utc_model.A0 != 0)) + { + update_obs_header(obsFile, pvt_solver->gps_utc_model); + update_nav_header(navFile, pvt_solver->gps_utc_model, pvt_solver->gps_iono, gps_ephemeris_iter->second); + d_rinex_header_updated = true; + } + } + } break; case 500: // BDS B1I only if (beidou_dnav_ephemeris_iter != pvt_solver->beidou_dnav_ephemeris_map.cend()) @@ -1374,6 +1414,16 @@ void Rinex_Printer::log_rinex_nav_gps_nav(int type_of_rx, const std::map> (); // d_has_obs_corr_map["L1 C/A"] = empty_map;