Remove InitializeDecoder function

This commit is contained in:
Mathieu Favreau
2026-04-22 12:21:38 +00:00
parent 3eb8ba227b
commit 23a758e599
48 changed files with 348 additions and 485 deletions
@@ -24,10 +24,11 @@ BeidouB1iTelemetryDecoder::BeidouB1iTelemetryDecoder(
const std::string& role,
unsigned int in_streams,
unsigned int out_streams)
: TelemetryDecoderAdapterBase(configuration,
: TelemetryDecoderAdapterBase(
role,
"BEIDOU_B1I_Telemetry_Decoder",
in_streams,
out_streams)
out_streams,
beidou_b1i_make_telemetry_decoder_gs(get_tlm_conf(configuration, role)))
{
InitializeDecoder(beidou_b1i_make_telemetry_decoder_gs(satellite(), tlm_parameters_));
}
@@ -41,12 +41,6 @@ public:
const std::string& role,
unsigned int in_streams,
unsigned int out_streams);
//! Returns "BEIDOU_B1I_Telemetry_Decoder"
inline std::string implementation() override
{
return "BEIDOU_B1I_Telemetry_Decoder";
}
};
@@ -23,10 +23,11 @@ BeidouB3iTelemetryDecoder::BeidouB3iTelemetryDecoder(
const std::string &role,
unsigned int in_streams,
unsigned int out_streams)
: TelemetryDecoderAdapterBase(configuration,
: TelemetryDecoderAdapterBase(
role,
"BEIDOU_B3I_Telemetry_Decoder",
in_streams,
out_streams)
out_streams,
beidou_b3i_make_telemetry_decoder_gs(get_tlm_conf(configuration, role)))
{
InitializeDecoder(beidou_b3i_make_telemetry_decoder_gs(satellite(), tlm_parameters_));
}
@@ -39,12 +39,6 @@ public:
const ConfigurationInterface *configuration,
const std::string &role, unsigned int in_streams,
unsigned int out_streams);
//! Returns "BEIDOU_B3I_Telemetry_Decoder"
inline std::string implementation() override
{
return "BEIDOU_B3I_Telemetry_Decoder";
}
};
/** \} */
@@ -19,20 +19,33 @@
#include "galileo_e1b_telemetry_decoder.h"
#include "galileo_telemetry_decoder_gs.h"
namespace
{
Tlm_Conf get_e1_tlm_conf(const ConfigurationInterface* configuration, const std::string& role)
{
auto tlm_parameters = get_tlm_conf(configuration, role);
if (configuration != nullptr)
{
tlm_parameters.enable_reed_solomon = configuration->property(role + ".enable_reed_solomon", false);
tlm_parameters.use_ced = configuration->property(role + ".use_reduced_ced", false);
}
return tlm_parameters;
}
} // namespace
GalileoE1BTelemetryDecoder::GalileoE1BTelemetryDecoder(
const ConfigurationInterface* configuration,
const std::string& role,
unsigned int in_streams,
unsigned int out_streams)
: TelemetryDecoderAdapterBase(configuration,
: TelemetryDecoderAdapterBase(
role,
"Galileo_E1B_Telemetry_Decoder",
in_streams,
out_streams)
out_streams,
galileo_make_telemetry_decoder_gs(get_e1_tlm_conf(configuration, role), 1))
{
if (configuration != nullptr)
{
tlm_parameters_.enable_reed_solomon = configuration->property(role + ".enable_reed_solomon", false);
tlm_parameters_.use_ced = configuration->property(role + ".use_reduced_ced", false);
}
InitializeDecoder(galileo_make_telemetry_decoder_gs(satellite(), tlm_parameters_, 1));
}
@@ -41,14 +41,6 @@ public:
const std::string& role,
unsigned int in_streams,
unsigned int out_streams);
/*!
* \brief Returns "Galileo_E1B_Telemetry_Decoder"
*/
inline std::string implementation() override
{
return "Galileo_E1B_Telemetry_Decoder";
}
};
@@ -28,10 +28,11 @@ GalileoE5aTelemetryDecoder::GalileoE5aTelemetryDecoder(
const std::string& role,
unsigned int in_streams,
unsigned int out_streams)
: TelemetryDecoderAdapterBase(configuration,
: TelemetryDecoderAdapterBase(
role,
"Galileo_E5A_Telemetry_Decoder",
in_streams,
out_streams)
out_streams,
galileo_make_telemetry_decoder_gs(get_tlm_conf(configuration, role), 2))
{
InitializeDecoder(galileo_make_telemetry_decoder_gs(satellite(), tlm_parameters_, 2));
}
@@ -43,14 +43,6 @@ public:
const std::string& role,
unsigned int in_streams,
unsigned int out_streams);
/*!
* \brief Returns "Galileo_E5a_Telemetry_Decoder"
*/
inline std::string implementation() override
{
return "Galileo_E5A_Telemetry_Decoder";
}
};
@@ -25,10 +25,11 @@ GalileoE5bTelemetryDecoder::GalileoE5bTelemetryDecoder(
const std::string& role,
unsigned int in_streams,
unsigned int out_streams)
: TelemetryDecoderAdapterBase(configuration,
: TelemetryDecoderAdapterBase(
role,
"Galileo_E5b_Telemetry_Decoder",
in_streams,
out_streams)
out_streams,
galileo_make_telemetry_decoder_gs(get_tlm_conf(configuration, role), 1))
{
InitializeDecoder(galileo_make_telemetry_decoder_gs(satellite(), tlm_parameters_, 1));
}
@@ -41,14 +41,6 @@ public:
const std::string& role,
unsigned int in_streams,
unsigned int out_streams);
/*!
* \brief Returns "Galileo_E5b_Telemetry_Decoder"
*/
inline std::string implementation() override
{
return "Galileo_E5b_Telemetry_Decoder";
}
};
@@ -24,10 +24,11 @@ GalileoE6TelemetryDecoder::GalileoE6TelemetryDecoder(
const std::string& role,
unsigned int in_streams,
unsigned int out_streams)
: TelemetryDecoderAdapterBase(configuration,
: TelemetryDecoderAdapterBase(
role,
"Galileo_E6_Telemetry_Decoder",
in_streams,
out_streams)
out_streams,
galileo_make_telemetry_decoder_gs(get_tlm_conf(configuration, role), 3))
{
InitializeDecoder(galileo_make_telemetry_decoder_gs(satellite(), tlm_parameters_, 3));
}
@@ -40,14 +40,6 @@ public:
const std::string& role,
unsigned int in_streams,
unsigned int out_streams);
/*!
* \brief Returns "Galileo_E6_Telemetry_Decoder"
*/
inline std::string implementation() override
{
return "Galileo_E6_Telemetry_Decoder";
}
};
@@ -24,10 +24,11 @@ GlonassL1CaTelemetryDecoder::GlonassL1CaTelemetryDecoder(
const std::string& role,
unsigned int in_streams,
unsigned int out_streams)
: TelemetryDecoderAdapterBase(configuration,
: TelemetryDecoderAdapterBase(
role,
"GLONASS_L1_CA_Telemetry_Decoder",
in_streams,
out_streams)
out_streams,
glonass_l1_ca_make_telemetry_decoder_gs(get_tlm_conf(configuration, role)))
{
InitializeDecoder(glonass_l1_ca_make_telemetry_decoder_gs(satellite(), tlm_parameters_));
}
@@ -40,12 +40,6 @@ public:
const std::string& role,
unsigned int in_streams,
unsigned int out_streams);
//! Returns "GLONASS_L1_CA_Telemetry_Decoder"
inline std::string implementation() override
{
return "GLONASS_L1_CA_Telemetry_Decoder";
}
};
@@ -23,10 +23,11 @@ GlonassL2CaTelemetryDecoder::GlonassL2CaTelemetryDecoder(
const std::string& role,
unsigned int in_streams,
unsigned int out_streams)
: TelemetryDecoderAdapterBase(configuration,
: TelemetryDecoderAdapterBase(
role,
"GLONASS_L2_CA_Telemetry_Decoder",
in_streams,
out_streams)
out_streams,
glonass_l2_ca_make_telemetry_decoder_gs(get_tlm_conf(configuration, role)))
{
InitializeDecoder(glonass_l2_ca_make_telemetry_decoder_gs(satellite(), tlm_parameters_));
}
@@ -39,12 +39,6 @@ public:
const std::string& role,
unsigned int in_streams,
unsigned int out_streams);
//! Returns "GLONASS_L2_CA_Telemetry_Decoder"
inline std::string implementation() override
{
return "GLONASS_L2_CA_Telemetry_Decoder";
}
};
@@ -25,10 +25,11 @@ GpsL1CaTelemetryDecoder::GpsL1CaTelemetryDecoder(
const std::string& role,
unsigned int in_streams,
unsigned int out_streams)
: TelemetryDecoderAdapterBase(configuration,
: TelemetryDecoderAdapterBase(
role,
"GPS_L1_CA_Telemetry_Decoder",
in_streams,
out_streams)
out_streams,
gps_l1_ca_make_telemetry_decoder_gs(get_tlm_conf(configuration, role)))
{
InitializeDecoder(gps_l1_ca_make_telemetry_decoder_gs(satellite(), tlm_parameters_));
}
@@ -42,12 +42,6 @@ public:
const std::string& role,
unsigned int in_streams,
unsigned int out_streams);
//! Returns "GPS_L1_CA_Telemetry_Decoder"
inline std::string implementation() override
{
return "GPS_L1_CA_Telemetry_Decoder";
}
};
@@ -24,10 +24,11 @@ GpsL2CTelemetryDecoder::GpsL2CTelemetryDecoder(
const std::string& role,
unsigned int in_streams,
unsigned int out_streams)
: TelemetryDecoderAdapterBase(configuration,
: TelemetryDecoderAdapterBase(
role,
"GPS_L2C_Telemetry_Decoder",
in_streams,
out_streams)
out_streams,
gps_l2c_make_telemetry_decoder_gs(get_tlm_conf(configuration, role)))
{
InitializeDecoder(gps_l2c_make_telemetry_decoder_gs(satellite(), tlm_parameters_));
}
@@ -40,12 +40,6 @@ public:
const std::string& role,
unsigned int in_streams,
unsigned int out_streams);
//! Returns "GPS_L2C_Telemetry_Decoder"
inline std::string implementation() override
{
return "GPS_L2C_Telemetry_Decoder";
}
};
@@ -24,10 +24,11 @@ GpsL5TelemetryDecoder::GpsL5TelemetryDecoder(
const std::string& role,
unsigned int in_streams,
unsigned int out_streams)
: TelemetryDecoderAdapterBase(configuration,
: TelemetryDecoderAdapterBase(
role,
"GPS_L5_Telemetry_Decoder",
in_streams,
out_streams)
out_streams,
gps_l5_make_telemetry_decoder_gs(get_tlm_conf(configuration, role)))
{
InitializeDecoder(gps_l5_make_telemetry_decoder_gs(satellite(), tlm_parameters_));
}
@@ -39,12 +39,6 @@ public:
const std::string& role,
unsigned int in_streams,
unsigned int out_streams);
//! Returns "GPS_L5_Telemetry_Decoder"
inline std::string implementation() override
{
return "GPS_L5_Telemetry_Decoder";
}
};
@@ -25,10 +25,11 @@ QzssL1TelemetryDecoder::QzssL1TelemetryDecoder(
const std::string& role,
unsigned int in_streams,
unsigned int out_streams)
: TelemetryDecoderAdapterBase(configuration,
: TelemetryDecoderAdapterBase(
role,
"QZSS_L1_Telemetry_Decoder",
in_streams,
out_streams)
out_streams,
gps_l1_ca_make_telemetry_decoder_gs(get_tlm_conf(configuration, role), L1LnavSystem::QZSS))
{
InitializeDecoder(gps_l1_ca_make_telemetry_decoder_gs(satellite(), tlm_parameters_, L1LnavSystem::QZSS));
}
@@ -42,12 +42,6 @@ public:
const std::string& role,
unsigned int in_streams,
unsigned int out_streams);
//! Returns "QZSS_L1_Telemetry_Decoder"
inline std::string implementation() override
{
return "QZSS_L1_Telemetry_Decoder";
}
};
@@ -25,10 +25,11 @@ QzssL5TelemetryDecoder::QzssL5TelemetryDecoder(
const std::string& role,
unsigned int in_streams,
unsigned int out_streams)
: TelemetryDecoderAdapterBase(configuration,
: TelemetryDecoderAdapterBase(
role,
"QZSS_L5_Telemetry_Decoder",
in_streams,
out_streams)
out_streams,
gps_l5_make_telemetry_decoder_gs(get_tlm_conf(configuration, role), CnavSystem::QZSS))
{
InitializeDecoder(gps_l5_make_telemetry_decoder_gs(satellite(), tlm_parameters_, CnavSystem::QZSS));
}
@@ -42,12 +42,6 @@ public:
const std::string& role,
unsigned int in_streams,
unsigned int out_streams);
//! Returns "QZSS_L5_Telemetry_Decoder"
inline std::string implementation() override
{
return "QZSS_L5_Telemetry_Decoder";
}
};
@@ -22,12 +22,11 @@ SbasL1TelemetryDecoder::SbasL1TelemetryDecoder(
const ConfigurationInterface* configuration,
const std::string& role,
unsigned int in_streams,
unsigned int out_streams) : TelemetryDecoderAdapterBase(configuration,
role,
unsigned int out_streams) : TelemetryDecoderAdapterBase(role,
"SBAS_L1_Telemetry_Decoder",
in_streams,
out_streams),
dump_filename_(configuration != nullptr ? configuration->property(role + ".dump_filename", std::string("./navigation.dat")) : std::string("./navigation.dat")),
dump_(configuration != nullptr ? configuration->property(role + ".dump", false) : false)
out_streams,
sbas_l1_make_telemetry_decoder_gs(configuration != nullptr ? configuration->property(role + ".dump", false) : false)),
dump_filename_(configuration != nullptr ? configuration->property(role + ".dump_filename", std::string("./navigation.dat")) : std::string("./navigation.dat"))
{
InitializeDecoder(sbas_l1_make_telemetry_decoder_gs(satellite(), dump_));
}
@@ -41,17 +41,8 @@ public:
unsigned int in_streams,
unsigned int out_streams);
/*!
* \brief Returns "SBAS_L1_Telemetry_Decoder"
*/
inline std::string implementation() override
{
return "SBAS_L1_Telemetry_Decoder";
}
private:
std::string dump_filename_;
bool dump_;
};
@@ -16,7 +16,6 @@
#include "telemetry_decoder_adapter_base.h"
#include <utility>
#if USE_GLOG_AND_GFLAGS
#include <glog/logging.h>
@@ -25,38 +24,31 @@
#endif
TelemetryDecoderAdapterBase::TelemetryDecoderAdapterBase(const ConfigurationInterface* configuration,
TelemetryDecoderAdapterBase::TelemetryDecoderAdapterBase(
const std::string& role,
const std::string& implementation,
unsigned int in_streams,
unsigned int out_streams) : role_(role),
in_streams_(in_streams),
out_streams_(out_streams)
unsigned int out_streams,
telemetry_impl_interface_sptr decoder) : telemetry_decoder_(std::move(decoder)),
role_(role),
implementation_(implementation)
{
DLOG(INFO) << "role " << role_;
if (configuration != nullptr)
{
tlm_parameters_.SetFromConfiguration(configuration, role_);
}
if (in_streams_ > 1)
DLOG(INFO) << "telemetry_decoder(" << telemetry_decoder_->unique_id() << ")";
if (in_streams > 1)
{
LOG(ERROR) << "This implementation only supports one input stream ("
<< in_streams_ << " provided)";
<< in_streams << " provided)";
}
if (out_streams_ > 1)
if (out_streams > 1)
{
LOG(ERROR) << "This implementation only supports one output stream ("
<< out_streams_ << " provided)";
<< out_streams << " provided)";
}
}
void TelemetryDecoderAdapterBase::InitializeDecoder(telemetry_impl_interface_sptr decoder)
{
telemetry_decoder_ = std::move(decoder);
DLOG(INFO) << "telemetry_decoder(" << telemetry_decoder_->unique_id() << ")";
}
void TelemetryDecoderAdapterBase::connect(gr::top_block_sptr top_block)
{
if (top_block)
@@ -90,11 +82,11 @@ gr::basic_block_sptr TelemetryDecoderAdapterBase::get_right_block()
void TelemetryDecoderAdapterBase::set_satellite(const Gnss_Satellite& satellite)
{
satellite_ = Gnss_Satellite(satellite.get_system(), satellite.get_PRN());
if (telemetry_decoder_)
{
telemetry_decoder_->set_satellite(satellite_);
DLOG(INFO) << "TELEMETRY DECODER: satellite set to " << satellite_;
const auto sat = Gnss_Satellite(satellite.get_system(), satellite.get_PRN()); // Why is this required
telemetry_decoder_->set_satellite(sat);
DLOG(INFO) << "TELEMETRY DECODER: satellite set to " << sat;
}
}
@@ -104,6 +96,10 @@ std::string TelemetryDecoderAdapterBase::role()
return role_;
}
std::string TelemetryDecoderAdapterBase::implementation()
{
return implementation_;
}
void TelemetryDecoderAdapterBase::set_channel(int channel)
{
@@ -127,9 +123,3 @@ size_t TelemetryDecoderAdapterBase::item_size()
{
return sizeof(Gnss_Synchro);
}
const Gnss_Satellite& TelemetryDecoderAdapterBase::satellite() const
{
return satellite_;
}
@@ -36,16 +36,30 @@ class ConfigurationInterface;
* \{
*/
inline Tlm_Conf get_tlm_conf(const ConfigurationInterface* configuration, const std::string& role)
{
Tlm_Conf conf;
if (configuration != nullptr)
{
conf.SetFromConfiguration(configuration, role);
}
return conf;
}
/*!
* \brief Base class for Telemetry Decoder adapters
*/
class TelemetryDecoderAdapterBase : public TelemetryDecoderInterface
{
public:
TelemetryDecoderAdapterBase(const ConfigurationInterface* configuration,
TelemetryDecoderAdapterBase(
const std::string& role,
const std::string& implementation,
unsigned int in_streams,
unsigned int out_streams);
unsigned int out_streams,
telemetry_impl_interface_sptr decoder);
~TelemetryDecoderAdapterBase() override = default;
@@ -61,25 +75,18 @@ public:
std::string role() override;
std::string implementation() override;
void set_channel(int channel) override;
void reset() override;
size_t item_size() override;
protected:
void InitializeDecoder(telemetry_impl_interface_sptr decoder);
const Gnss_Satellite& satellite() const;
Tlm_Conf tlm_parameters_;
private:
telemetry_impl_interface_sptr telemetry_decoder_;
Gnss_Satellite satellite_;
std::string role_;
unsigned int in_streams_ = 0;
unsigned int out_streams_ = 0;
const std::string role_;
const std::string implementation_;
};
/** \} */
@@ -45,43 +45,41 @@
beidou_b1i_telemetry_decoder_gs_sptr
beidou_b1i_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, const Tlm_Conf &conf)
beidou_b1i_make_telemetry_decoder_gs(const Tlm_Conf &conf)
{
return beidou_b1i_telemetry_decoder_gs_sptr(new beidou_b1i_telemetry_decoder_gs(satellite, conf));
return beidou_b1i_telemetry_decoder_gs_sptr(new beidou_b1i_telemetry_decoder_gs(conf));
}
beidou_b1i_telemetry_decoder_gs::beidou_b1i_telemetry_decoder_gs(
const Gnss_Satellite &satellite,
const Tlm_Conf &conf) : telemetry_impl_interface("beidou_b1i_telemetry_decoder_gs",
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)),
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))),
d_satellite(satellite.get_system(), satellite.get_PRN()),
d_dump_filename(conf.dump_filename),
d_sample_counter(0),
d_preamble_index(0),
d_channel(0),
d_symbols_per_preamble(BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS),
d_samples_per_preamble(BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS),
d_preamble_period_samples(BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS),
d_CRC_error_counter(0),
d_required_symbols(BEIDOU_DNAV_SUBFRAME_SYMBOLS + BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS),
d_stat(0),
d_last_valid_preamble(0),
d_symbol_duration_ms(BEIDOU_B1I_TELEMETRY_SYMBOLS_PER_BIT * BEIDOU_B1I_CODE_PERIOD_MS),
d_TOW_at_Preamble_ms(0U),
d_TOW_at_current_symbol_ms(0U),
d_flag_SOW_set(false),
d_flag_frame_sync(false),
d_flag_preamble(false),
d_flag_valid_word(false),
d_sent_tlm_failed_msg(false),
d_dump(conf.dump),
d_dump_mat(conf.dump_mat),
d_remove_dat(conf.remove_dat),
d_enable_navdata_monitor(conf.enable_navdata_monitor),
d_dump_crc_stats(conf.dump_crc_stats),
d_tow_to_trk(conf.tow_to_trk)
beidou_b1i_telemetry_decoder_gs::beidou_b1i_telemetry_decoder_gs(const Tlm_Conf &conf)
: telemetry_impl_interface("beidou_b1i_telemetry_decoder_gs",
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)),
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))),
d_dump_filename(conf.dump_filename),
d_sample_counter(0),
d_preamble_index(0),
d_channel(0),
d_symbols_per_preamble(BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS),
d_samples_per_preamble(BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS),
d_preamble_period_samples(BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS),
d_CRC_error_counter(0),
d_required_symbols(BEIDOU_DNAV_SUBFRAME_SYMBOLS + BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS),
d_stat(0),
d_last_valid_preamble(0),
d_symbol_duration_ms(BEIDOU_B1I_TELEMETRY_SYMBOLS_PER_BIT * BEIDOU_B1I_CODE_PERIOD_MS),
d_TOW_at_Preamble_ms(0U),
d_TOW_at_current_symbol_ms(0U),
d_flag_SOW_set(false),
d_flag_frame_sync(false),
d_flag_preamble(false),
d_flag_valid_word(false),
d_sent_tlm_failed_msg(false),
d_dump(conf.dump),
d_dump_mat(conf.dump_mat),
d_remove_dat(conf.remove_dat),
d_enable_navdata_monitor(conf.enable_navdata_monitor),
d_dump_crc_stats(conf.dump_crc_stats),
d_tow_to_trk(conf.tow_to_trk)
{
configure_basic_outputs();
@@ -32,13 +32,12 @@
* \{ */
class ConfigurationInterface;
class beidou_b1i_telemetry_decoder_gs;
using beidou_b1i_telemetry_decoder_gs_sptr = gnss_shared_ptr<beidou_b1i_telemetry_decoder_gs>;
beidou_b1i_telemetry_decoder_gs_sptr beidou_b1i_make_telemetry_decoder_gs(
const Gnss_Satellite &satellite,
const Tlm_Conf &conf);
beidou_b1i_telemetry_decoder_gs_sptr beidou_b1i_make_telemetry_decoder_gs(const Tlm_Conf &conf);
/*!
@@ -60,11 +59,9 @@ public:
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) override;
private:
friend beidou_b1i_telemetry_decoder_gs_sptr beidou_b1i_make_telemetry_decoder_gs(
const Gnss_Satellite &satellite,
const Tlm_Conf &conf);
friend beidou_b1i_telemetry_decoder_gs_sptr beidou_b1i_make_telemetry_decoder_gs(const Tlm_Conf &conf);
beidou_b1i_telemetry_decoder_gs(const Gnss_Satellite &satellite, const Tlm_Conf &conf);
explicit beidou_b1i_telemetry_decoder_gs(const Tlm_Conf &conf);
void decode_subframe(float *symbols, double cn0);
void decode_word(int32_t word_counter, const float *enc_word_symbols, int32_t *dec_word_symbols);
@@ -43,15 +43,13 @@
#define CRC_ERROR_LIMIT 8
beidou_b3i_telemetry_decoder_gs_sptr
beidou_b3i_make_telemetry_decoder_gs(const Gnss_Satellite &satellite,
const Tlm_Conf &conf)
beidou_b3i_make_telemetry_decoder_gs(const Tlm_Conf &conf)
{
return beidou_b3i_telemetry_decoder_gs_sptr(new beidou_b3i_telemetry_decoder_gs(satellite, conf));
return beidou_b3i_telemetry_decoder_gs_sptr(new beidou_b3i_telemetry_decoder_gs(conf));
}
beidou_b3i_telemetry_decoder_gs::beidou_b3i_telemetry_decoder_gs(
const Gnss_Satellite &satellite, const Tlm_Conf &conf)
beidou_b3i_telemetry_decoder_gs::beidou_b3i_telemetry_decoder_gs(const Tlm_Conf &conf)
: telemetry_impl_interface("beidou_b3i_telemetry_decoder_gs",
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)),
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))),
@@ -91,9 +89,6 @@ beidou_b3i_telemetry_decoder_gs::beidou_b3i_telemetry_decoder_gs(
d_nav_msg_packet.signal = std::string("B3");
}
d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN());
LOG(INFO) << "Initializing BeiDou B3I Telemetry Decoding for satellite " << this->d_satellite;
// Setting samples of preamble code
for (int32_t i = 0; i < d_symbols_per_preamble; i++)
{
@@ -31,12 +31,9 @@
class beidou_b3i_telemetry_decoder_gs;
using beidou_b3i_telemetry_decoder_gs_sptr =
gnss_shared_ptr<beidou_b3i_telemetry_decoder_gs>;
using beidou_b3i_telemetry_decoder_gs_sptr = gnss_shared_ptr<beidou_b3i_telemetry_decoder_gs>;
beidou_b3i_telemetry_decoder_gs_sptr beidou_b3i_make_telemetry_decoder_gs(
const Gnss_Satellite &satellite,
const Tlm_Conf &conf);
beidou_b3i_telemetry_decoder_gs_sptr beidou_b3i_make_telemetry_decoder_gs(const Tlm_Conf &conf);
/*!
* \brief This class implements a block that decodes the BeiDou DNAV data.
@@ -57,11 +54,9 @@ public:
gr_vector_void_star &output_items) override;
private:
friend beidou_b3i_telemetry_decoder_gs_sptr beidou_b3i_make_telemetry_decoder_gs(
const Gnss_Satellite &satellite,
const Tlm_Conf &conf);
friend beidou_b3i_telemetry_decoder_gs_sptr beidou_b3i_make_telemetry_decoder_gs(const Tlm_Conf &conf);
beidou_b3i_telemetry_decoder_gs(const Gnss_Satellite &satellite, const Tlm_Conf &conf);
explicit beidou_b3i_telemetry_decoder_gs(const Tlm_Conf &conf);
void decode_subframe(float *symbols, double cn0);
void decode_word(int32_t word_counter, const float *enc_word_symbols,
@@ -70,52 +70,50 @@ namespace wht = std;
#define CRC_ERROR_LIMIT 6
galileo_telemetry_decoder_gs_sptr
galileo_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, const Tlm_Conf &conf, int frame_type)
galileo_make_telemetry_decoder_gs(const Tlm_Conf &conf, int frame_type)
{
return galileo_telemetry_decoder_gs_sptr(new galileo_telemetry_decoder_gs(satellite, conf, frame_type));
return galileo_telemetry_decoder_gs_sptr(new galileo_telemetry_decoder_gs(conf, frame_type));
}
galileo_telemetry_decoder_gs::galileo_telemetry_decoder_gs(
const Gnss_Satellite &satellite,
const Tlm_Conf &conf,
int frame_type) : telemetry_impl_interface("galileo_telemetry_decoder_gs",
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)),
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))),
d_dump_filename(conf.dump_filename),
d_delta_t(0),
d_symbol_counter(0ULL),
d_preamble_index(0ULL),
d_last_valid_preamble(0ULL),
d_received_sample_counter(0),
d_frame_type(frame_type),
d_CRC_error_counter(0),
d_channel(0),
d_flag_even_word_arrived(0),
d_stat(0),
d_TOW_at_Preamble_ms(0),
d_TOW_at_current_symbol_ms(0),
d_received_tow_ms(std::numeric_limits<uint32_t>::max()),
d_band('1'),
d_sent_tlm_failed_msg(false),
d_flag_frame_sync(false),
d_flag_PLL_180_deg_phase_locked(false),
d_flag_preamble(false),
d_dump(conf.dump),
d_dump_mat(conf.dump_mat),
d_remove_dat(conf.remove_dat),
d_first_eph_sent(false),
d_cnav_dummy_page(false),
d_print_cnav_page(true),
d_enable_navdata_monitor(conf.enable_navdata_monitor),
d_dump_crc_stats(conf.dump_crc_stats),
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),
d_use_ced(conf.use_ced),
d_tow_to_trk(conf.tow_to_trk)
galileo_telemetry_decoder_gs::galileo_telemetry_decoder_gs(const Tlm_Conf &conf, int frame_type)
: telemetry_impl_interface("galileo_telemetry_decoder_gs",
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)),
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))),
d_dump_filename(conf.dump_filename),
d_delta_t(0),
d_symbol_counter(0ULL),
d_preamble_index(0ULL),
d_last_valid_preamble(0ULL),
d_received_sample_counter(0),
d_frame_type(frame_type),
d_CRC_error_counter(0),
d_channel(0),
d_flag_even_word_arrived(0),
d_stat(0),
d_TOW_at_Preamble_ms(0),
d_TOW_at_current_symbol_ms(0),
d_received_tow_ms(std::numeric_limits<uint32_t>::max()),
d_band('1'),
d_sent_tlm_failed_msg(false),
d_flag_frame_sync(false),
d_flag_PLL_180_deg_phase_locked(false),
d_flag_preamble(false),
d_dump(conf.dump),
d_dump_mat(conf.dump_mat),
d_remove_dat(conf.remove_dat),
d_first_eph_sent(false),
d_cnav_dummy_page(false),
d_print_cnav_page(true),
d_enable_navdata_monitor(conf.enable_navdata_monitor),
d_dump_crc_stats(conf.dump_crc_stats),
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),
d_use_ced(conf.use_ced),
d_tow_to_trk(conf.tow_to_trk)
{
configure_basic_outputs();
@@ -153,8 +151,6 @@ galileo_telemetry_decoder_gs::galileo_telemetry_decoder_gs(
this->message_port_register_out(pmt::mp("Nav_msg_from_TLM"));
}
d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN());
// Viterbi decoder vars
const int32_t nn = 2; // Coding rate 1/n
const int32_t KK = 7; // Constraint Length
@@ -40,10 +40,7 @@ class galileo_telemetry_decoder_gs; // forward declaration
using galileo_telemetry_decoder_gs_sptr = gnss_shared_ptr<galileo_telemetry_decoder_gs>;
galileo_telemetry_decoder_gs_sptr galileo_make_telemetry_decoder_gs(
const Gnss_Satellite &satellite,
const Tlm_Conf &conf,
int frame_type);
galileo_telemetry_decoder_gs_sptr galileo_make_telemetry_decoder_gs(const Tlm_Conf &conf, int frame_type);
/*!
* \brief This class implements a block that decodes the INAV and FNAV data defined in Galileo ICD
@@ -63,12 +60,9 @@ public:
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) override;
private:
friend galileo_telemetry_decoder_gs_sptr galileo_make_telemetry_decoder_gs(
const Gnss_Satellite &satellite,
const Tlm_Conf &conf,
int frame_type);
friend galileo_telemetry_decoder_gs_sptr galileo_make_telemetry_decoder_gs(const Tlm_Conf &conf, int frame_type);
galileo_telemetry_decoder_gs(const Gnss_Satellite &satellite, const Tlm_Conf &conf, int frame_type);
galileo_telemetry_decoder_gs(const Tlm_Conf &conf, int frame_type);
void check_tlm_separation();
void msg_handler_read_galileo_tow_map(const pmt::pmt_t &msg);
@@ -43,34 +43,32 @@
#define CRC_ERROR_LIMIT 6
glonass_l1_ca_telemetry_decoder_gs_sptr
glonass_l1_ca_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, const Tlm_Conf &conf)
glonass_l1_ca_telemetry_decoder_gs_sptr glonass_l1_ca_make_telemetry_decoder_gs(const Tlm_Conf &conf)
{
return glonass_l1_ca_telemetry_decoder_gs_sptr(new glonass_l1_ca_telemetry_decoder_gs(satellite, conf));
return glonass_l1_ca_telemetry_decoder_gs_sptr(new glonass_l1_ca_telemetry_decoder_gs(conf));
}
glonass_l1_ca_telemetry_decoder_gs::glonass_l1_ca_telemetry_decoder_gs(
const Gnss_Satellite &satellite,
const Tlm_Conf &conf) : telemetry_impl_interface("glonass_l1_ca_telemetry_decoder_gs",
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)),
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))),
d_dump_filename(conf.dump_filename),
d_preamble_time_samples(0),
d_TOW_at_current_symbol(0),
d_sample_counter(0ULL),
d_preamble_index(0ULL),
d_stat(0),
d_CRC_error_counter(0),
d_channel(0),
d_flag_frame_sync(false),
d_flag_preamble(false),
d_dump(conf.dump),
d_dump_mat(conf.dump_mat),
d_remove_dat(conf.remove_dat),
d_enable_navdata_monitor(conf.enable_navdata_monitor),
d_dump_crc_stats(conf.dump_crc_stats),
d_tow_to_trk(conf.tow_to_trk)
glonass_l1_ca_telemetry_decoder_gs::glonass_l1_ca_telemetry_decoder_gs(const Tlm_Conf &conf)
: telemetry_impl_interface("glonass_l1_ca_telemetry_decoder_gs",
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)),
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))),
d_dump_filename(conf.dump_filename),
d_preamble_time_samples(0),
d_TOW_at_current_symbol(0),
d_sample_counter(0ULL),
d_preamble_index(0ULL),
d_stat(0),
d_CRC_error_counter(0),
d_channel(0),
d_flag_frame_sync(false),
d_flag_preamble(false),
d_dump(conf.dump),
d_dump_mat(conf.dump_mat),
d_remove_dat(conf.remove_dat),
d_enable_navdata_monitor(conf.enable_navdata_monitor),
d_dump_crc_stats(conf.dump_crc_stats),
d_tow_to_trk(conf.tow_to_trk)
{
configure_basic_outputs();
@@ -84,7 +82,6 @@ glonass_l1_ca_telemetry_decoder_gs::glonass_l1_ca_telemetry_decoder_gs(
d_nav_msg_packet.signal = std::string("1G");
}
d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN());
LOG(INFO) << "Initializing GLONASS L1 CA TELEMETRY DECODING";
d_symbol_history.set_capacity(GLONASS_GNAV_STRING_BIBINARY_WITH_PREABLE);
@@ -35,9 +35,7 @@ class glonass_l1_ca_telemetry_decoder_gs;
using glonass_l1_ca_telemetry_decoder_gs_sptr = gnss_shared_ptr<glonass_l1_ca_telemetry_decoder_gs>;
glonass_l1_ca_telemetry_decoder_gs_sptr glonass_l1_ca_make_telemetry_decoder_gs(
const Gnss_Satellite &satellite,
const Tlm_Conf &conf);
glonass_l1_ca_telemetry_decoder_gs_sptr glonass_l1_ca_make_telemetry_decoder_gs(const Tlm_Conf &conf);
/*!
* \brief This class implements a block that decodes the GNAV data defined in GLONASS ICD v5.1
@@ -60,11 +58,9 @@ public:
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) override;
private:
friend glonass_l1_ca_telemetry_decoder_gs_sptr glonass_l1_ca_make_telemetry_decoder_gs(
const Gnss_Satellite &satellite,
const Tlm_Conf &conf);
friend glonass_l1_ca_telemetry_decoder_gs_sptr glonass_l1_ca_make_telemetry_decoder_gs(const Tlm_Conf &conf);
glonass_l1_ca_telemetry_decoder_gs(const Gnss_Satellite &satellite, const Tlm_Conf &conf);
glonass_l1_ca_telemetry_decoder_gs(const Tlm_Conf &conf);
const std::array<int16_t, GLONASS_GNAV_PREAMBLE_LENGTH_BITS> d_preambles_bits{GLONASS_GNAV_PREAMBLE_SAMPLES};
@@ -43,34 +43,32 @@
#define CRC_ERROR_LIMIT 6
glonass_l2_ca_telemetry_decoder_gs_sptr
glonass_l2_ca_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, const Tlm_Conf &conf)
glonass_l2_ca_telemetry_decoder_gs_sptr glonass_l2_ca_make_telemetry_decoder_gs(const Tlm_Conf &conf)
{
return glonass_l2_ca_telemetry_decoder_gs_sptr(new glonass_l2_ca_telemetry_decoder_gs(satellite, conf));
return glonass_l2_ca_telemetry_decoder_gs_sptr(new glonass_l2_ca_telemetry_decoder_gs(conf));
}
glonass_l2_ca_telemetry_decoder_gs::glonass_l2_ca_telemetry_decoder_gs(
const Gnss_Satellite &satellite,
const Tlm_Conf &conf) : telemetry_impl_interface("glonass_l2_ca_telemetry_decoder_gs",
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)),
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))),
d_dump_filename(conf.dump_filename),
d_preamble_time_samples(0),
d_TOW_at_current_symbol(0),
d_sample_counter(0ULL),
d_preamble_index(0ULL),
d_stat(0),
d_CRC_error_counter(0),
d_channel(0),
d_flag_frame_sync(false),
d_flag_preamble(false),
d_dump(conf.dump),
d_dump_mat(conf.dump_mat),
d_remove_dat(conf.remove_dat),
d_enable_navdata_monitor(conf.enable_navdata_monitor),
d_dump_crc_stats(conf.dump_crc_stats),
d_tow_to_trk(conf.tow_to_trk)
glonass_l2_ca_telemetry_decoder_gs::glonass_l2_ca_telemetry_decoder_gs(const Tlm_Conf &conf)
: telemetry_impl_interface("glonass_l2_ca_telemetry_decoder_gs",
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)),
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))),
d_dump_filename(conf.dump_filename),
d_preamble_time_samples(0),
d_TOW_at_current_symbol(0),
d_sample_counter(0ULL),
d_preamble_index(0ULL),
d_stat(0),
d_CRC_error_counter(0),
d_channel(0),
d_flag_frame_sync(false),
d_flag_preamble(false),
d_dump(conf.dump),
d_dump_mat(conf.dump_mat),
d_remove_dat(conf.remove_dat),
d_enable_navdata_monitor(conf.enable_navdata_monitor),
d_dump_crc_stats(conf.dump_crc_stats),
d_tow_to_trk(conf.tow_to_trk)
{
configure_basic_outputs();
@@ -84,7 +82,6 @@ glonass_l2_ca_telemetry_decoder_gs::glonass_l2_ca_telemetry_decoder_gs(
d_nav_msg_packet.signal = std::string("2G");
}
d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN());
LOG(INFO) << "Initializing GLONASS L2 CA TELEMETRY DECODING";
d_symbol_history.set_capacity(GLONASS_GNAV_STRING_BIBINARY_WITH_PREABLE);
@@ -35,9 +35,7 @@ class glonass_l2_ca_telemetry_decoder_gs;
using glonass_l2_ca_telemetry_decoder_gs_sptr = gnss_shared_ptr<glonass_l2_ca_telemetry_decoder_gs>;
glonass_l2_ca_telemetry_decoder_gs_sptr glonass_l2_ca_make_telemetry_decoder_gs(
const Gnss_Satellite &satellite,
const Tlm_Conf &conf);
glonass_l2_ca_telemetry_decoder_gs_sptr glonass_l2_ca_make_telemetry_decoder_gs(const Tlm_Conf &conf);
/*!
* \brief This class implements a block that decodes the GNAV data defined in GLONASS ICD v5.1
@@ -59,11 +57,9 @@ public:
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) override;
private:
friend glonass_l2_ca_telemetry_decoder_gs_sptr glonass_l2_ca_make_telemetry_decoder_gs(
const Gnss_Satellite &satellite,
const Tlm_Conf &conf);
friend glonass_l2_ca_telemetry_decoder_gs_sptr glonass_l2_ca_make_telemetry_decoder_gs(const Tlm_Conf &conf);
glonass_l2_ca_telemetry_decoder_gs(const Gnss_Satellite &satellite, const Tlm_Conf &conf);
explicit glonass_l2_ca_telemetry_decoder_gs(const Tlm_Conf &conf);
const std::array<int16_t, GLONASS_GNAV_PREAMBLE_LENGTH_BITS> d_preambles_bits{GLONASS_GNAV_PREAMBLE_SAMPLES};
void decode_string(const double *symbols, double cn0);
@@ -70,49 +70,47 @@ namespace wht = std;
#endif
gps_l1_ca_telemetry_decoder_gs_sptr
gps_l1_ca_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, const Tlm_Conf &conf, L1LnavSystem system)
gps_l1_ca_telemetry_decoder_gs_sptr gps_l1_ca_make_telemetry_decoder_gs(const Tlm_Conf &conf, L1LnavSystem system)
{
return gps_l1_ca_telemetry_decoder_gs_sptr(new gps_l1_ca_telemetry_decoder_gs(satellite, conf, system));
return gps_l1_ca_telemetry_decoder_gs_sptr(new gps_l1_ca_telemetry_decoder_gs(conf, system));
}
gps_l1_ca_telemetry_decoder_gs::gps_l1_ca_telemetry_decoder_gs(
const Gnss_Satellite &satellite,
const Tlm_Conf &conf,
L1LnavSystem system) : telemetry_impl_interface("gps_navigation_gs",
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)),
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))),
d_system(system),
d_dump_filename(conf.dump_filename),
d_sample_counter(0ULL),
d_preamble_index(0ULL),
d_last_valid_preamble(0),
d_bits_per_preamble(GPS_CA_PREAMBLE_LENGTH_BITS),
d_samples_per_preamble(GPS_CA_PREAMBLE_LENGTH_BITS),
d_preamble_period_symbols(GPS_SUBFRAME_BITS),
d_CRC_error_counter(0),
d_channel(0),
d_required_symbols(GPS_SUBFRAME_BITS),
d_prev_GPS_frame_4bytes(0),
d_max_symbols_without_valid_frame(d_required_symbols * 20),
d_stat(0),
d_TOW_at_Preamble_ms(0),
d_TOW_at_current_symbol_ms(0),
d_last_decoded_tow_s(0),
d_last_decoded_tow_sample_counter(0),
d_flag_frame_sync(false),
d_flag_preamble(false),
d_sent_tlm_failed_msg(false),
d_flag_PLL_180_deg_phase_locked(false),
d_flag_TOW_set(false),
d_dump(conf.dump),
d_dump_mat(conf.dump_mat),
d_remove_dat(conf.remove_dat),
d_enable_navdata_monitor(conf.enable_navdata_monitor),
d_dump_crc_stats(conf.dump_crc_stats),
d_tow_to_trk(conf.tow_to_trk),
d_have_last_decoded_tow(false) // rise alarm 120 segs without valid tlm
gps_l1_ca_telemetry_decoder_gs::gps_l1_ca_telemetry_decoder_gs(const Tlm_Conf &conf,
L1LnavSystem system)
: telemetry_impl_interface("gps_navigation_gs",
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)),
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))),
d_system(system),
d_dump_filename(conf.dump_filename),
d_sample_counter(0ULL),
d_preamble_index(0ULL),
d_last_valid_preamble(0),
d_bits_per_preamble(GPS_CA_PREAMBLE_LENGTH_BITS),
d_samples_per_preamble(GPS_CA_PREAMBLE_LENGTH_BITS),
d_preamble_period_symbols(GPS_SUBFRAME_BITS),
d_CRC_error_counter(0),
d_channel(0),
d_required_symbols(GPS_SUBFRAME_BITS),
d_prev_GPS_frame_4bytes(0),
d_max_symbols_without_valid_frame(d_required_symbols * 20),
d_stat(0),
d_TOW_at_Preamble_ms(0),
d_TOW_at_current_symbol_ms(0),
d_last_decoded_tow_s(0),
d_last_decoded_tow_sample_counter(0),
d_flag_frame_sync(false),
d_flag_preamble(false),
d_sent_tlm_failed_msg(false),
d_flag_PLL_180_deg_phase_locked(false),
d_flag_TOW_set(false),
d_dump(conf.dump),
d_dump_mat(conf.dump_mat),
d_remove_dat(conf.remove_dat),
d_enable_navdata_monitor(conf.enable_navdata_monitor),
d_dump_crc_stats(conf.dump_crc_stats),
d_tow_to_trk(conf.tow_to_trk),
d_have_last_decoded_tow(false) // rise alarm 120 segs without valid tlm
{
configure_basic_outputs();
@@ -141,7 +139,6 @@ gps_l1_ca_telemetry_decoder_gs::gps_l1_ca_telemetry_decoder_gs(
d_nav_msg_packet.signal = std::string("J1");
}
}
d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN());
DLOG(INFO) << "Initializing " << ((d_system == L1LnavSystem::GPS) ? "GPS" : "QZSS") << " L1 TELEMETRY DECODER";
// set the preamble
@@ -43,7 +43,6 @@ class gps_l1_ca_telemetry_decoder_gs;
using gps_l1_ca_telemetry_decoder_gs_sptr = gnss_shared_ptr<gps_l1_ca_telemetry_decoder_gs>;
gps_l1_ca_telemetry_decoder_gs_sptr gps_l1_ca_make_telemetry_decoder_gs(
const Gnss_Satellite &satellite,
const Tlm_Conf &conf,
L1LnavSystem system = L1LnavSystem::GPS);
@@ -66,11 +65,10 @@ public:
private:
friend gps_l1_ca_telemetry_decoder_gs_sptr gps_l1_ca_make_telemetry_decoder_gs(
const Gnss_Satellite &satellite,
const Tlm_Conf &conf,
L1LnavSystem system);
gps_l1_ca_telemetry_decoder_gs(const Gnss_Satellite &satellite, const Tlm_Conf &conf, L1LnavSystem system);
gps_l1_ca_telemetry_decoder_gs(const Tlm_Conf &conf, L1LnavSystem system);
void check_tlm_separation();
void frame_synchronization(const Gnss_Synchro &current_gs);
@@ -42,34 +42,32 @@
#include <absl/log/log.h>
#endif
gps_l2c_telemetry_decoder_gs_sptr
gps_l2c_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, const Tlm_Conf &conf)
gps_l2c_telemetry_decoder_gs_sptr gps_l2c_make_telemetry_decoder_gs(const Tlm_Conf &conf)
{
return gps_l2c_telemetry_decoder_gs_sptr(new gps_l2c_telemetry_decoder_gs(satellite, conf));
return gps_l2c_telemetry_decoder_gs_sptr(new gps_l2c_telemetry_decoder_gs(conf));
}
gps_l2c_telemetry_decoder_gs::gps_l2c_telemetry_decoder_gs(
const Gnss_Satellite &satellite,
const Tlm_Conf &conf) : telemetry_impl_interface("gps_l2c_telemetry_decoder_gs",
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)),
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))),
d_dump_filename(conf.dump_filename),
d_TOW_at_current_symbol(0),
d_TOW_at_Preamble(0),
d_sample_counter(0),
d_last_valid_preamble(0),
d_channel(0),
d_max_symbols_without_valid_frame(GPS_L2_CNAV_DATA_PAGE_BITS * GPS_L2_SYMBOLS_PER_BIT * 5),
d_dump(conf.dump),
d_sent_tlm_failed_msg(false),
d_flag_PLL_180_deg_phase_locked(false),
d_flag_valid_word(false),
d_dump_mat(conf.dump_mat),
d_remove_dat(conf.remove_dat),
d_enable_navdata_monitor(conf.enable_navdata_monitor),
d_dump_crc_stats(conf.dump_crc_stats),
d_tow_to_trk(conf.tow_to_trk) // rise alarm if 5 consecutive subframes have no valid CRC
gps_l2c_telemetry_decoder_gs::gps_l2c_telemetry_decoder_gs(const Tlm_Conf &conf)
: telemetry_impl_interface("gps_l2c_telemetry_decoder_gs",
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)),
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))),
d_dump_filename(conf.dump_filename),
d_TOW_at_current_symbol(0),
d_TOW_at_Preamble(0),
d_sample_counter(0),
d_last_valid_preamble(0),
d_channel(0),
d_max_symbols_without_valid_frame(GPS_L2_CNAV_DATA_PAGE_BITS * GPS_L2_SYMBOLS_PER_BIT * 5),
d_dump(conf.dump),
d_sent_tlm_failed_msg(false),
d_flag_PLL_180_deg_phase_locked(false),
d_flag_valid_word(false),
d_dump_mat(conf.dump_mat),
d_remove_dat(conf.remove_dat),
d_enable_navdata_monitor(conf.enable_navdata_monitor),
d_dump_crc_stats(conf.dump_crc_stats),
d_tow_to_trk(conf.tow_to_trk) // rise alarm if 5 consecutive subframes have no valid CRC
{
configure_basic_outputs();
@@ -82,7 +80,6 @@ gps_l2c_telemetry_decoder_gs::gps_l2c_telemetry_decoder_gs(
d_nav_msg_packet.signal = std::string("2S");
}
d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN());
DLOG(INFO) << "GPS L2C M TELEMETRY PROCESSING: satellite " << d_satellite;
// initialize the CNAV frame decoder (libswiftcnav)
@@ -37,9 +37,7 @@ class gps_l2c_telemetry_decoder_gs;
using gps_l2c_telemetry_decoder_gs_sptr = gnss_shared_ptr<gps_l2c_telemetry_decoder_gs>;
gps_l2c_telemetry_decoder_gs_sptr gps_l2c_make_telemetry_decoder_gs(
const Gnss_Satellite &satellite,
const Tlm_Conf &conf);
gps_l2c_telemetry_decoder_gs_sptr gps_l2c_make_telemetry_decoder_gs(const Tlm_Conf &conf);
/*!
* \brief This class implements a block that decodes CNAV data defined in IS-GPS-200M
@@ -59,11 +57,9 @@ public:
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) override;
private:
friend gps_l2c_telemetry_decoder_gs_sptr gps_l2c_make_telemetry_decoder_gs(
const Gnss_Satellite &satellite,
const Tlm_Conf &conf);
friend gps_l2c_telemetry_decoder_gs_sptr gps_l2c_make_telemetry_decoder_gs(const Tlm_Conf &conf);
gps_l2c_telemetry_decoder_gs(const Gnss_Satellite &satellite, const Tlm_Conf &conf);
explicit gps_l2c_telemetry_decoder_gs(const Tlm_Conf &conf);
Gnss_Satellite d_satellite;
@@ -44,35 +44,34 @@
#endif
gps_l5_telemetry_decoder_gs_sptr
gps_l5_make_telemetry_decoder_gs(const Gnss_Satellite &satellite, const Tlm_Conf &conf, CnavSystem system)
gps_l5_make_telemetry_decoder_gs(const Tlm_Conf &conf, CnavSystem system)
{
return gps_l5_telemetry_decoder_gs_sptr(new gps_l5_telemetry_decoder_gs(satellite, conf, system));
return gps_l5_telemetry_decoder_gs_sptr(new gps_l5_telemetry_decoder_gs(conf, system));
}
gps_l5_telemetry_decoder_gs::gps_l5_telemetry_decoder_gs(
const Gnss_Satellite &satellite,
const Tlm_Conf &conf,
CnavSystem system) : telemetry_impl_interface("gps_l5_telemetry_decoder_gs",
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)),
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))),
d_system(system),
d_dump_filename(conf.dump_filename),
d_sample_counter(0),
d_last_valid_preamble(0),
d_channel(0),
d_TOW_at_current_symbol_ms(0U),
d_TOW_at_Preamble_ms(0U),
d_max_symbols_without_valid_frame(GPS_L5_CNAV_DATA_PAGE_BITS * GPS_L5_SYMBOLS_PER_BIT * 10), // rise alarm if 20 consecutive subframes have no valid CRC
d_flag_PLL_180_deg_phase_locked(false),
d_flag_valid_word(false),
d_sent_tlm_failed_msg(false),
d_dump(conf.dump),
d_dump_mat(conf.dump_mat),
d_remove_dat(conf.remove_dat),
d_enable_navdata_monitor(conf.enable_navdata_monitor),
d_dump_crc_stats(conf.dump_crc_stats),
d_tow_to_trk(conf.tow_to_trk)
gps_l5_telemetry_decoder_gs::gps_l5_telemetry_decoder_gs(const Tlm_Conf &conf,
CnavSystem system)
: telemetry_impl_interface("gps_l5_telemetry_decoder_gs",
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)),
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))),
d_system(system),
d_dump_filename(conf.dump_filename),
d_sample_counter(0),
d_last_valid_preamble(0),
d_channel(0),
d_TOW_at_current_symbol_ms(0U),
d_TOW_at_Preamble_ms(0U),
d_max_symbols_without_valid_frame(GPS_L5_CNAV_DATA_PAGE_BITS * GPS_L5_SYMBOLS_PER_BIT * 10), // rise alarm if 20 consecutive subframes have no valid CRC
d_flag_PLL_180_deg_phase_locked(false),
d_flag_valid_word(false),
d_sent_tlm_failed_msg(false),
d_dump(conf.dump),
d_dump_mat(conf.dump_mat),
d_remove_dat(conf.remove_dat),
d_enable_navdata_monitor(conf.enable_navdata_monitor),
d_dump_crc_stats(conf.dump_crc_stats),
d_tow_to_trk(conf.tow_to_trk)
{
configure_basic_outputs();
@@ -93,7 +92,6 @@ gps_l5_telemetry_decoder_gs::gps_l5_telemetry_decoder_gs(
}
d_CNAV_Message = std::make_unique<Gps_CNAV_Navigation_Message>(d_system);
d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN());
DLOG(INFO) << ((d_system == CnavSystem::GPS) ? "GPS" : "QZSS") << " L5 TELEMETRY PROCESSING: satellite " << d_satellite;
// initialize the CNAV frame decoder (libswiftcnav)
@@ -39,7 +39,6 @@ class gps_l5_telemetry_decoder_gs;
using gps_l5_telemetry_decoder_gs_sptr = gnss_shared_ptr<gps_l5_telemetry_decoder_gs>;
gps_l5_telemetry_decoder_gs_sptr gps_l5_make_telemetry_decoder_gs(
const Gnss_Satellite &satellite,
const Tlm_Conf &conf,
CnavSystem system = CnavSystem::GPS);
@@ -59,11 +58,10 @@ public:
private:
friend gps_l5_telemetry_decoder_gs_sptr gps_l5_make_telemetry_decoder_gs(
const Gnss_Satellite &satellite,
const Tlm_Conf &conf,
CnavSystem system);
gps_l5_telemetry_decoder_gs(const Gnss_Satellite &satellite, const Tlm_Conf &conf, CnavSystem system);
gps_l5_telemetry_decoder_gs(const Tlm_Conf &conf, CnavSystem system);
cnav_msg_decoder_t d_cnav_decoder{};
@@ -37,27 +37,23 @@
#define LMORE 5 //
sbas_l1_telemetry_decoder_gs_sptr sbas_l1_make_telemetry_decoder_gs(
const Gnss_Satellite &satellite,
bool dump)
sbas_l1_telemetry_decoder_gs_sptr sbas_l1_make_telemetry_decoder_gs(bool dump)
{
return sbas_l1_telemetry_decoder_gs_sptr(new sbas_l1_telemetry_decoder_gs(satellite, dump));
return sbas_l1_telemetry_decoder_gs_sptr(new sbas_l1_telemetry_decoder_gs(dump));
}
sbas_l1_telemetry_decoder_gs::sbas_l1_telemetry_decoder_gs(
const Gnss_Satellite &satellite,
bool dump) : telemetry_impl_interface("sbas_l1_telemetry_decoder_gs",
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)),
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))),
d_dump(dump),
d_channel(0),
d_block_size(D_SAMPLES_PER_SYMBOL * D_SYMBOLS_PER_BIT * D_BLOCK_SIZE_IN_BITS)
sbas_l1_telemetry_decoder_gs::sbas_l1_telemetry_decoder_gs(bool dump)
: telemetry_impl_interface("sbas_l1_telemetry_decoder_gs",
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)),
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))),
d_dump(dump),
d_channel(0),
d_block_size(D_SAMPLES_PER_SYMBOL * D_SYMBOLS_PER_BIT * D_BLOCK_SIZE_IN_BITS)
{
configure_basic_outputs();
// initialize internal vars
d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN());
LOG(INFO) << "SBAS L1 TELEMETRY PROCESSING: satellite " << d_satellite;
set_output_multiple(1);
}
@@ -36,9 +36,7 @@ class sbas_l1_telemetry_decoder_gs;
using sbas_l1_telemetry_decoder_gs_sptr = gnss_shared_ptr<sbas_l1_telemetry_decoder_gs>;
sbas_l1_telemetry_decoder_gs_sptr sbas_l1_make_telemetry_decoder_gs(
const Gnss_Satellite &satellite,
bool dump);
sbas_l1_telemetry_decoder_gs_sptr sbas_l1_make_telemetry_decoder_gs(bool dump);
/*!
* \brief This class implements a block that decodes the SBAS integrity and
@@ -59,11 +57,9 @@ public:
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) override;
private:
friend sbas_l1_telemetry_decoder_gs_sptr sbas_l1_make_telemetry_decoder_gs(
const Gnss_Satellite &satellite,
bool dump);
friend sbas_l1_telemetry_decoder_gs_sptr sbas_l1_make_telemetry_decoder_gs(bool dump);
sbas_l1_telemetry_decoder_gs(const Gnss_Satellite &satellite, bool dump);
explicit sbas_l1_telemetry_decoder_gs(bool dump);
void viterbi_decoder(double *page_part_symbols, int32_t *page_part_bits);
void align_samples();