From b674c0e243308d7884d650b2e3f3ec46d895a422 Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Fri, 13 Sep 2019 16:30:00 +0200 Subject: [PATCH] Write RINEX files for triple-band, dual-system receiver --- src/algorithms/PVT/adapters/rtklib_pvt.cc | 8 +++++ .../PVT/gnuradio_blocks/rtklib_pvt_gs.cc | 34 +++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/src/algorithms/PVT/adapters/rtklib_pvt.cc b/src/algorithms/PVT/adapters/rtklib_pvt.cc index 603dd3b6a..b507b017d 100644 --- a/src/algorithms/PVT/adapters/rtklib_pvt.cc +++ b/src/algorithms/PVT/adapters/rtklib_pvt.cc @@ -380,6 +380,14 @@ Rtklib_Pvt::Rtklib_Pvt(ConfigurationInterface* configuration, { pvt_output_parameters.type_of_receiver = 603; // Beidou B3I + GPS L2C + GLONASS L2 C/A } + 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) && (glo_1G_count == 0) && (glo_2G_count == 0) && (bds_B1_count == 0) && (bds_B3_count == 0)) + { + pvt_output_parameters.type_of_receiver = 1000; // GPS L1 + GPS L2C + GPS L5 + } + 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) && (glo_1G_count == 0) && (glo_2G_count == 0) && (bds_B1_count == 0) && (bds_B3_count == 0)) + { + pvt_output_parameters.type_of_receiver = 1001; // GPS L1 + Galileo E1B + GPS L2C + GPS L5 + Galileo E5a + } // RTKLIB PVT solver options // Settings 1 diff --git a/src/algorithms/PVT/gnuradio_blocks/rtklib_pvt_gs.cc b/src/algorithms/PVT/gnuradio_blocks/rtklib_pvt_gs.cc index aeb6734e4..5603b4a0f 100644 --- a/src/algorithms/PVT/gnuradio_blocks/rtklib_pvt_gs.cc +++ b/src/algorithms/PVT/gnuradio_blocks/rtklib_pvt_gs.cc @@ -1107,6 +1107,9 @@ void rtklib_pvt_gs::msg_handler_telemetry(const pmt::pmt_t& msg) case 33: // L1+E1+E5a rp->log_rinex_nav(rp->navMixFile, new_eph, new_gal_eph); break; + case 1001: // L1+E1+L2+L5+E5a + rp->log_rinex_nav(rp->navMixFile, new_eph, new_gal_eph); + break; default: break; } @@ -1297,6 +1300,9 @@ void rtklib_pvt_gs::msg_handler_telemetry(const pmt::pmt_t& msg) case 33: // L1+E1+E5a rp->log_rinex_nav(rp->navMixFile, new_eph, new_gal_eph); break; + case 1001: // L1+E1+L2+L5+E5a + rp->log_rinex_nav(rp->navMixFile, new_eph, new_gal_eph); + break; default: break; } @@ -2235,6 +2241,8 @@ int rtklib_pvt_gs::work(int noutput_items, gr_vector_const_void_star& input_item * 608 | BeiDou B3I + GPS L1 C/A + Galileo E1B + BeiDou B1I * 609 | BeiDou B3I + GPS L1 C/A + Galileo E1B + GLONASS L1 C/A * 610 | BeiDou B3I + GPS L1 C/A + Galileo E1B + GLONASS L1 C/A + BeiDou B1I + * 1000 | GPS L1 C/A + GPS L2C + GPS L5 + * 1001 | GPS L1 C/A + Galileo E1B + GPS L2C + GPS L5 + Galileo E5a */ // ####################### RINEX FILES ################# @@ -2629,6 +2637,18 @@ int rtklib_pvt_gs::work(int noutput_items, gr_vector_const_void_star& input_item } break; + case 1001: // GPS L1 C/A + Galileo E1B + GPS L2C + GPS L5 + Galileo E5a + if ((galileo_ephemeris_iter != d_user_pvt_solver->galileo_ephemeris_map.cend()) and + (gps_ephemeris_iter != d_user_pvt_solver->gps_ephemeris_map.cend()) and + (gps_cnav_ephemeris_iter != d_user_pvt_solver->gps_cnav_ephemeris_map.cend())) + { + std::string gal_signal("1B 5X"); + std::string gps_signal("1C 2S 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_user_pvt_solver->gps_iono, d_user_pvt_solver->gps_utc_model, gps_ephemeris_iter->second, d_user_pvt_solver->galileo_iono, d_user_pvt_solver->galileo_utc_model); + b_rinex_header_written = true; // do not write header anymore + } + break; default: break; } @@ -2950,6 +2970,20 @@ int rtklib_pvt_gs::work(int noutput_items, gr_vector_const_void_star& input_item b_rinex_header_updated = true; } break; + case 1001: // GPS L1 C/A + Galileo E1B + GPS L2C + GPS L5 + Galileo E5a + if ((galileo_ephemeris_iter != d_user_pvt_solver->galileo_ephemeris_map.cend()) and + (gps_ephemeris_iter != d_user_pvt_solver->gps_ephemeris_map.cend()) and + (gps_cnav_ephemeris_iter != d_user_pvt_solver->gps_cnav_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_user_pvt_solver->gps_utc_model.d_A0 != 0) and (d_user_pvt_solver->galileo_utc_model.A0_6 != 0)) + { + rp->update_obs_header(rp->obsFile, d_user_pvt_solver->gps_utc_model); + rp->update_nav_header(rp->navMixFile, d_user_pvt_solver->gps_iono, d_user_pvt_solver->gps_utc_model, gps_ephemeris_iter->second, d_user_pvt_solver->galileo_iono, d_user_pvt_solver->galileo_utc_model); + b_rinex_header_updated = true; + } + break; default: break; }