From da9fa856319c9a8607ea01533845e3d9cd286e4f Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Wed, 29 Sep 2021 09:01:13 +0200 Subject: [PATCH] Fix reading of cell masks. They are not transmitted if the corresponding cell mask availability flag is zero --- src/algorithms/PVT/libs/has_simple_printer.cc | 23 +++++++++++++++---- src/core/libs/galileo_e6_has_msg_receiver.cc | 17 ++++++++------ 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/src/algorithms/PVT/libs/has_simple_printer.cc b/src/algorithms/PVT/libs/has_simple_printer.cc index 363c9fd8a..dc56b544e 100644 --- a/src/algorithms/PVT/libs/has_simple_printer.cc +++ b/src/algorithms/PVT/libs/has_simple_printer.cc @@ -235,10 +235,25 @@ bool Has_Simple_Printer::print_message(const Galileo_HAS_data* const has_data) d_has_file << indent << indent << "Cell Mask Availability Flag: " << print_vector(has_data->cell_mask_availability_flag) << '\n'; for (uint8_t i = 0; i < has_data->Nsys; i++) { - const std::string text("Cell Mask " + std::to_string(i) + ": "); - d_has_file << indent << indent << text; - const std::string filler(indent.length() * 2 + text.length(), ' '); - d_has_file << print_matrix(has_data->cell_mask[i], filler); + if (has_data->cell_mask_availability_flag[i] == true) + { + std::string text; + if (has_data->gnss_id_mask[i] == 0) + { + text = "Cell Mask for GPS: "; + } + else if (has_data->gnss_id_mask[i] == 2) + { + text = "Cell Mask for Galileo: "; + } + else + { + text = "Cell Mask for Reserved: "; + } + d_has_file << indent << indent << text; + const std::string filler(indent.length() * 2 + text.length(), ' '); + d_has_file << print_matrix(has_data->cell_mask[i], filler); + } } d_has_file << indent << indent << "Nav message: " << print_vector(has_data->nav_message) << " (0: GPS LNAV or Galileo I/NAV)\n"; diff --git a/src/core/libs/galileo_e6_has_msg_receiver.cc b/src/core/libs/galileo_e6_has_msg_receiver.cc index 21772d87b..423e9bbdc 100644 --- a/src/core/libs/galileo_e6_has_msg_receiver.cc +++ b/src/core/libs/galileo_e6_has_msg_receiver.cc @@ -413,17 +413,20 @@ void galileo_e6_has_msg_receiver::read_MT1_body(const std::string& message_body) d_cell_mask_availability_flag[d_HAS_data.header.mask_id][i] = d_HAS_data.cell_mask_availability_flag[i]; message = std::string(message.begin() + 1, message.end()); - int size_cell = ones_in_satellite_mask * ones_in_signal_mask; - int pos = 0; - for (int s = 0; s < ones_in_satellite_mask; s++) + if (d_HAS_data.cell_mask_availability_flag[i] == true) { - for (int sig = 0; sig < ones_in_signal_mask; sig++) + int size_cell = ones_in_satellite_mask * ones_in_signal_mask; + int pos = 0; + for (int s = 0; s < ones_in_satellite_mask; s++) { - d_HAS_data.cell_mask[i][s][sig] = (message[pos] == '1' ? true : false); - pos++; + for (int sig = 0; sig < ones_in_signal_mask; sig++) + { + d_HAS_data.cell_mask[i][s][sig] = (message[pos] == '1' ? true : false); + pos++; + } } + message = std::string(message.begin() + size_cell, message.end()); } - message = std::string(message.begin() + size_cell, message.end()); d_HAS_data.nav_message[i] = read_has_message_body_uint8(message.substr(0, HAS_MSG_NAV_MESSAGE_LENGTH)); d_nav_message_mask[d_HAS_data.header.mask_id][i] = d_HAS_data.nav_message[i];