mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2024-09-29 07:20:51 +00:00
Avoid segmentation faults if the SignalConditioner is not well defined in the configuration
This commit is contained in:
parent
24041058a6
commit
d249a7efcf
@ -57,6 +57,26 @@ void SignalConditioner::connect(gr::top_block_sptr top_block)
|
|||||||
in_filt_->connect(top_block);
|
in_filt_->connect(top_block);
|
||||||
res_->connect(top_block);
|
res_->connect(top_block);
|
||||||
|
|
||||||
|
if (in_filt_->item_size() == 0)
|
||||||
|
{
|
||||||
|
throw std::invalid_argument("itemsize mismatch: Invalid input/ouput data type configuration for the InputFilter");
|
||||||
|
}
|
||||||
|
|
||||||
|
const size_t data_type_adapter_output_size = data_type_adapt_->get_right_block()->output_signature()->sizeof_stream_item(0);
|
||||||
|
const size_t input_filter_input_size = in_filt_->get_left_block()->input_signature()->sizeof_stream_item(0);
|
||||||
|
const size_t input_filter_output_size = in_filt_->get_right_block()->output_signature()->sizeof_stream_item(0);
|
||||||
|
const size_t resampler_input_size = res_->get_left_block()->input_signature()->sizeof_stream_item(0);
|
||||||
|
|
||||||
|
if (data_type_adapter_output_size != input_filter_input_size)
|
||||||
|
{
|
||||||
|
throw std::invalid_argument("itemsize mismatch: Invalid input/ouput data type configuration for the DataTypeAdapter/InputFilter connection");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (input_filter_output_size != resampler_input_size)
|
||||||
|
{
|
||||||
|
throw std::invalid_argument("itemsize mismatch: Invalid input/ouput data type configuration for the Input Filter/Resampler connection");
|
||||||
|
}
|
||||||
|
|
||||||
top_block->connect(data_type_adapt_->get_right_block(), 0, in_filt_->get_left_block(), 0);
|
top_block->connect(data_type_adapt_->get_right_block(), 0, in_filt_->get_left_block(), 0);
|
||||||
DLOG(INFO) << "data_type_adapter -> input_filter";
|
DLOG(INFO) << "data_type_adapter -> input_filter";
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ BeamformerFilter::BeamformerFilter(
|
|||||||
{
|
{
|
||||||
LOG(WARNING) << item_type_
|
LOG(WARNING) << item_type_
|
||||||
<< " unrecognized item type for beamformer";
|
<< " unrecognized item type for beamformer";
|
||||||
item_size_ = sizeof(gr_complex);
|
item_size_ = 0;
|
||||||
}
|
}
|
||||||
if (dump_)
|
if (dump_)
|
||||||
{
|
{
|
||||||
|
@ -160,7 +160,7 @@ FreqXlatingFirFilter::FreqXlatingFirFilter(const ConfigurationInterface* configu
|
|||||||
{
|
{
|
||||||
LOG(ERROR) << " Unknown input filter input/output item type conversion";
|
LOG(ERROR) << " Unknown input filter input/output item type conversion";
|
||||||
item_size = sizeof(gr_complex); // avoids uninitialization
|
item_size = sizeof(gr_complex); // avoids uninitialization
|
||||||
input_size_ = sizeof(gr_complex); // avoids uninitialization
|
input_size_ = 0; // notifies wrong configuration
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dump_)
|
if (dump_)
|
||||||
|
@ -51,7 +51,7 @@ NotchFilter::NotchFilter(const ConfigurationInterface* configuration, const std:
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
LOG(WARNING) << item_type_ << " unrecognized item type for notch filter";
|
LOG(WARNING) << item_type_ << " unrecognized item type for notch filter";
|
||||||
item_size_ = sizeof(gr_complex);
|
item_size_ = 0; // notify wrong configuration
|
||||||
}
|
}
|
||||||
if (dump_)
|
if (dump_)
|
||||||
{
|
{
|
||||||
|
@ -58,7 +58,7 @@ NotchFilterLite::NotchFilterLite(const ConfigurationInterface* configuration, co
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
LOG(WARNING) << item_type_ << " unrecognized item type for notch filter";
|
LOG(WARNING) << item_type_ << " unrecognized item type for notch filter";
|
||||||
item_size_ = sizeof(gr_complex);
|
item_size_ = 0;
|
||||||
}
|
}
|
||||||
if (dump_)
|
if (dump_)
|
||||||
{
|
{
|
||||||
|
@ -31,14 +31,12 @@ PulseBlankingFilter::PulseBlankingFilter(const ConfigurationInterface* configura
|
|||||||
{
|
{
|
||||||
size_t item_size;
|
size_t item_size;
|
||||||
xlat_ = false;
|
xlat_ = false;
|
||||||
const std::string default_input_item_type("gr_complex");
|
const std::string default_item_type("gr_complex");
|
||||||
const std::string default_output_item_type("gr_complex");
|
|
||||||
const std::string default_dump_filename("../data/input_filter.dat");
|
const std::string default_dump_filename("../data/input_filter.dat");
|
||||||
|
|
||||||
DLOG(INFO) << "role " << role_;
|
DLOG(INFO) << "role " << role_;
|
||||||
|
|
||||||
input_item_type_ = configuration->property(role_ + ".input_item_type", default_input_item_type);
|
item_type_ = configuration->property(role_ + ".item_type", default_item_type);
|
||||||
output_item_type_ = configuration->property(role_ + ".output_item_type", default_output_item_type);
|
|
||||||
dump_ = configuration->property(role_ + ".dump", false);
|
dump_ = configuration->property(role_ + ".dump", false);
|
||||||
dump_filename_ = configuration->property(role_ + ".dump_filename", default_dump_filename);
|
dump_filename_ = configuration->property(role_ + ".dump_filename", default_dump_filename);
|
||||||
const float default_pfa_ = 0.04;
|
const float default_pfa_ = 0.04;
|
||||||
@ -49,7 +47,7 @@ PulseBlankingFilter::PulseBlankingFilter(const ConfigurationInterface* configura
|
|||||||
const int n_segments_est = configuration->property(role_ + ".segments_est", default_n_segments_est);
|
const int n_segments_est = configuration->property(role_ + ".segments_est", default_n_segments_est);
|
||||||
const int default_n_segments_reset = 5000000;
|
const int default_n_segments_reset = 5000000;
|
||||||
const int n_segments_reset = configuration->property(role_ + ".segments_reset", default_n_segments_reset);
|
const int n_segments_reset = configuration->property(role_ + ".segments_reset", default_n_segments_reset);
|
||||||
if (input_item_type_ == "gr_complex")
|
if (item_type_ == "gr_complex")
|
||||||
{
|
{
|
||||||
item_size = sizeof(gr_complex); // output
|
item_size = sizeof(gr_complex); // output
|
||||||
input_size_ = sizeof(gr_complex); // input
|
input_size_ = sizeof(gr_complex); // input
|
||||||
@ -57,9 +55,9 @@ PulseBlankingFilter::PulseBlankingFilter(const ConfigurationInterface* configura
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LOG(ERROR) << " Unknown input filter input/output item type conversion";
|
LOG(ERROR) << "Unknown input filter item_types conversion";
|
||||||
item_size = sizeof(gr_complex); // avoids uninitialization
|
item_size = sizeof(gr_complex); // avoids uninitialization
|
||||||
input_size_ = sizeof(gr_complex); // avoids uninitialization
|
input_size_ = 0; // notify wrong configuration
|
||||||
}
|
}
|
||||||
const double default_if = 0.0;
|
const double default_if = 0.0;
|
||||||
const double if_aux = configuration->property(role_ + ".if", default_if);
|
const double if_aux = configuration->property(role_ + ".if", default_if);
|
||||||
@ -95,7 +93,7 @@ PulseBlankingFilter::PulseBlankingFilter(const ConfigurationInterface* configura
|
|||||||
|
|
||||||
void PulseBlankingFilter::connect(gr::top_block_sptr top_block)
|
void PulseBlankingFilter::connect(gr::top_block_sptr top_block)
|
||||||
{
|
{
|
||||||
if (input_item_type_ == "gr_complex")
|
if (item_type_ == "gr_complex")
|
||||||
{
|
{
|
||||||
if (dump_)
|
if (dump_)
|
||||||
{
|
{
|
||||||
@ -116,7 +114,7 @@ void PulseBlankingFilter::connect(gr::top_block_sptr top_block)
|
|||||||
|
|
||||||
void PulseBlankingFilter::disconnect(gr::top_block_sptr top_block)
|
void PulseBlankingFilter::disconnect(gr::top_block_sptr top_block)
|
||||||
{
|
{
|
||||||
if (input_item_type_ == "gr_complex")
|
if (item_type_ == "gr_complex")
|
||||||
{
|
{
|
||||||
if (dump_)
|
if (dump_)
|
||||||
{
|
{
|
||||||
@ -136,7 +134,7 @@ void PulseBlankingFilter::disconnect(gr::top_block_sptr top_block)
|
|||||||
|
|
||||||
gr::basic_block_sptr PulseBlankingFilter::get_left_block()
|
gr::basic_block_sptr PulseBlankingFilter::get_left_block()
|
||||||
{
|
{
|
||||||
if (input_item_type_ == "gr_complex")
|
if (item_type_ == "gr_complex")
|
||||||
{
|
{
|
||||||
if (xlat_)
|
if (xlat_)
|
||||||
{
|
{
|
||||||
@ -151,7 +149,7 @@ gr::basic_block_sptr PulseBlankingFilter::get_left_block()
|
|||||||
|
|
||||||
gr::basic_block_sptr PulseBlankingFilter::get_right_block()
|
gr::basic_block_sptr PulseBlankingFilter::get_right_block()
|
||||||
{
|
{
|
||||||
if (input_item_type_ == "gr_complex")
|
if (item_type_ == "gr_complex")
|
||||||
{
|
{
|
||||||
return pulse_blanking_cc_;
|
return pulse_blanking_cc_;
|
||||||
}
|
}
|
||||||
|
@ -71,8 +71,7 @@ private:
|
|||||||
gr::filter::freq_xlating_fir_filter_ccf::sptr freq_xlating_;
|
gr::filter::freq_xlating_fir_filter_ccf::sptr freq_xlating_;
|
||||||
gr::blocks::file_sink::sptr file_sink_;
|
gr::blocks::file_sink::sptr file_sink_;
|
||||||
std::string dump_filename_;
|
std::string dump_filename_;
|
||||||
std::string input_item_type_;
|
std::string item_type_;
|
||||||
std::string output_item_type_;
|
|
||||||
std::string role_;
|
std::string role_;
|
||||||
size_t input_size_;
|
size_t input_size_;
|
||||||
unsigned int in_streams_;
|
unsigned int in_streams_;
|
||||||
|
@ -752,13 +752,27 @@ int GNSSFlowgraph::connect_signal_conditioners()
|
|||||||
help_hint_ += " Check the DataTypeAdapter documentation at https://gnss-sdr.org/docs/sp-blocks/data-type-adapter/\n";
|
help_hint_ += " Check the DataTypeAdapter documentation at https://gnss-sdr.org/docs/sp-blocks/data-type-adapter/\n";
|
||||||
}
|
}
|
||||||
if (std::string::npos != reported_error.find(std::string("InputFilter")))
|
if (std::string::npos != reported_error.find(std::string("InputFilter")))
|
||||||
|
{
|
||||||
|
if (std::string::npos != reported_error.find(std::string("itemsize mismatch")))
|
||||||
|
{
|
||||||
|
help_hint_ += " * The configured InputFilter input/output item types are not well defined.\n";
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
help_hint_ += " * The InputFilter implementation set in the configuration file does not exist\n";
|
help_hint_ += " * The InputFilter implementation set in the configuration file does not exist\n";
|
||||||
|
}
|
||||||
help_hint_ += " Check the InputFilter documentation at https://gnss-sdr.org/docs/sp-blocks/input-filter/\n";
|
help_hint_ += " Check the InputFilter documentation at https://gnss-sdr.org/docs/sp-blocks/input-filter/\n";
|
||||||
}
|
}
|
||||||
if (std::string::npos != reported_error.find(std::string("Resampler")))
|
if (std::string::npos != reported_error.find(std::string("Resampler")))
|
||||||
|
{
|
||||||
|
if (std::string::npos != reported_error.find(std::string("itemsize mismatch")))
|
||||||
|
{
|
||||||
|
help_hint_ += " * The configured Resampler item type is not well defined.\n";
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
help_hint_ += " * The Resampler implementation set in the configuration file does not exist\n";
|
help_hint_ += " * The Resampler implementation set in the configuration file does not exist\n";
|
||||||
|
}
|
||||||
help_hint_ += " Check the Resampler documentation at https://gnss-sdr.org/docs/sp-blocks/resampler/\n";
|
help_hint_ += " Check the Resampler documentation at https://gnss-sdr.org/docs/sp-blocks/resampler/\n";
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
|
Loading…
Reference in New Issue
Block a user