diff --git a/src/algorithms/PVT/gnuradio_blocks/rtklib_pvt_gs.cc b/src/algorithms/PVT/gnuradio_blocks/rtklib_pvt_gs.cc index 4687ef8fc..eac5bd6e8 100644 --- a/src/algorithms/PVT/gnuradio_blocks/rtklib_pvt_gs.cc +++ b/src/algorithms/PVT/gnuradio_blocks/rtklib_pvt_gs.cc @@ -342,7 +342,7 @@ rtklib_pvt_gs::rtklib_pvt_gs(uint32_t nchannels, const std::string rtcm_dump_filename = d_dump_filename; if (conf_.flag_rtcm_server || conf_.flag_rtcm_tty_port || conf_.rtcm_output_file_enabled) { - d_rtcm_printer = std::make_unique(rtcm_dump_filename, conf_.rtcm_output_file_enabled, conf_.flag_rtcm_server, conf_.flag_rtcm_tty_port, conf_.rtcm_tcp_port, conf_.rtcm_station_id, conf_.rtcm_dump_devname, true, conf_.rtcm_output_file_path); + d_rtcm_printer = std::make_unique(rtcm_dump_filename, conf_.rtcm_output_file_enabled, conf_.flag_rtcm_server, conf_.flag_rtcm_tty_port, conf_.rtcm_tcp_port, conf_.rtcm_station_id, conf_.rtcm_dump_devname, d_signal_enabled_flags, true, conf_.rtcm_output_file_path); std::map rtcm_msg_rate_ms = conf_.rtcm_msg_rate_ms; if (rtcm_msg_rate_ms.find(1019) != rtcm_msg_rate_ms.end()) { @@ -2431,7 +2431,6 @@ int rtklib_pvt_gs::work(int noutput_items, gr_vector_const_void_star& input_item d_rtcm_printer->Print_Rtcm_Messages(d_user_pvt_solver.get(), d_gnss_observables_map, d_rx_time, - d_signal_enabled_flags, rtcm_MSM_enabled, rtcm_MT1019_enabled, rtcm_MT1020_enabled, diff --git a/src/algorithms/PVT/libs/rinex_printer.cc b/src/algorithms/PVT/libs/rinex_printer.cc index 9dc8bd893..232b34eb2 100644 --- a/src/algorithms/PVT/libs/rinex_printer.cc +++ b/src/algorithms/PVT/libs/rinex_printer.cc @@ -35,7 +35,6 @@ #include "gps_navigation_message.h" #include "gps_utc_model.h" #include "rtklib_solver.h" -#include "signal_enabled_flags.h" #include #include #include @@ -1930,13 +1929,13 @@ Rinex_Printer::Rinex_Printer(uint32_t signal_enabled_flags, int version, bool pre_2009_file) : observationType(getObservationTypes()), observationCode(getObservationCodes()), + d_flags(signal_enabled_flags), d_version(get_version(signal_enabled_flags, version)), d_stringVersion(d_version == 2 ? "2.11" : "3.02"), // Only version 2.11 and 3.02 d_fake_cnav_iode(1), d_rinex_header_updated(false), d_rinex_header_written(false), d_pre_2009_file(pre_2009_file), - d_signal_enabled_flags(signal_enabled_flags), navfilename(getNavFilePath(signal_enabled_flags, d_version, base_name, base_rinex_path)), obsfilename(getFilePath("RINEX_FILE_TYPE_OBS", base_name, base_rinex_path)), navGlofilename(getFilePath("RINEX_FILE_TYPE_GLO_NAV", base_name, base_rinex_path)), @@ -2023,16 +2022,7 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver, const auto glonass_gnav_ephemeris_iter = pvt_solver->glonass_gnav_ephemeris_map.cbegin(); const auto beidou_dnav_ephemeris_iter = pvt_solver->beidou_dnav_ephemeris_map.cbegin(); - const Signal_Enabled_Flags flags(d_signal_enabled_flags); - const auto signal = enabled_signal_flags_to_string(flags); - const auto has_gps = flags.check_any_enabled(GPS_1C, GPS_2S, GPS_L5); - const auto has_galileo = flags.check_any_enabled(GAL_1B, GAL_E5a, GAL_E5b, GAL_E6); - const auto has_glonass = flags.check_any_enabled(GLO_1G, GLO_2G); - const auto has_beidou = flags.check_any_enabled(BDS_B1, BDS_B3); - const auto only_galileo = has_galileo && !(has_gps || has_glonass || has_beidou); - const auto only_glonass = has_glonass && !(has_gps || has_galileo || has_beidou); - const auto only_beidou = has_beidou && !(has_gps || has_galileo || has_glonass); - + const auto signal = enabled_signal_flags_to_string(d_flags); const bool has_gps_lnav_eph = !pvt_solver->gps_ephemeris_map.empty(); const bool has_gps_cnav_eph = !pvt_solver->gps_cnav_ephemeris_map.empty(); const bool has_galileo_eph = !pvt_solver->galileo_ephemeris_map.empty(); @@ -2043,52 +2033,52 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver, { bool rinex_header_written = true; - if (flags.check_only_enabled(GPS_1C) && has_gps_lnav_eph) + if (d_flags.check_only_enabled(GPS_1C) && has_gps_lnav_eph) { rinex_obs_header(obsFile, gps_ephemeris_iter->second, rx_time); rinex_nav_header(navFile, pvt_solver->gps_iono, pvt_solver->gps_utc_model, gps_ephemeris_iter->second); } - else if ((flags.check_only_enabled(GPS_2S) || flags.check_only_enabled(GPS_L5)) && has_gps_cnav_eph) + else if ((d_flags.check_only_enabled(GPS_2S) || d_flags.check_only_enabled(GPS_L5)) && has_gps_cnav_eph) { rinex_obs_header(obsFile, gps_cnav_ephemeris_iter->second, rx_time, signal); rinex_nav_header(navFile, pvt_solver->gps_cnav_iono, pvt_solver->gps_cnav_utc_model); } - else if (only_galileo && has_galileo_eph) + else if (d_flags.only_galileo && has_galileo_eph) { rinex_obs_header(obsFile, galileo_ephemeris_iter->second, rx_time, signal); rinex_nav_header(navFile, pvt_solver->galileo_iono, pvt_solver->galileo_utc_model); } - else if (only_glonass && has_glonass_eph) + else if (d_flags.only_glonass && has_glonass_eph) { rinex_obs_header(obsFile, glonass_gnav_ephemeris_iter->second, rx_time, signal); rinex_nav_header(navFile, pvt_solver->glonass_gnav_utc_model, glonass_gnav_ephemeris_iter->second); } - else if (only_beidou && has_beidou_dnav_eph) + else if (d_flags.only_beidou && has_beidou_dnav_eph) { rinex_obs_header(obsFile, beidou_dnav_ephemeris_iter->second, rx_time, signal); rinex_nav_header(navFile, pvt_solver->beidou_dnav_iono, pvt_solver->beidou_dnav_utc_model); } - else if ((flags.check_only_enabled(GPS_1C, GPS_2S) || - flags.check_only_enabled(GPS_1C, GPS_L5) || - flags.check_only_enabled(GPS_1C, GPS_2S, GPS_L5)) && + else if ((d_flags.check_only_enabled(GPS_1C, GPS_2S) || + d_flags.check_only_enabled(GPS_1C, GPS_L5) || + d_flags.check_only_enabled(GPS_1C, GPS_2S, GPS_L5)) && has_gps_lnav_eph && has_gps_cnav_eph) { rinex_obs_header(obsFile, gps_ephemeris_iter->second, gps_cnav_ephemeris_iter->second, rx_time, signal); rinex_nav_header(navFile, pvt_solver->gps_iono, pvt_solver->gps_utc_model, gps_ephemeris_iter->second); } - else if ((flags.check_only_enabled(GPS_1C, GAL_1B) || flags.check_only_enabled(GPS_1C, GAL_E5a) || flags.check_only_enabled(GPS_1C, GAL_E5b)) && + else if ((d_flags.check_only_enabled(GPS_1C, GAL_1B) || d_flags.check_only_enabled(GPS_1C, GAL_E5a) || d_flags.check_only_enabled(GPS_1C, GAL_E5b)) && has_gps_lnav_eph && has_galileo_eph) { rinex_obs_header(obsFile, gps_ephemeris_iter->second, galileo_ephemeris_iter->second, rx_time, signal); rinex_nav_header(navFile, pvt_solver->gps_iono, pvt_solver->gps_utc_model, gps_ephemeris_iter->second, pvt_solver->galileo_iono, pvt_solver->galileo_utc_model); } - else if (flags.check_only_enabled(GPS_L5, GAL_E5a) && + else if (d_flags.check_only_enabled(GPS_L5, GAL_E5a) && has_gps_cnav_eph && has_galileo_eph) { rinex_obs_header(obsFile, gps_cnav_ephemeris_iter->second, galileo_ephemeris_iter->second, rx_time, signal, signal); rinex_nav_header(navFile, pvt_solver->gps_cnav_iono, pvt_solver->gps_cnav_utc_model, pvt_solver->galileo_iono, pvt_solver->galileo_utc_model); } - else if ((flags.check_only_enabled(GPS_1C, GLO_1G) || flags.check_only_enabled(GPS_1C, GLO_2G) || flags.check_only_enabled(GPS_1C, GLO_1G, GLO_2G)) && + else if ((d_flags.check_only_enabled(GPS_1C, GLO_1G) || d_flags.check_only_enabled(GPS_1C, GLO_2G) || d_flags.check_only_enabled(GPS_1C, GLO_1G, GLO_2G)) && has_gps_lnav_eph && has_glonass_eph) { rinex_obs_header(obsFile, gps_ephemeris_iter->second, glonass_gnav_ephemeris_iter->second, rx_time, signal); @@ -2103,32 +2093,32 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver, output_navfilename.push_back(navGlofilename); } } - else if ((flags.check_only_enabled(GLO_1G, GPS_2S) || flags.check_only_enabled(GLO_2G, GPS_2S)) && + else if ((d_flags.check_only_enabled(GLO_1G, GPS_2S) || d_flags.check_only_enabled(GLO_2G, GPS_2S)) && has_gps_cnav_eph && has_glonass_eph) { rinex_obs_header(obsFile, gps_cnav_ephemeris_iter->second, glonass_gnav_ephemeris_iter->second, rx_time, signal); rinex_nav_header(navFile, pvt_solver->gps_cnav_iono, pvt_solver->gps_cnav_utc_model, pvt_solver->glonass_gnav_utc_model); } - else if ((flags.check_only_enabled(GAL_1B, GLO_1G) || flags.check_only_enabled(GAL_1B, GLO_2G)) && + else if ((d_flags.check_only_enabled(GAL_1B, GLO_1G) || d_flags.check_only_enabled(GAL_1B, GLO_2G)) && has_galileo_eph && has_glonass_eph) { rinex_obs_header(obsFile, galileo_ephemeris_iter->second, glonass_gnav_ephemeris_iter->second, rx_time, signal, signal); rinex_nav_header(navFile, pvt_solver->galileo_iono, pvt_solver->galileo_utc_model, pvt_solver->glonass_gnav_utc_model); } - else if ((flags.check_only_enabled(GPS_1C, GAL_1B, GPS_L5, GAL_E5a) || - flags.check_only_enabled(GPS_1C, GAL_1B, GPS_L5, GAL_E5a, GAL_E6) || - flags.check_only_enabled(GPS_1C, GAL_1B, GPS_2S, GPS_L5, GAL_E5a)) && + else if ((d_flags.check_only_enabled(GPS_1C, GAL_1B, GPS_L5, GAL_E5a) || + d_flags.check_only_enabled(GPS_1C, GAL_1B, GPS_L5, GAL_E5a, GAL_E6) || + d_flags.check_only_enabled(GPS_1C, GAL_1B, GPS_2S, GPS_L5, GAL_E5a)) && has_gps_lnav_eph && has_gps_cnav_eph && has_galileo_eph) { rinex_obs_header(obsFile, gps_ephemeris_iter->second, gps_cnav_ephemeris_iter->second, galileo_ephemeris_iter->second, rx_time, signal, signal); rinex_nav_header(navFile, pvt_solver->gps_iono, pvt_solver->gps_utc_model, gps_ephemeris_iter->second, pvt_solver->galileo_iono, pvt_solver->galileo_utc_model); } - else if ((flags.check_only_enabled(GPS_1C, GAL_1B, GAL_E5a) || flags.check_only_enabled(GPS_1C, GAL_1B, GAL_E5b)) && has_gps_lnav_eph && has_galileo_eph) + else if ((d_flags.check_only_enabled(GPS_1C, GAL_1B, GAL_E5a) || d_flags.check_only_enabled(GPS_1C, GAL_1B, GAL_E5b)) && has_gps_lnav_eph && has_galileo_eph) { rinex_obs_header(obsFile, gps_ephemeris_iter->second, galileo_ephemeris_iter->second, rx_time, signal); rinex_nav_header(navFile, pvt_solver->gps_iono, pvt_solver->gps_utc_model, gps_ephemeris_iter->second, pvt_solver->galileo_iono, pvt_solver->galileo_utc_model); } - else if (flags.check_only_enabled(GPS_1C, GAL_E6) && has_gps_lnav_eph) + else if (d_flags.check_only_enabled(GPS_1C, GAL_E6) && has_gps_lnav_eph) { if (has_galileo_eph) { @@ -2143,7 +2133,7 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver, rinex_nav_header(navFile, pvt_solver->gps_iono, pvt_solver->gps_utc_model, gps_ephemeris_iter->second); } } - else if (has_beidou && has_beidou_dnav_eph) + else if (d_flags.has_beidou && has_beidou_dnav_eph) { rinex_obs_header(obsFile, beidou_dnav_ephemeris_iter->second, rx_time, signal); // Not implemented for beidou @@ -2155,7 +2145,7 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver, if (rinex_header_written) { - if (has_gps_lnav_eph && !flags.check_any_enabled(GPS_L5)) // That's how it used to be, not sure why + if (has_gps_lnav_eph && !d_flags.check_any_enabled(GPS_L5)) // That's how it used to be, not sure why { log_rinex_nav(navFile, pvt_solver->gps_ephemeris_map); } @@ -2190,14 +2180,14 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver, if (d_rinex_header_written && flag_write_RINEX_obs_output) // The header is already written, we can now log the navigation message data { - const auto constel_signal_flags = get_constel_signal_flags(flags); + const auto constel_signal_flags = get_constel_signal_flags(d_flags); const auto constel_observables = get_constellation_observables_map(constel_signal_flags, gnss_observables_map); double seconds; boost::posix_time::ptime system_time; // Order is important - if (flags.check_any_enabled(GPS_1C)) + if (d_flags.check_any_enabled(GPS_1C)) { if (has_gps_lnav_eph) { @@ -2205,7 +2195,7 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver, seconds = fmod(rx_time, 60); } } - else if (has_gps) + else if (d_flags.has_gps) { if (has_gps_cnav_eph) { @@ -2213,7 +2203,7 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver, seconds = fmod(rx_time, 60); } } - else if (has_galileo) + else if (d_flags.has_galileo) { if (has_galileo_eph) { @@ -2221,7 +2211,7 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver, seconds = fmod(rx_time, 60); } } - else if (has_glonass) + else if (d_flags.has_glonass) { if (has_glonass_eph) { @@ -2230,7 +2220,7 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver, seconds = modf(rx_time, &int_sec) + system_time.time_of_day().seconds(); } } - else if (has_beidou) + else if (d_flags.has_beidou) { if (has_beidou_dnav_eph) { @@ -2246,19 +2236,19 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver, std::vector constellations; - if (has_gps) + if (d_flags.has_gps) { constellations.emplace_back("GPS"); } - if (has_galileo) + if (d_flags.has_galileo) { constellations.emplace_back("Galileo"); } - if (has_glonass) + if (d_flags.has_glonass) { constellations.emplace_back("GLONASS"); } - if (has_beidou) + if (d_flags.has_beidou) { constellations.emplace_back("Beidou"); } @@ -2266,7 +2256,7 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver, add_obs_epoch_record(obsFile, system_time, seconds, d_version, constel_observables); add_constellation_obs_sat_record_lines(obsFile, constellations, constel_observables, d_version); - if (flags.check_only_enabled(GPS_1C) && has_gps_lnav_eph) + if (d_flags.check_only_enabled(GPS_1C) && has_gps_lnav_eph) { if (!d_rinex_header_updated && (pvt_solver->gps_utc_model.A0 != 0)) { @@ -2275,7 +2265,7 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver, d_rinex_header_updated = true; } } - else if (flags.check_only_enabled(GPS_1C, GPS_2S) && has_gps_lnav_eph && has_gps_cnav_eph) + else if (d_flags.check_only_enabled(GPS_1C, GPS_2S) && has_gps_lnav_eph && has_gps_cnav_eph) { if (!d_rinex_header_updated && (pvt_solver->gps_utc_model.A0 != 0)) { @@ -2284,7 +2274,7 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver, d_rinex_header_updated = true; } } - else if (flags.check_only_enabled(GPS_1C, GPS_L5) && has_gps_lnav_eph && has_gps_cnav_eph) + else if (d_flags.check_only_enabled(GPS_1C, GPS_L5) && has_gps_lnav_eph && has_gps_cnav_eph) { if (!d_rinex_header_updated && ((pvt_solver->gps_cnav_utc_model.A0 != 0) || (pvt_solver->gps_utc_model.A0 != 0))) { @@ -2301,7 +2291,7 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver, d_rinex_header_updated = true; } } - else if (flags.check_only_enabled(GPS_2S) || flags.check_only_enabled(GPS_L5) || flags.check_only_enabled(GPS_2S, GPS_L5)) + else if (d_flags.check_only_enabled(GPS_2S) || d_flags.check_only_enabled(GPS_L5) || d_flags.check_only_enabled(GPS_2S, GPS_L5)) { if (!d_rinex_header_updated && (pvt_solver->gps_cnav_utc_model.A0 != 0)) { @@ -2310,7 +2300,7 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver, d_rinex_header_updated = true; } } - else if (flags.check_only_enabled(GPS_1C, GPS_2S, GPS_L5)) + else if (d_flags.check_only_enabled(GPS_1C, GPS_2S, GPS_L5)) { if (!d_rinex_header_updated && (pvt_solver->gps_utc_model.A0 != 0) && (has_gps_lnav_eph)) { @@ -2319,7 +2309,7 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver, d_rinex_header_updated = true; } } - else if (only_galileo) + else if (d_flags.only_galileo) { if (!d_rinex_header_updated && (pvt_solver->galileo_utc_model.A0 != 0)) { @@ -2328,7 +2318,7 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver, d_rinex_header_updated = true; } } - else if (only_glonass) + else if (d_flags.only_glonass) { if (!d_rinex_header_updated && (pvt_solver->glonass_gnav_utc_model.d_tau_c != 0)) { @@ -2336,7 +2326,7 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver, d_rinex_header_updated = true; } } - else if (only_beidou) + else if (d_flags.only_beidou) { if (!d_rinex_header_updated && (pvt_solver->beidou_dnav_utc_model.A0_UTC != 0)) { @@ -2345,7 +2335,7 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver, d_rinex_header_updated = true; } } - else if ((flags.check_only_enabled(GPS_1C, GAL_1B) || flags.check_only_enabled(GPS_1C, GAL_1B, GAL_E6)) && + else if ((d_flags.check_only_enabled(GPS_1C, GAL_1B) || d_flags.check_only_enabled(GPS_1C, GAL_1B, GAL_E6)) && has_gps_lnav_eph && has_galileo_eph) { if (!d_rinex_header_updated && (pvt_solver->gps_utc_model.A0 != 0)) @@ -2355,7 +2345,7 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver, d_rinex_header_updated = true; } } - else if ((flags.check_only_enabled(GPS_1C, GLO_1G) || flags.check_only_enabled(GPS_1C, GLO_2G) || flags.check_only_enabled(GPS_1C, GLO_1G, GLO_2G)) && + else if ((d_flags.check_only_enabled(GPS_1C, GLO_1G) || d_flags.check_only_enabled(GPS_1C, GLO_2G) || d_flags.check_only_enabled(GPS_1C, GLO_1G, GLO_2G)) && has_gps_lnav_eph && has_glonass_eph) { if (!d_rinex_header_updated && (pvt_solver->gps_utc_model.A0 != 0)) @@ -2365,7 +2355,7 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver, d_rinex_header_updated = true; // do not write header anymore } } - else if (flags.check_only_enabled(GPS_L5, GAL_E5a)) + else if (d_flags.check_only_enabled(GPS_L5, GAL_E5a)) { if (!d_rinex_header_updated && (pvt_solver->gps_cnav_utc_model.A0 != 0) && (pvt_solver->galileo_utc_model.A0 != 0)) { @@ -2374,7 +2364,7 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver, d_rinex_header_updated = true; // do not write header anymore } } - else if (flags.check_only_enabled(GAL_1B, GLO_1G) || flags.check_only_enabled(GAL_1B, GLO_2G)) + else if (d_flags.check_only_enabled(GAL_1B, GLO_1G) || d_flags.check_only_enabled(GAL_1B, GLO_2G)) { if (!d_rinex_header_updated && (pvt_solver->galileo_utc_model.A0 != 0)) { @@ -2383,7 +2373,7 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver, d_rinex_header_updated = true; // do not write header anymore } } - else if (flags.check_only_enabled(GPS_2S, GLO_1G) || flags.check_only_enabled(GPS_2S, GLO_2G)) + else if (d_flags.check_only_enabled(GPS_2S, GLO_1G) || d_flags.check_only_enabled(GPS_2S, GLO_2G)) { if (!d_rinex_header_updated && (pvt_solver->gps_cnav_utc_model.A0 != 0)) { @@ -2392,7 +2382,7 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver, d_rinex_header_updated = true; // do not write header anymore } } - else if (flags.check_only_enabled(GPS_1C, GAL_1B, GPS_L5, GAL_E5a)) + else if (d_flags.check_only_enabled(GPS_1C, GAL_1B, GPS_L5, GAL_E5a)) { if (has_gps_lnav_eph && has_gps_cnav_eph && has_galileo_eph) { @@ -2412,7 +2402,7 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver, } } } - else if (flags.check_only_enabled(GPS_1C, GAL_1B, GAL_E5a)) + else if (d_flags.check_only_enabled(GPS_1C, GAL_1B, GAL_E5a)) { if (has_gps_lnav_eph && has_galileo_eph) { @@ -2424,7 +2414,7 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver, } } } - else if (flags.check_only_enabled(GPS_1C, GAL_1B, GPS_L5, GAL_E5a, GAL_E6) || flags.check_only_enabled(GPS_1C, GAL_1B, GPS_2S, GPS_L5, GAL_E5a)) + else if (d_flags.check_only_enabled(GPS_1C, GAL_1B, GPS_L5, GAL_E5a, GAL_E6) || d_flags.check_only_enabled(GPS_1C, GAL_1B, GPS_2S, GPS_L5, GAL_E5a)) { if (!d_rinex_header_updated && (pvt_solver->gps_utc_model.A0 != 0) && (pvt_solver->galileo_utc_model.A0 != 0) && (has_gps_lnav_eph)) { @@ -2433,7 +2423,7 @@ void Rinex_Printer::print_rinex_annotation(const Rtklib_Solver* pvt_solver, d_rinex_header_updated = true; } } - else if (flags.check_only_enabled(GPS_1C, GAL_E6) && has_gps_lnav_eph) + else if (d_flags.check_only_enabled(GPS_1C, GAL_E6) && has_gps_lnav_eph) { if (has_galileo_eph) { diff --git a/src/algorithms/PVT/libs/rinex_printer.h b/src/algorithms/PVT/libs/rinex_printer.h index cc69d20a5..b65f9c4e3 100644 --- a/src/algorithms/PVT/libs/rinex_printer.h +++ b/src/algorithms/PVT/libs/rinex_printer.h @@ -38,6 +38,7 @@ #ifndef GNSS_SDR_RINEX_PRINTER_H #define GNSS_SDR_RINEX_PRINTER_H +#include "signal_enabled_flags.h" #include #include // for int32_t #include // for strtol, strtod @@ -544,6 +545,8 @@ private: const std::map observationType; // PSEUDORANGE, CARRIER_PHASE, DOPPLER, SIGNAL_STRENGTH const std::map observationCode; // GNSS observation descriptors + const Signal_Enabled_Flags d_flags; + const int d_version; // RINEX version (2 for 2.10/2.11 and 3 for 3.01) const std::string d_stringVersion; // RINEX version (2.10/2.11 or 3.01/3.02) @@ -551,7 +554,6 @@ private: bool d_rinex_header_updated; bool d_rinex_header_written; const bool d_pre_2009_file; - const uint32_t d_signal_enabled_flags; const std::string navfilename; // Name of RINEX navigation file const std::string obsfilename; // Name of RINEX observation file diff --git a/src/algorithms/PVT/libs/rtcm_printer.cc b/src/algorithms/PVT/libs/rtcm_printer.cc index 382804f3f..4ac8d3389 100644 --- a/src/algorithms/PVT/libs/rtcm_printer.cc +++ b/src/algorithms/PVT/libs/rtcm_printer.cc @@ -29,7 +29,6 @@ #include "gps_ephemeris.h" #include "rtcm.h" #include "rtklib_solver.h" -#include "signal_enabled_flags.h" #include #include // for tm #include // for exception @@ -52,13 +51,15 @@ Rtcm_Printer::Rtcm_Printer(const std::string& filename, uint16_t rtcm_tcp_port, uint16_t rtcm_station_id, const std::string& rtcm_dump_devname, + uint32_t signal_enabled_flags, bool time_tag_name, const std::string& base_path) : rtcm_base_path(base_path), rtcm_devname(rtcm_dump_devname), port(rtcm_tcp_port), station_id(rtcm_station_id), d_rtcm_has_written_once(false), - d_rtcm_file_dump(flag_rtcm_file_dump) + d_rtcm_file_dump(flag_rtcm_file_dump), + d_flags(signal_enabled_flags) { const boost::posix_time::ptime pt = boost::posix_time::second_clock::local_time(); const tm timeinfo = boost::posix_time::to_tm(pt); @@ -226,7 +227,6 @@ Rtcm_Printer::~Rtcm_Printer() void Rtcm_Printer::Print_Rtcm_Messages(const Rtklib_Solver* pvt_solver, const std::map& gnss_observables_map, double rx_time, - uint32_t signal_enabled_flags, bool rtcm_MSM_enabled, bool rtcm_MT1019_enabled, bool rtcm_MT1020_enabled, @@ -242,33 +242,26 @@ void Rtcm_Printer::Print_Rtcm_Messages(const Rtklib_Solver* pvt_solver, { try { - const Signal_Enabled_Flags flags(signal_enabled_flags); - const auto has_gps = flags.check_any_enabled(GPS_1C, GPS_2S, GPS_L5); - const auto has_galileo = flags.check_any_enabled(GAL_1B, GAL_E5a, GAL_E5b, GAL_E6); - const auto has_glonass = flags.check_any_enabled(GLO_1G, GLO_2G); - const auto has_beidou = flags.check_any_enabled(BDS_B1, BDS_B3); - const auto only_galileo = has_galileo && !(has_gps || has_glonass || has_beidou); - const auto only_glonass = has_glonass && !(has_gps || has_galileo || has_beidou); const auto print_MT1019 = (!d_rtcm_has_written_once && rtcm_MT1019_enabled) || flag_write_RTCM_1019_output; const auto print_MT1020 = (!d_rtcm_has_written_once && rtcm_MT1020_enabled) || flag_write_RTCM_1020_output; const auto print_MT1045 = (!d_rtcm_has_written_once && rtcm_MT1045_enabled) || flag_write_RTCM_1045_output; const auto print_MSM = (!d_rtcm_has_written_once && rtcm_MSM_enabled) || flag_write_RTCM_MSM_output; - if (print_MT1019 && flags.check_any_enabled(GPS_1C)) + if (print_MT1019 && d_flags.check_any_enabled(GPS_1C)) { for (const auto& gps_eph_iter : pvt_solver->gps_ephemeris_map) { Print_Rtcm_MT1019(gps_eph_iter.second); } } - if (print_MT1020 && has_glonass) + if (print_MT1020 && d_flags.has_glonass) { for (const auto& glonass_gnav_eph_iter : pvt_solver->glonass_gnav_ephemeris_map) { Print_Rtcm_MT1020(glonass_gnav_eph_iter.second, pvt_solver->glonass_gnav_utc_model); } } - if (print_MT1045 && has_galileo) + if (print_MT1045 && d_flags.has_galileo) { for (const auto& gal_eph_iter : pvt_solver->galileo_ephemeris_map) { @@ -277,7 +270,7 @@ void Rtcm_Printer::Print_Rtcm_Messages(const Rtklib_Solver* pvt_solver, } if (print_MSM) { - if (rtcm_MT1077_enabled && (flags.check_only_enabled(GPS_1C) || flags.check_only_enabled(GPS_1C, GAL_E6))) + if (rtcm_MT1077_enabled && (d_flags.check_only_enabled(GPS_1C) || d_flags.check_only_enabled(GPS_1C, GAL_E6))) { const auto gps_eph_iter = pvt_solver->gps_ephemeris_map.cbegin(); if (gps_eph_iter != pvt_solver->gps_ephemeris_map.cend()) @@ -285,7 +278,7 @@ void Rtcm_Printer::Print_Rtcm_Messages(const Rtklib_Solver* pvt_solver, Print_Rtcm_MSM(7, gps_eph_iter->second, {}, {}, {}, rx_time, gnss_observables_map, enable_rx_clock_correction, 0, 0, false, false); } } - else if (rtcm_MT1077_enabled && (flags.check_only_enabled(GPS_1C, GPS_2S) || flags.check_only_enabled(GPS_1C, GPS_L5))) + else if (rtcm_MT1077_enabled && (d_flags.check_only_enabled(GPS_1C, GPS_2S) || d_flags.check_only_enabled(GPS_1C, GPS_L5))) { const auto gps_eph_iter = pvt_solver->gps_ephemeris_map.cbegin(); const auto gps_cnav_eph_iter = pvt_solver->gps_cnav_ephemeris_map.cbegin(); @@ -294,7 +287,7 @@ void Rtcm_Printer::Print_Rtcm_Messages(const Rtklib_Solver* pvt_solver, Print_Rtcm_MSM(7, gps_eph_iter->second, gps_cnav_eph_iter->second, {}, {}, rx_time, gnss_observables_map, enable_rx_clock_correction, 0, 0, false, false); } } - else if (rtcm_MT1097_enabled && only_galileo) + else if (rtcm_MT1097_enabled && d_flags.only_galileo) { const auto gal_eph_iter = pvt_solver->galileo_ephemeris_map.cbegin(); if (gal_eph_iter != pvt_solver->galileo_ephemeris_map.cend()) @@ -302,7 +295,7 @@ void Rtcm_Printer::Print_Rtcm_Messages(const Rtklib_Solver* pvt_solver, Print_Rtcm_MSM(7, {}, {}, gal_eph_iter->second, {}, rx_time, gnss_observables_map, enable_rx_clock_correction, 0, 0, false, false); } } - else if (rtcm_MT1087_enabled && only_glonass) + else if (rtcm_MT1087_enabled && d_flags.only_glonass) { const auto glo_gnav_ephemeris_iter = pvt_solver->glonass_gnav_ephemeris_map.cbegin(); if (glo_gnav_ephemeris_iter != pvt_solver->glonass_gnav_ephemeris_map.cend()) @@ -317,10 +310,10 @@ void Rtcm_Printer::Print_Rtcm_Messages(const Rtklib_Solver* pvt_solver, auto gal_eph_iter = pvt_solver->galileo_ephemeris_map.cend(); auto glonass_gnav_eph_iter = pvt_solver->glonass_gnav_ephemeris_map.cend(); - bool search_gps_nav = flags.check_any_enabled(GPS_1C); - bool search_gps_cnav = !search_gps_nav && flags.check_any_enabled(GPS_2S, GPS_L5); - bool search_gal = has_galileo; - bool search_glo = has_glonass; + bool search_gps_nav = d_flags.check_any_enabled(GPS_1C); + bool search_gps_cnav = !search_gps_nav && d_flags.check_any_enabled(GPS_2S, GPS_L5); + bool search_gal = d_flags.has_galileo; + bool search_glo = d_flags.has_glonass; for (const auto& gnss_observables_iter : gnss_observables_map) { diff --git a/src/algorithms/PVT/libs/rtcm_printer.h b/src/algorithms/PVT/libs/rtcm_printer.h index 6b2b63004..b9998cec7 100644 --- a/src/algorithms/PVT/libs/rtcm_printer.h +++ b/src/algorithms/PVT/libs/rtcm_printer.h @@ -20,6 +20,7 @@ #ifndef GNSS_SDR_RTCM_PRINTER_H #define GNSS_SDR_RTCM_PRINTER_H +#include "signal_enabled_flags.h" #include // for int32_t #include // for std::ofstream #include // for std::map @@ -58,6 +59,7 @@ public: uint16_t rtcm_tcp_port, uint16_t rtcm_station_id, const std::string& rtcm_dump_devname, + uint32_t signal_enabled_flags, bool time_tag_name = true, const std::string& base_path = "."); @@ -72,7 +74,6 @@ public: void Print_Rtcm_Messages(const Rtklib_Solver* pvt_solver, const std::map& gnss_observables_map, double rx_time, - uint32_t signal_enabled_flags, bool rtcm_MSM_enabled, bool rtcm_MT1019_enabled, bool rtcm_MT1020_enabled, @@ -201,6 +202,7 @@ private: uint16_t station_id; bool d_rtcm_has_written_once; bool d_rtcm_file_dump; + const Signal_Enabled_Flags d_flags; }; diff --git a/src/algorithms/PVT/libs/signal_enabled_flags.cc b/src/algorithms/PVT/libs/signal_enabled_flags.cc index 8d6a58b77..0c111b808 100644 --- a/src/algorithms/PVT/libs/signal_enabled_flags.cc +++ b/src/algorithms/PVT/libs/signal_enabled_flags.cc @@ -54,11 +54,19 @@ uint32_t flags_from_config(const ConfigurationInterface* configuration) } // namespace -Signal_Enabled_Flags::Signal_Enabled_Flags(const ConfigurationInterface* configuration) : flags(flags_from_config(configuration)) +Signal_Enabled_Flags::Signal_Enabled_Flags(const ConfigurationInterface* configuration) : Signal_Enabled_Flags(flags_from_config(configuration)) { } -Signal_Enabled_Flags::Signal_Enabled_Flags(uint32_t flags_) : flags(flags_) +Signal_Enabled_Flags::Signal_Enabled_Flags(uint32_t flags_) : flags(flags_), + has_gps(check_any_enabled(GPS_1C, GPS_2S, GPS_L5)), + has_galileo(check_any_enabled(GAL_1B, GAL_E5a, GAL_E5b, GAL_E6)), + has_glonass(check_any_enabled(GLO_1G, GLO_2G)), + has_beidou(check_any_enabled(BDS_B1, BDS_B3)), + only_gps(has_gps && !(has_galileo || has_glonass || has_beidou)), + only_galileo(has_galileo && !(has_gps || has_glonass || has_beidou)), + only_glonass(has_glonass && !(has_gps || has_galileo || has_beidou)), + only_beidou(has_beidou && !(has_gps || has_galileo || has_glonass)) { } diff --git a/src/algorithms/PVT/libs/signal_enabled_flags.h b/src/algorithms/PVT/libs/signal_enabled_flags.h index 8aae82ed4..0a1a8f74b 100644 --- a/src/algorithms/PVT/libs/signal_enabled_flags.h +++ b/src/algorithms/PVT/libs/signal_enabled_flags.h @@ -67,6 +67,16 @@ public: } const uint32_t flags; + + const bool has_gps; + const bool has_galileo; + const bool has_glonass; + const bool has_beidou; + + const bool only_gps; + const bool only_galileo; + const bool only_glonass; + const bool only_beidou; }; #endif // GNSS_SDR_SIGNAL_ENABLED_FLAGS_H diff --git a/tests/unit-tests/signal-processing-blocks/pvt/rtcm_printer_test.cc b/tests/unit-tests/signal-processing-blocks/pvt/rtcm_printer_test.cc index 44465480b..5d8edab2c 100644 --- a/tests/unit-tests/signal-processing-blocks/pvt/rtcm_printer_test.cc +++ b/tests/unit-tests/signal-processing-blocks/pvt/rtcm_printer_test.cc @@ -17,6 +17,7 @@ #include "gnss_sdr_make_unique.h" #include "rtcm_printer.h" +#include "signal_enabled_flags.h" #include @@ -29,7 +30,7 @@ TEST(RtcmPrinterTest, Instantiate) bool rtcm_file_output_enabled = false; unsigned short rtcm_tcp_port = 2101; unsigned short rtcm_station_id = 1234; - auto RTCM_printer = std::make_unique(filename, rtcm_file_output_enabled, flag_rtcm_server, flag_rtcm_tty_port, rtcm_tcp_port, rtcm_station_id, rtcm_dump_devname); + auto RTCM_printer = std::make_unique(filename, rtcm_file_output_enabled, flag_rtcm_server, flag_rtcm_tty_port, rtcm_tcp_port, rtcm_station_id, rtcm_dump_devname, GPS_1C); } @@ -43,7 +44,7 @@ TEST(RtcmPrinterTest, Run) unsigned short rtcm_tcp_port = 2101; unsigned short rtcm_station_id = 1234; - auto RTCM_printer = std::make_unique(filename, rtcm_file_output_enabled, flag_rtcm_server, flag_rtcm_tty_port, rtcm_tcp_port, rtcm_station_id, rtcm_dump_devname); + auto RTCM_printer = std::make_unique(filename, rtcm_file_output_enabled, flag_rtcm_server, flag_rtcm_tty_port, rtcm_tcp_port, rtcm_station_id, rtcm_dump_devname, GPS_1C); std::string reference_msg = "D300133ED7D30202980EDEEF34B4BD62AC0941986F33360B98";