Add work on OSNMA receiver

This commit is contained in:
Carles Fernandez
2023-05-23 12:11:53 +02:00
parent d8a3ae005d
commit 916dde2174
14 changed files with 411 additions and 2 deletions
@@ -105,6 +105,7 @@ galileo_telemetry_decoder_gs::galileo_telemetry_decoder_gs(
d_enable_reed_solomon_inav(false),
d_valid_timetag(false),
d_E6_TOW_set(false),
d_there_are_e1_channels(conf.there_are_e1_channels),
d_there_are_e6_channels(conf.there_are_e6_channels)
{
// prevent telemetry symbols accumulation in output buffers
@@ -114,12 +115,19 @@ galileo_telemetry_decoder_gs::galileo_telemetry_decoder_gs(
// Control messages to tracking block
this->message_port_register_out(pmt::mp("telemetry_to_trk"));
if (d_there_are_e1_channels)
{
// register OSM out
this->message_port_register_out(pmt::mp("OSNMA_from_TLM"));
}
if (d_there_are_e6_channels)
{
// register Gal E6 messages HAS out
this->message_port_register_out(pmt::mp("E6_HAS_from_TLM"));
// register TOW from map out
this->message_port_register_out(pmt::mp("TOW_from_TLM"));
// register TOW to TLM input
this->message_port_register_in(pmt::mp("TOW_to_TLM"));
// handler for input port
@@ -503,8 +511,26 @@ void galileo_telemetry_decoder_gs::decode_INAV_word(float *page_part_symbols, in
if (d_band == '1' && d_inav_nav.have_new_nma() == true)
{
const std::shared_ptr<OSNMA_msg> tmp_obj = std::make_shared<OSNMA_msg>(d_inav_nav.get_osnma_msg());
// this->message_port_pub(pmt::mp("whatever"), pmt::make_any(tmp_obj));
std::cout << "Galileo OSNMA message received in channel " << d_channel << " from satellite " << d_satellite << std::endl;
this->message_port_pub(pmt::mp("OSNMA_from_TLM"), pmt::make_any(tmp_obj));
uint8_t nma_status = (tmp_obj->hkroot[0] & 0b11000000) << 6;
std::string nma_status_string;
if (nma_status == 0)
{
nma_status_string = std::string("(Reserved mode)");
}
else if (nma_status == 1)
{
nma_status_string = std::string("(Test mode)");
}
else if (nma_status == 2)
{
nma_status_string = std::string("(Operational mode)");
}
else if (nma_status == 3)
{
nma_status_string = std::string("(Do not use mode)");
}
std::cout << "Galileo OSNMA message " << nma_status_string << " received in channel " << d_channel << " from satellite " << d_satellite << std::endl;
}
}
@@ -151,6 +151,7 @@ private:
bool d_enable_reed_solomon_inav;
bool d_valid_timetag;
bool d_E6_TOW_set;
bool d_there_are_e1_channels;
bool d_there_are_e6_channels;
};
@@ -30,6 +30,11 @@ void Tlm_Conf::SetFromConfiguration(const ConfigurationInterface *configuration,
const std::string default_crc_stats_dumpname("telemetry_crc_stats");
dump_crc_stats_filename = configuration->property(role + ".dump_crc_stats_filename", default_crc_stats_dumpname);
enable_navdata_monitor = configuration->property("NavDataMonitor.enable_monitor", false);
if (configuration->property("Channels_1B.count", 0) > 0)
{
there_are_e1_channels = true;
}
if (configuration->property("Channels_E6.count", 0) > 0)
{
there_are_e6_channels = true;
@@ -42,6 +42,7 @@ public:
bool enable_reed_solomon{false}; // for INAV message in Galileo E1B
bool dump_crc_stats{false}; // telemetry CRC statistics
bool enable_navdata_monitor{false};
bool there_are_e1_channels{false};
bool there_are_e6_channels{false};
};