From 76b3b932eb740c9ffc0d6628b775ca367a82bac5 Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Tue, 7 May 2019 18:52:08 +0200 Subject: [PATCH] Fix RINEX nav annotations --- .../PVT/gnuradio_blocks/rtklib_pvt_gs.cc | 543 +++++++++--------- 1 file changed, 271 insertions(+), 272 deletions(-) diff --git a/src/algorithms/PVT/gnuradio_blocks/rtklib_pvt_gs.cc b/src/algorithms/PVT/gnuradio_blocks/rtklib_pvt_gs.cc index b74741c1a..b0d03ae2a 100644 --- a/src/algorithms/PVT/gnuradio_blocks/rtklib_pvt_gs.cc +++ b/src/algorithms/PVT/gnuradio_blocks/rtklib_pvt_gs.cc @@ -1104,317 +1104,316 @@ void rtklib_pvt_gs::msg_handler_telemetry(const pmt::pmt_t& msg) break; } } - d_pvt_solver->gps_cnav_ephemeris_map[gps_cnav_ephemeris->i_satellite_PRN] = *gps_cnav_ephemeris; - DLOG(INFO) << "New GPS CNAV ephemeris record has arrived "; - } - else if (pmt::any_ref(msg).type() == typeid(std::shared_ptr)) - { - // ### GPS CNAV IONO ### - std::shared_ptr gps_cnav_iono; - gps_cnav_iono = boost::any_cast>(pmt::any_ref(msg)); - d_pvt_solver->gps_cnav_iono = *gps_cnav_iono; - DLOG(INFO) << "New CNAV IONO record has arrived "; - } - else if (pmt::any_ref(msg).type() == typeid(std::shared_ptr)) - { - // ### GPS CNAV UTC MODEL ### - std::shared_ptr gps_cnav_utc_model; - gps_cnav_utc_model = boost::any_cast>(pmt::any_ref(msg)); - d_pvt_solver->gps_cnav_utc_model = *gps_cnav_utc_model; - DLOG(INFO) << "New CNAV UTC record has arrived "; } + d_pvt_solver->gps_cnav_ephemeris_map[gps_cnav_ephemeris->i_satellite_PRN] = *gps_cnav_ephemeris; + DLOG(INFO) << "New GPS CNAV ephemeris record has arrived "; + } + else if (pmt::any_ref(msg).type() == typeid(std::shared_ptr)) + { + // ### GPS CNAV IONO ### + std::shared_ptr gps_cnav_iono; + gps_cnav_iono = boost::any_cast>(pmt::any_ref(msg)); + d_pvt_solver->gps_cnav_iono = *gps_cnav_iono; + DLOG(INFO) << "New CNAV IONO record has arrived "; + } + else if (pmt::any_ref(msg).type() == typeid(std::shared_ptr)) + { + // ### GPS CNAV UTC MODEL ### + std::shared_ptr gps_cnav_utc_model; + gps_cnav_utc_model = boost::any_cast>(pmt::any_ref(msg)); + d_pvt_solver->gps_cnav_utc_model = *gps_cnav_utc_model; + DLOG(INFO) << "New CNAV UTC record has arrived "; + } - else if (pmt::any_ref(msg).type() == typeid(std::shared_ptr)) - { - // ### GPS ALMANAC ### - std::shared_ptr gps_almanac; - gps_almanac = boost::any_cast>(pmt::any_ref(msg)); - d_pvt_solver->gps_almanac_map[gps_almanac->i_satellite_PRN] = *gps_almanac; - DLOG(INFO) << "New GPS almanac record has arrived "; - } + else if (pmt::any_ref(msg).type() == typeid(std::shared_ptr)) + { + // ### GPS ALMANAC ### + std::shared_ptr gps_almanac; + gps_almanac = boost::any_cast>(pmt::any_ref(msg)); + d_pvt_solver->gps_almanac_map[gps_almanac->i_satellite_PRN] = *gps_almanac; + DLOG(INFO) << "New GPS almanac record has arrived "; + } - // **************** Galileo telemetry ******************** - else if (pmt::any_ref(msg).type() == typeid(std::shared_ptr)) + // **************** Galileo telemetry ******************** + else if (pmt::any_ref(msg).type() == typeid(std::shared_ptr)) + { + // ### Galileo EPHEMERIS ### + std::shared_ptr galileo_eph; + galileo_eph = boost::any_cast>(pmt::any_ref(msg)); + // insert new ephemeris record + DLOG(INFO) << "Galileo New Ephemeris record inserted in global map with TOW =" << galileo_eph->TOW_5 + << ", GALILEO Week Number =" << galileo_eph->WN_5 + << " and Ephemeris IOD = " << galileo_eph->IOD_ephemeris; + // update/insert new ephemeris record to the global ephemeris map + if (b_rinex_header_written) // The header is already written, we can now log the navigation message data { - // ### Galileo EPHEMERIS ### - std::shared_ptr galileo_eph; - galileo_eph = boost::any_cast>(pmt::any_ref(msg)); - // insert new ephemeris record - DLOG(INFO) << "Galileo New Ephemeris record inserted in global map with TOW =" << galileo_eph->TOW_5 - << ", GALILEO Week Number =" << galileo_eph->WN_5 - << " and Ephemeris IOD = " << galileo_eph->IOD_ephemeris; - // update/insert new ephemeris record to the global ephemeris map - if (b_rinex_header_written) // The header is already written, we can now log the navigation message data + bool new_annotation = false; + if (d_pvt_solver->galileo_ephemeris_map.find(galileo_eph->i_satellite_PRN) == d_pvt_solver->galileo_ephemeris_map.cend()) { - bool new_annotation = false; - if (d_pvt_solver->galileo_ephemeris_map.find(galileo_eph->i_satellite_PRN) == d_pvt_solver->galileo_ephemeris_map.cend()) + new_annotation = true; + } + else + { + if (d_pvt_solver->galileo_ephemeris_map[galileo_eph->i_satellite_PRN].t0e_1 != galileo_eph->t0e_1) { new_annotation = true; } - else + } + if (new_annotation == true) + { + // New record! + std::map new_gal_eph; + std::map new_cnav_eph; + std::map new_eph; + std::map new_glo_eph; + new_gal_eph[galileo_eph->i_satellite_PRN] = *galileo_eph; + switch (type_of_rx) { - if (d_pvt_solver->galileo_ephemeris_map[galileo_eph->i_satellite_PRN].t0e_1 != galileo_eph->t0e_1) - { - new_annotation = true; - } - } - if (new_annotation == true) - { - // New record! - std::map new_gal_eph; - std::map new_cnav_eph; - std::map new_eph; - std::map new_glo_eph; - new_gal_eph[galileo_eph->i_satellite_PRN] = *galileo_eph; - switch (type_of_rx) - { - case 6: // Galileo E5b only - rp->log_rinex_nav(rp->navGalFile, new_gal_eph); - break; - case 11: // GPS L1 C/A + Galileo E5b - rp->log_rinex_nav(rp->navMixFile, new_eph, new_gal_eph); - break; - case 13: // L5+E5a - rp->log_rinex_nav(rp->navFile, new_cnav_eph, new_gal_eph); - break; - case 15: // Galileo E1B + Galileo E5b - rp->log_rinex_nav(rp->navGalFile, new_gal_eph); - break; - case 27: // Galileo E1B + GLONASS L1 C/A - rp->log_rinex_nav(rp->navMixFile, new_gal_eph, new_glo_eph); - break; - case 30: // Galileo E1B + GLONASS L2 C/A - rp->log_rinex_nav(rp->navMixFile, new_gal_eph, new_glo_eph); - break; - case 32: // L1+E1+L5+E5a - rp->log_rinex_nav(rp->navMixFile, new_eph, new_gal_eph); - break; - case 33: // L1+E1+E5a - rp->log_rinex_nav(rp->navMixFile, new_eph, new_gal_eph); - break; - } + case 6: // Galileo E5b only + rp->log_rinex_nav(rp->navGalFile, new_gal_eph); + break; + case 11: // GPS L1 C/A + Galileo E5b + rp->log_rinex_nav(rp->navMixFile, new_eph, new_gal_eph); + break; + case 13: // L5+E5a + rp->log_rinex_nav(rp->navFile, new_cnav_eph, new_gal_eph); + break; + case 15: // Galileo E1B + Galileo E5b + rp->log_rinex_nav(rp->navGalFile, new_gal_eph); + break; + case 27: // Galileo E1B + GLONASS L1 C/A + rp->log_rinex_nav(rp->navMixFile, new_gal_eph, new_glo_eph); + break; + case 30: // Galileo E1B + GLONASS L2 C/A + rp->log_rinex_nav(rp->navMixFile, new_gal_eph, new_glo_eph); + break; + case 32: // L1+E1+L5+E5a + rp->log_rinex_nav(rp->navMixFile, new_eph, new_gal_eph); + break; + case 33: // L1+E1+E5a + rp->log_rinex_nav(rp->navMixFile, new_eph, new_gal_eph); + break; } } - - d_pvt_solver->galileo_ephemeris_map[galileo_eph->i_satellite_PRN] = *galileo_eph; } - else if (pmt::any_ref(msg).type() == typeid(std::shared_ptr)) - { - // ### Galileo IONO ### - std::shared_ptr galileo_iono; - galileo_iono = boost::any_cast>(pmt::any_ref(msg)); - d_pvt_solver->galileo_iono = *galileo_iono; - DLOG(INFO) << "New IONO record has arrived "; - } - else if (pmt::any_ref(msg).type() == typeid(std::shared_ptr)) - { - // ### Galileo UTC MODEL ### - std::shared_ptr galileo_utc_model; - galileo_utc_model = boost::any_cast>(pmt::any_ref(msg)); - d_pvt_solver->galileo_utc_model = *galileo_utc_model; - DLOG(INFO) << "New UTC record has arrived "; - } - else if (pmt::any_ref(msg).type() == typeid(std::shared_ptr)) - { - // ### Galileo Almanac ### - std::shared_ptr galileo_almanac_helper; - galileo_almanac_helper = boost::any_cast>(pmt::any_ref(msg)); + d_pvt_solver->galileo_ephemeris_map[galileo_eph->i_satellite_PRN] = *galileo_eph; + } + else if (pmt::any_ref(msg).type() == typeid(std::shared_ptr)) + { + // ### Galileo IONO ### + std::shared_ptr galileo_iono; + galileo_iono = boost::any_cast>(pmt::any_ref(msg)); + d_pvt_solver->galileo_iono = *galileo_iono; + DLOG(INFO) << "New IONO record has arrived "; + } + else if (pmt::any_ref(msg).type() == typeid(std::shared_ptr)) + { + // ### Galileo UTC MODEL ### + std::shared_ptr galileo_utc_model; + galileo_utc_model = boost::any_cast>(pmt::any_ref(msg)); + d_pvt_solver->galileo_utc_model = *galileo_utc_model; + DLOG(INFO) << "New UTC record has arrived "; + } + else if (pmt::any_ref(msg).type() == typeid(std::shared_ptr)) + { + // ### Galileo Almanac ### + std::shared_ptr galileo_almanac_helper; + galileo_almanac_helper = boost::any_cast>(pmt::any_ref(msg)); - Galileo_Almanac sv1 = galileo_almanac_helper->get_almanac(1); - Galileo_Almanac sv2 = galileo_almanac_helper->get_almanac(2); - Galileo_Almanac sv3 = galileo_almanac_helper->get_almanac(3); + Galileo_Almanac sv1 = galileo_almanac_helper->get_almanac(1); + Galileo_Almanac sv2 = galileo_almanac_helper->get_almanac(2); + Galileo_Almanac sv3 = galileo_almanac_helper->get_almanac(3); - if (sv1.i_satellite_PRN != 0) + if (sv1.i_satellite_PRN != 0) + { + d_pvt_solver->galileo_almanac_map[sv1.i_satellite_PRN] = sv1; + } + if (sv2.i_satellite_PRN != 0) + { + d_pvt_solver->galileo_almanac_map[sv2.i_satellite_PRN] = sv2; + } + if (sv3.i_satellite_PRN != 0) + { + d_pvt_solver->galileo_almanac_map[sv3.i_satellite_PRN] = sv3; + } + DLOG(INFO) << "New Galileo Almanac data have arrived "; + } + else if (pmt::any_ref(msg).type() == typeid(std::shared_ptr)) + { + // ### Galileo Almanac ### + std::shared_ptr galileo_alm; + galileo_alm = boost::any_cast>(pmt::any_ref(msg)); + // update/insert new almanac record to the global almanac map + d_pvt_solver->galileo_almanac_map[galileo_alm->i_satellite_PRN] = *galileo_alm; + } + + // **************** GLONASS GNAV Telemetry ************************** + else if (pmt::any_ref(msg).type() == typeid(std::shared_ptr)) + { + // ### GLONASS GNAV EPHEMERIS ### + std::shared_ptr glonass_gnav_eph; + glonass_gnav_eph = boost::any_cast>(pmt::any_ref(msg)); + // TODO Add GLONASS with gps week number and tow, + // insert new ephemeris record + DLOG(INFO) << "GLONASS GNAV New Ephemeris record inserted in global map with TOW =" << glonass_gnav_eph->d_TOW + << ", Week Number =" << glonass_gnav_eph->d_WN + << " and Ephemeris IOD in UTC = " << glonass_gnav_eph->compute_GLONASS_time(glonass_gnav_eph->d_t_b) + << " from SV = " << glonass_gnav_eph->i_satellite_slot_number; + // update/insert new ephemeris record to the global ephemeris map + if (b_rinex_header_written) // The header is already written, we can now log the navigation message data + { + bool new_annotation = false; + if (d_pvt_solver->glonass_gnav_ephemeris_map.find(glonass_gnav_eph->i_satellite_PRN) == d_pvt_solver->glonass_gnav_ephemeris_map.cend()) { - d_pvt_solver->galileo_almanac_map[sv1.i_satellite_PRN] = sv1; + new_annotation = true; } - if (sv2.i_satellite_PRN != 0) + else { - d_pvt_solver->galileo_almanac_map[sv2.i_satellite_PRN] = sv2; - } - if (sv3.i_satellite_PRN != 0) - { - d_pvt_solver->galileo_almanac_map[sv3.i_satellite_PRN] = sv3; - } - DLOG(INFO) << "New Galileo Almanac data have arrived "; - } - else if (pmt::any_ref(msg).type() == typeid(std::shared_ptr)) - { - // ### Galileo Almanac ### - std::shared_ptr galileo_alm; - galileo_alm = boost::any_cast>(pmt::any_ref(msg)); - // update/insert new almanac record to the global almanac map - d_pvt_solver->galileo_almanac_map[galileo_alm->i_satellite_PRN] = *galileo_alm; - } - - // **************** GLONASS GNAV Telemetry ************************** - else if (pmt::any_ref(msg).type() == typeid(std::shared_ptr)) - { - // ### GLONASS GNAV EPHEMERIS ### - std::shared_ptr glonass_gnav_eph; - glonass_gnav_eph = boost::any_cast>(pmt::any_ref(msg)); - // TODO Add GLONASS with gps week number and tow, - // insert new ephemeris record - DLOG(INFO) << "GLONASS GNAV New Ephemeris record inserted in global map with TOW =" << glonass_gnav_eph->d_TOW - << ", Week Number =" << glonass_gnav_eph->d_WN - << " and Ephemeris IOD in UTC = " << glonass_gnav_eph->compute_GLONASS_time(glonass_gnav_eph->d_t_b) - << " from SV = " << glonass_gnav_eph->i_satellite_slot_number; - // update/insert new ephemeris record to the global ephemeris map - if (b_rinex_header_written) // The header is already written, we can now log the navigation message data - { - bool new_annotation = false; - if (d_pvt_solver->glonass_gnav_ephemeris_map.find(glonass_gnav_eph->i_satellite_PRN) == d_pvt_solver->glonass_gnav_ephemeris_map.cend()) + if (d_pvt_solver->glonass_gnav_ephemeris_map[glonass_gnav_eph->i_satellite_PRN].d_t_b != glonass_gnav_eph->d_t_b) { new_annotation = true; } - else + } + if (new_annotation == true) + { + // New record! + std::map new_gal_eph; + std::map new_cnav_eph; + std::map new_eph; + std::map new_glo_eph; + new_glo_eph[glonass_gnav_eph->i_satellite_PRN] = *glonass_gnav_eph; + switch (type_of_rx) { - if (d_pvt_solver->glonass_gnav_ephemeris_map[glonass_gnav_eph->i_satellite_PRN].d_t_b != glonass_gnav_eph->d_t_b) + case 25: // GLONASS L1 C/A + GLONASS L2 C/A + rp->log_rinex_nav(rp->navGloFile, new_glo_eph); + break; + case 26: // GPS L1 C/A + GLONASS L1 C/A + if (d_rinex_version == 3) { - new_annotation = true; + rp->log_rinex_nav(rp->navMixFile, new_eph, new_glo_eph); } - } - if (new_annotation == true) - { - // New record! - std::map new_gal_eph; - std::map new_cnav_eph; - std::map new_eph; - std::map new_glo_eph; - new_glo_eph[glonass_gnav_eph->i_satellite_PRN] = *glonass_gnav_eph; - switch (type_of_rx) + if (d_rinex_version == 2) { - case 25: // GLONASS L1 C/A + GLONASS L2 C/A rp->log_rinex_nav(rp->navGloFile, new_glo_eph); - break; - case 26: // GPS L1 C/A + GLONASS L1 C/A - if (d_rinex_version == 3) - { - rp->log_rinex_nav(rp->navMixFile, new_eph, new_glo_eph); - } - if (d_rinex_version == 2) - { - rp->log_rinex_nav(rp->navGloFile, new_glo_eph); - } - break; - case 27: // Galileo E1B + GLONASS L1 C/A - rp->log_rinex_nav(rp->navMixFile, new_gal_eph, new_glo_eph); - break; - case 28: // GPS L2C + GLONASS L1 C/A - rp->log_rinex_nav(rp->navMixFile, new_cnav_eph, new_glo_eph); - break; - case 29: // GPS L1 C/A + GLONASS L2 C/A - if (d_rinex_version == 3) - { - rp->log_rinex_nav(rp->navMixFile, new_eph, new_glo_eph); - } - if (d_rinex_version == 2) - { - rp->log_rinex_nav(rp->navGloFile, new_glo_eph); - } - break; - case 30: // Galileo E1B + GLONASS L2 C/A - rp->log_rinex_nav(rp->navMixFile, new_gal_eph, new_glo_eph); - break; - case 31: // GPS L2C + GLONASS L2 C/A - rp->log_rinex_nav(rp->navMixFile, new_cnav_eph, new_glo_eph); - break; - default: - break; } + break; + case 27: // Galileo E1B + GLONASS L1 C/A + rp->log_rinex_nav(rp->navMixFile, new_gal_eph, new_glo_eph); + break; + case 28: // GPS L2C + GLONASS L1 C/A + rp->log_rinex_nav(rp->navMixFile, new_cnav_eph, new_glo_eph); + break; + case 29: // GPS L1 C/A + GLONASS L2 C/A + if (d_rinex_version == 3) + { + rp->log_rinex_nav(rp->navMixFile, new_eph, new_glo_eph); + } + if (d_rinex_version == 2) + { + rp->log_rinex_nav(rp->navGloFile, new_glo_eph); + } + break; + case 30: // Galileo E1B + GLONASS L2 C/A + rp->log_rinex_nav(rp->navMixFile, new_gal_eph, new_glo_eph); + break; + case 31: // GPS L2C + GLONASS L2 C/A + rp->log_rinex_nav(rp->navMixFile, new_cnav_eph, new_glo_eph); + break; + default: + break; } } - d_pvt_solver->glonass_gnav_ephemeris_map[glonass_gnav_eph->i_satellite_PRN] = *glonass_gnav_eph; - } - else if (pmt::any_ref(msg).type() == typeid(std::shared_ptr)) - { - // ### GLONASS GNAV UTC MODEL ### - std::shared_ptr glonass_gnav_utc_model; - glonass_gnav_utc_model = boost::any_cast>(pmt::any_ref(msg)); - d_pvt_solver->glonass_gnav_utc_model = *glonass_gnav_utc_model; - DLOG(INFO) << "New GLONASS GNAV UTC record has arrived "; - } - else if (pmt::any_ref(msg).type() == typeid(std::shared_ptr)) - { - // ### GLONASS GNAV Almanac ### - std::shared_ptr glonass_gnav_almanac; - glonass_gnav_almanac = boost::any_cast>(pmt::any_ref(msg)); - d_pvt_solver->glonass_gnav_almanac = *glonass_gnav_almanac; - DLOG(INFO) << "New GLONASS GNAV Almanac has arrived " - << ", GLONASS GNAV Slot Number =" << glonass_gnav_almanac->d_n_A; } + d_pvt_solver->glonass_gnav_ephemeris_map[glonass_gnav_eph->i_satellite_PRN] = *glonass_gnav_eph; + } + else if (pmt::any_ref(msg).type() == typeid(std::shared_ptr)) + { + // ### GLONASS GNAV UTC MODEL ### + std::shared_ptr glonass_gnav_utc_model; + glonass_gnav_utc_model = boost::any_cast>(pmt::any_ref(msg)); + d_pvt_solver->glonass_gnav_utc_model = *glonass_gnav_utc_model; + DLOG(INFO) << "New GLONASS GNAV UTC record has arrived "; + } + else if (pmt::any_ref(msg).type() == typeid(std::shared_ptr)) + { + // ### GLONASS GNAV Almanac ### + std::shared_ptr glonass_gnav_almanac; + glonass_gnav_almanac = boost::any_cast>(pmt::any_ref(msg)); + d_pvt_solver->glonass_gnav_almanac = *glonass_gnav_almanac; + DLOG(INFO) << "New GLONASS GNAV Almanac has arrived " + << ", GLONASS GNAV Slot Number =" << glonass_gnav_almanac->d_n_A; + } - // ************* BeiDou telemetry ***************** - else if (pmt::any_ref(msg).type() == typeid(std::shared_ptr)) + // ************* BeiDou telemetry ***************** + else if (pmt::any_ref(msg).type() == typeid(std::shared_ptr)) + { + // ### Beidou EPHEMERIS ### + std::shared_ptr bds_dnav_eph; + bds_dnav_eph = boost::any_cast>(pmt::any_ref(msg)); + DLOG(INFO) << "Ephemeris record has arrived from SAT ID " + << bds_dnav_eph->i_satellite_PRN << " (Block " + << bds_dnav_eph->satelliteBlock[bds_dnav_eph->i_satellite_PRN] << ")" + << "inserted with Toe=" << bds_dnav_eph->d_Toe << " and BDS Week=" + << bds_dnav_eph->i_BEIDOU_week; + // update/insert new ephemeris record to the global ephemeris map + if (b_rinex_header_written) // The header is already written, we can now log the navigation message data { - // ### Beidou EPHEMERIS ### - std::shared_ptr bds_dnav_eph; - bds_dnav_eph = boost::any_cast>(pmt::any_ref(msg)); - DLOG(INFO) << "Ephemeris record has arrived from SAT ID " - << bds_dnav_eph->i_satellite_PRN << " (Block " - << bds_dnav_eph->satelliteBlock[bds_dnav_eph->i_satellite_PRN] << ")" - << "inserted with Toe=" << bds_dnav_eph->d_Toe << " and BDS Week=" - << bds_dnav_eph->i_BEIDOU_week; - // update/insert new ephemeris record to the global ephemeris map - if (b_rinex_header_written) // The header is already written, we can now log the navigation message data + bool new_annotation = false; + if (d_pvt_solver->beidou_dnav_ephemeris_map.find(bds_dnav_eph->i_satellite_PRN) == d_pvt_solver->beidou_dnav_ephemeris_map.cend()) { - bool new_annotation = false; - if (d_pvt_solver->beidou_dnav_ephemeris_map.find(bds_dnav_eph->i_satellite_PRN) == d_pvt_solver->beidou_dnav_ephemeris_map.cend()) + new_annotation = true; + } + else + { + if (d_pvt_solver->beidou_dnav_ephemeris_map[bds_dnav_eph->i_satellite_PRN].d_Toc != bds_dnav_eph->d_Toc) { new_annotation = true; } - else + } + if (new_annotation == true) + { + // New record! + std::map new_bds_eph; + new_bds_eph[bds_dnav_eph->i_satellite_PRN] = *bds_dnav_eph; + switch (type_of_rx) { - if (d_pvt_solver->beidou_dnav_ephemeris_map[bds_dnav_eph->i_satellite_PRN].d_Toc != bds_dnav_eph->d_Toc) - { - new_annotation = true; - } - } - if (new_annotation == true) - { - // New record! - std::map new_bds_eph; - new_bds_eph[bds_dnav_eph->i_satellite_PRN] = *bds_dnav_eph; - switch (type_of_rx) - { - case 50: // BDS B1I only - rp->log_rinex_nav(rp->navFile, new_bds_eph); - break; - default: - break; - } + case 50: // BDS B1I only + rp->log_rinex_nav(rp->navFile, new_bds_eph); + break; + default: + break; } } - d_pvt_solver->beidou_dnav_ephemeris_map[bds_dnav_eph->i_satellite_PRN] = *bds_dnav_eph; - } - else if (pmt::any_ref(msg).type() == typeid(std::shared_ptr)) - { - // ### BeiDou IONO ### - std::shared_ptr bds_dnav_iono; - bds_dnav_iono = boost::any_cast>(pmt::any_ref(msg)); - d_pvt_solver->beidou_dnav_iono = *bds_dnav_iono; - DLOG(INFO) << "New BeiDou DNAV IONO record has arrived "; - } - else if (pmt::any_ref(msg).type() == typeid(std::shared_ptr)) - { - // ### BeiDou UTC MODEL ### - std::shared_ptr bds_dnav_utc_model; - bds_dnav_utc_model = boost::any_cast>(pmt::any_ref(msg)); - d_pvt_solver->beidou_dnav_utc_model = *bds_dnav_utc_model; - DLOG(INFO) << "New BeiDou DNAV UTC record has arrived "; - } - else if (pmt::any_ref(msg).type() == typeid(std::shared_ptr)) - { - // ### BeiDou ALMANAC ### - std::shared_ptr bds_dnav_almanac; - bds_dnav_almanac = boost::any_cast>(pmt::any_ref(msg)); - d_pvt_solver->beidou_dnav_almanac_map[bds_dnav_almanac->i_satellite_PRN] = *bds_dnav_almanac; - DLOG(INFO) << "New BeiDou DNAV almanac record has arrived "; - } - else - { - LOG(WARNING) << "msg_handler_telemetry unknown object type!"; } + d_pvt_solver->beidou_dnav_ephemeris_map[bds_dnav_eph->i_satellite_PRN] = *bds_dnav_eph; + } + else if (pmt::any_ref(msg).type() == typeid(std::shared_ptr)) + { + // ### BeiDou IONO ### + std::shared_ptr bds_dnav_iono; + bds_dnav_iono = boost::any_cast>(pmt::any_ref(msg)); + d_pvt_solver->beidou_dnav_iono = *bds_dnav_iono; + DLOG(INFO) << "New BeiDou DNAV IONO record has arrived "; + } + else if (pmt::any_ref(msg).type() == typeid(std::shared_ptr)) + { + // ### BeiDou UTC MODEL ### + std::shared_ptr bds_dnav_utc_model; + bds_dnav_utc_model = boost::any_cast>(pmt::any_ref(msg)); + d_pvt_solver->beidou_dnav_utc_model = *bds_dnav_utc_model; + DLOG(INFO) << "New BeiDou DNAV UTC record has arrived "; + } + else if (pmt::any_ref(msg).type() == typeid(std::shared_ptr)) + { + // ### BeiDou ALMANAC ### + std::shared_ptr bds_dnav_almanac; + bds_dnav_almanac = boost::any_cast>(pmt::any_ref(msg)); + d_pvt_solver->beidou_dnav_almanac_map[bds_dnav_almanac->i_satellite_PRN] = *bds_dnav_almanac; + DLOG(INFO) << "New BeiDou DNAV almanac record has arrived "; + } + else + { + LOG(WARNING) << "msg_handler_telemetry unknown object type!"; } } catch (boost::bad_any_cast& e)