1
0
mirror of https://github.com/gnss-sdr/gnss-sdr synced 2025-07-02 01:52:58 +00:00

Merge branch 'next' into Arribas_branch/next

Conflicts:
	src/algorithms/signal_source/adapters/uhd_signal_source.cc
	src/core/receiver/gnss_flowgraph.cc
This commit is contained in:
Javier Arribas 2015-03-01 21:33:20 +01:00
commit 46752fcc7c
112 changed files with 1399 additions and 846 deletions

View File

@ -275,11 +275,19 @@ if(EXISTS $ENV{GTEST_DIR})
set(GTEST_DIR $ENV{GTEST_DIR}) set(GTEST_DIR $ENV{GTEST_DIR})
endif(EXISTS $ENV{GTEST_DIR}) endif(EXISTS $ENV{GTEST_DIR})
if(GTEST_DIR) if(GTEST_DIR)
message(STATUS "GTEST root folder at ${GTEST_DIR}") message(STATUS "Googletest root folder set at ${GTEST_DIR}")
find_path(LIBGTEST_DEV_DIR NAMES src/gtest-all.cc PATHS ${GTEST_DIR})
if(LIBGTEST_DEV_DIR)
message (STATUS "Googletest has been found.")
else(LIBGTEST_DEV_DIR)
message (FATAL_ERROR " Googletest source code has not been found at ${GTEST_DIR}.")
endif(LIBGTEST_DEV_DIR)
find_path(GTEST_INCLUDE_DIRS NAMES gtest/gtest.h PATHS ${GTEST_DIR}/include)
else(GTEST_DIR) else(GTEST_DIR)
find_path(LIBGTEST_DEV_DIR NAMES gtest-all.cc PATHS /usr/src/gtest/src) find_path(LIBGTEST_DEV_DIR NAMES src/gtest-all.cc PATHS /usr/src/gtest /opt/local/src/gtest)
find_path(GTEST_INCLUDE_DIRS NAMES gtest/gtest.h PATHS /usr/include /opt/local/include)
if(LIBGTEST_DEV_DIR) if(LIBGTEST_DEV_DIR)
message (STATUS " Googletest (libgtest-dev package) has been found.") message (STATUS "Googletest (libgtest-dev package) has been found.")
else(LIBGTEST_DEV_DIR) else(LIBGTEST_DEV_DIR)
message (STATUS " Googletest has not been found.") message (STATUS " Googletest has not been found.")
message (STATUS " Googletest will be downloaded and built automatically ") message (STATUS " Googletest will be downloaded and built automatically ")

View File

@ -29,10 +29,12 @@ GNSS-SDR.SUPL_CI=0x31b0
SignalSource.implementation=File_Signal_Source SignalSource.implementation=File_Signal_Source
;#filename: path to file with the captured GNSS signal samples to be processed ;#filename: path to file with the captured GNSS signal samples to be processed
SignalSource.filename=../data/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ;SignalSource.filename=../data/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat
SignalSource.filename=../../../Documents/workspace/code2/trunk/data/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
SignalSource.item_type=short ;SignalSource.item_type=short
SignalSource.item_type=byte
;#sampling_frequency: Original Signal sampling frequency in [Hz] ;#sampling_frequency: Original Signal sampling frequency in [Hz]
SignalSource.sampling_frequency=4000000 SignalSource.sampling_frequency=4000000
@ -75,7 +77,10 @@ SignalConditioner.implementation=Signal_Conditioner
;######### DATA_TYPE_ADAPTER CONFIG ############ ;######### DATA_TYPE_ADAPTER CONFIG ############
;## Changes the type of input data. Please disable it in this version. ;## Changes the type of input data. Please disable it in this version.
;#implementation: [Pass_Through] disables this block ;#implementation: [Pass_Through] disables this block
DataTypeAdapter.implementation=Ishort_To_Complex ;DataTypeAdapter.implementation=Ishort_To_Complex
;DataTypeAdapter.implementation=Ibyte_To_Cbyte
DataTypeAdapter.implementation=Pass_Through
DataTypeAdapter.item_type=byte
;######### INPUT_FILTER CONFIG ############ ;######### INPUT_FILTER CONFIG ############
;## Filter the input data. Can be combined with frequency translation for IF signals ;## Filter the input data. Can be combined with frequency translation for IF signals
@ -86,8 +91,8 @@ DataTypeAdapter.implementation=Ishort_To_Complex
;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz.
;InputFilter.implementation=Fir_Filter ;InputFilter.implementation=Fir_Filter
;InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.implementation=Freq_Xlating_Fir_Filter
InputFilter.implementation=Pass_Through ;InputFilter.implementation=Pass_Through
;#dump: Dump the filtered data to a file. ;#dump: Dump the filtered data to a file.
InputFilter.dump=false InputFilter.dump=false
@ -100,7 +105,7 @@ InputFilter.dump_filename=../data/input_filter.dat
;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands.
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
InputFilter.input_item_type=gr_complex InputFilter.input_item_type=byte
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter.output_item_type=gr_complex InputFilter.output_item_type=gr_complex
@ -167,6 +172,7 @@ Resampler.dump_filename=../data/resampler.dat
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
Resampler.item_type=gr_complex Resampler.item_type=gr_complex
;Resampler.item_type=cbyte
;#sample_freq_in: the sample frequency of the input signal ;#sample_freq_in: the sample frequency of the input signal
Resampler.sample_freq_in=8000000 Resampler.sample_freq_in=8000000

View File

@ -1,38 +1,38 @@
.\" Manpage for front-end-cal. .\" Manpage for front\-end\-cal.
.\" Contact javier.arribas@cttc.es to correct errors or typos. .\" Contact javier.arribas@cttc.es to correct errors or typos.
.TH front-end-cal 1 "15 Dec 2014" "0.0.1" "front-end-cal man page" .TH front\-end\-cal 1 "15 Dec 2014" "0.0.1" "front\-end\-cal man page"
.SH NAME .SH NAME
\fBfront-end-cal\fR \- RF front-end center frequency and sampling rate calibration tool. \fBfront\-end\-cal\fR \- RF front\-end center frequency and sampling rate calibration tool.
.SH SYNOPSIS .SH SYNOPSIS
\fBfront-end-cal -config_file=\fR\fI<path-to-configuration-file>\fR [OPTION]... \fBfront\-end\-cal \-config_file=\fR\fI<path\-to\-configuration\-file>\fR [OPTION]...
.SH DESCRIPTION .SH DESCRIPTION
\fBfront-end-cal\fR is a calibration tool for some DVB-T receivers based on the Taiwan's Realtek RTL2832U chipset, sold in form of USB dongles that allow users to watch over-the-air DVB-T European broadcast television on their personal computers, to be used as GNSS front-ends. \fBfront\-end\-cal\fR is a calibration tool for some DVB\-T receivers based on the Taiwan's Realtek RTL2832U chipset, sold in form of USB dongles that allow users to watch over\-the\-air DVB\-T European broadcast television on their personal computers, to be used as GNSS front\-ends.
\.TP \.TP
Normally, those devices send partially-decoded MPEG transport frames over the USB, but exploiting an undocumented mode of operation of the demodulator chip, the user is able to obtain raw I&Q samples, stream them through USB to a personal computer and then use \fBgnss-sdr\fR, turning the DVB-T receiver into a GNSS receiver and delivering position in real-time. Normally, those devices send partially\-decoded MPEG transport frames over the USB, but exploiting an undocumented mode of operation of the demodulator chip, the user is able to obtain raw I&Q samples, stream them through USB to a personal computer and then use \fBgnss\-sdr\fR, turning the DVB\-T receiver into a GNSS receiver and delivering position in real\-time.
\.TP \.TP
The crystal oscillator that ships with the RTL2832U family devices exhibits limited accuracy to be used as a GNSS receiver front-end without previous calibration. \fBfront-end-cal\fR automatizes the algorithm proposed in [1], and it requires Internet access since it retrieves Assisted GPS data from SUPL servers. The crystal oscillator that ships with the RTL2832U family devices exhibits limited accuracy to be used as a GNSS receiver front\-end without previous calibration. \fBfront\-end\-cal\fR implements the algorithm proposed in [1], and it requires Internet access since it retrieves Assisted GPS data from SUPL servers.
\.TP \.TP
\fBfront-end-cal\fR is able to work with raw data files or, if there is computational power enough, in real time with suitable radiofrequency front-ends. The whole receiver is defined in a single configuration file, and therefore users can define theirs. \fBfront\-end\-cal\fR is able to work with raw data files or, if there is computational power enough, in real time with suitable radio frequency front\-ends. The whole receiver is defined in a single configuration file, and therefore users can define theirs.
.SH OPTIONS .SH OPTIONS
\fBfront-end-cal\fR takes the following options: \fBfront\-end\-cal\fR takes the following options:
.TP .TP
\fB-config_file=\fR\fI<path-to-configuration-file>\fR Set the configuration file. \fB\-config_file=\fR\fI<path\-to\-configuration\-file>\fR Set the configuration file.
.TP .TP
\fB-signal_source=\fR\fI<path-to-raw-signal-file>\fR If defined, path to the file containing the signal samples (overrides the data file specified in the configuration file). \fB\-signal_source=\fR\fI<path\-to\-raw\-signal\-file>\fR If defined, path to the file containing the signal samples (overrides the data file specified in the configuration file).
.TP .TP
\fB-log_dir=\fR\fI<path-to-directory>\fR If defined, overrides the default directory where logs are saved. \fB\-log_dir=\fR\fI<path\-to\-directory>\fR If defined, overrides the default directory where logs are saved.
.TP .TP
\fB-version\fR Print program version and exit. \fB\-version\fR Print program version and exit.
.TP .TP
\fB-help\fR Print all the available commandline flags and exit. \fB\-help\fR Print all the available commandline flags and exit.
.SH SEE ALSO .SH SEE ALSO
.BR gnss-sdr (1), volk_gnsssdr_profile (1) .BR gnss\-sdr (1), volk_gnsssdr_profile (1)
\.TP \.TP
Example of configuration file available at: ${prefix}/share/gnss-sdr/conf/front-end-cal.conf, where ${prefix}$ uses to be /usr or /usr/local. This will be the configuration file used by default if the \fB-config_file\fR option is not set. Example of configuration file available at: ${prefix}/share/gnss\-sdr/conf/front\-end\-cal.conf, where ${prefix}$ uses to be /usr or /usr/local. This will be the configuration file used by default if the \fB\-config_file\fR option is not set.
\.TP \.TP
[1] C. Fernandez-Prades, J. Arribas, P. Closas, \fITurning a Television into a GNSS Receiver\fR, in Proceedings of ION GNSS+, 15-16 September 2013, Nashville, Tennessee (USA). A draft copy is freely available at http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/ [1] C. Fernandez\-Prades, J. Arribas, P. Closas, \fITurning a Television into a GNSS Receiver\fR, in Proceedings of ION GNSS+, 15\-16 September 2013, Nashville, Tennessee (USA). A draft copy is freely available at http://www.cttc.es/publication/turning\-a\-television\-into\-a\-gnss\-receiver/
\.TP \.TP
Check http://gnss-sdr.org for more information. Check http://gnss\\-sdr.org for more information.
.SH BUGS .SH BUGS
No known bugs. No known bugs.
.SH AUTHOR .SH AUTHOR

View File

@ -1,37 +1,37 @@
.\" Manpage for gnss-sdr. .\" Manpage for gnss\-sdr.
.\" Contact carles.fernandez@cttc.es to correct errors or typos. .\" Contact carles.fernandez@cttc.es to correct errors or typos.
.TH gnss-sdr 1 "14 Nov 2014" "0.0.5" "gnss-sdr man page" .TH gnss\-sdr 1 "14 Nov 2014" "0.0.5" "gnss\-sdr man page"
.SH NAME .SH NAME
\fBgnss-sdr\fR \- GNSS Software Defined Receiver. \fBgnss\-sdr\fR \- GNSS Software Defined Receiver.
.SH SYNOPSIS .SH SYNOPSIS
\fBgnss-sdr -config_file=\fR\fI<path-to-configuration-file>\fR [OPTION]... \fBgnss\-sdr \-config_file=\fR\fI<path\-to\-configuration\-file>\fR [OPTION]...
.SH DESCRIPTION .SH DESCRIPTION
\fBgnss-sdr\fR is a Global Navigation Satellite Systems Software Defined Receiver written in C++. It implements all the signal processing chain, taking as input raw samples coming from the output of an Analog-to-Digital Converter, and processing them up to the computation of the Position-Velocity-Time solution, including the generation of code and phase observables. \fBgnss\-sdr\fR is a Global Navigation Satellite Systems Software Defined Receiver written in C++. It implements all the signal processing chain, taking as input raw samples coming from the output of an Analog\-to\-Digital Converter, and processing them up to the computation of the Position\-Velocity\-Time solution, including the generation of code and phase measurements.
\.TP \.TP
\fBgnss-sdr\fR is able to work with raw data files or, if there is computational power enough, in real time with suitable radiofrequency front-ends. The whole receiver is defined in a single configuration file, and therefore users can define theirs. \fBgnss\-sdr\fR is able to work with raw data files or, if there is computational power enough, in real time with suitable radio frequency front\-ends. The whole receiver is defined in a single configuration file, and therefore users can define theirs.
.SH OPTIONS .SH OPTIONS
\fBgnss-sdr\fR takes the following options: \fBgnss\-sdr\fR takes the following options:
.TP .TP
\fB-config_file=\fR\fI<path-to-configuration-file>\fR Set the configuration file. \fB\-config_file=\fR\fI<path\-to\-configuration\-file>\fR Set the configuration file.
.TP .TP
\fB-signal_source=\fR\fI<path-to-raw-signal-file>\fR If defined, path to the file containing the signal samples (overrides the data file specified in the configuration file). \fB\-signal_source=\fR\fI<path\-to\-raw\-signal\-file>\fR If defined, path to the file containing the signal samples (overrides the data file specified in the configuration file).
.TP .TP
\fB-log_dir=\fR\fI<path-to-directory>\fR If defined, overrides the default directory where logs are saved. \fB\-log_dir=\fR\fI<path\-to\-directory>\fR If defined, overrides the default directory where logs are saved.
.TP .TP
\fB-RINEX_version=\fI<version>\fR Specifies the RINEX version (2.11 or 3.02). Default: "3.02". \fB\-RINEX_version=\fI<version>\fR Specifies the RINEX version (2.11 or 3.02). Default: "3.02".
.TP .TP
\fB-version\fR Print program version and exit. \fB\-version\fR Print program version and exit.
.TP .TP
\fB-help\fR Print all the available commandline flags and exit. \fB\-help\fR Print all the available commandline flags and exit.
.SH SEE ALSO .SH SEE ALSO
.BR volk_gnsssdr_profile (1) .BR volk_gnsssdr_profile (1)
\.TP \.TP
Examples of configuration files available at: ${prefix}/share/gnss-sdr/conf, where ${prefix}$ uses to be /usr or /usr/local. Examples of configuration files available at: ${prefix}/share/gnss\-sdr/conf, where ${prefix} uses to be /usr or /usr/local.
\.TP \.TP
Check http://gnss-sdr.org for more information. Check http://gnss\-sdr.org for more information.
.SH BUGS .SH BUGS
No known bugs. No known bugs.
.SH AUTHOR .SH AUTHOR
Carles Fernandez-Prades (carles.fernandez@cttc.es) Carles Fernandez\-Prades (carles.fernandez@cttc.es)
\.TP \.TP
This software package has been developed at CTTC (Centre Tecnologic de Telecomunicacions de Catalunya, http://www.cttc.es) with contributions from around the world. This software package has been developed at CTTC (Centre Tecnologic de Telecomunicacions de Catalunya, http://www.cttc.es) with contributions from around the world.

View File

@ -86,14 +86,16 @@ GalileoE1Pvt::~GalileoE1Pvt()
void GalileoE1Pvt::connect(gr::top_block_sptr top_block) void GalileoE1Pvt::connect(gr::top_block_sptr top_block)
{ {
// Nothing to connect internally if(top_block) { /* top_block is not null */};
// Nothing to connect internally
DLOG(INFO) << "nothing to connect internally"; DLOG(INFO) << "nothing to connect internally";
} }
void GalileoE1Pvt::disconnect(gr::top_block_sptr top_block) void GalileoE1Pvt::disconnect(gr::top_block_sptr top_block)
{ {
// Nothing to disconnect if(top_block) { /* top_block is not null */};
// Nothing to disconnect
} }
gr::basic_block_sptr GalileoE1Pvt::get_left_block() gr::basic_block_sptr GalileoE1Pvt::get_left_block()

View File

@ -85,14 +85,16 @@ GpsL1CaPvt::~GpsL1CaPvt()
void GpsL1CaPvt::connect(gr::top_block_sptr top_block) void GpsL1CaPvt::connect(gr::top_block_sptr top_block)
{ {
// Nothing to connect internally if(top_block) { /* top_block is not null */};
// Nothing to connect internally
DLOG(INFO) << "nothing to connect internally"; DLOG(INFO) << "nothing to connect internally";
} }
void GpsL1CaPvt::disconnect(gr::top_block_sptr top_block) void GpsL1CaPvt::disconnect(gr::top_block_sptr top_block)
{ {
// Nothing to disconnect if(top_block) { /* top_block is not null */};
// Nothing to disconnect
} }
gr::basic_block_sptr GpsL1CaPvt::get_left_block() gr::basic_block_sptr GpsL1CaPvt::get_left_block()

View File

@ -86,14 +86,16 @@ HybridPvt::~HybridPvt()
void HybridPvt::connect(gr::top_block_sptr top_block) void HybridPvt::connect(gr::top_block_sptr top_block)
{ {
// Nothing to connect internally if(top_block) { /* top_block is not null */};
// Nothing to connect internally
DLOG(INFO) << "nothing to connect internally"; DLOG(INFO) << "nothing to connect internally";
} }
void HybridPvt::disconnect(gr::top_block_sptr top_block) void HybridPvt::disconnect(gr::top_block_sptr top_block)
{ {
// Nothing to disconnect if(top_block) { /* top_block is not null */};
// Nothing to disconnect
} }
gr::basic_block_sptr HybridPvt::get_left_block() gr::basic_block_sptr HybridPvt::get_left_block()

View File

@ -932,7 +932,7 @@ void Rinex_Printer::log_rinex_nav(std::ofstream& out, const std::map<int,Gps_Eph
gps_ephemeris_iter++) gps_ephemeris_iter++)
{ {
// -------- SV / EPOCH / SV CLK // -------- SV / EPOCH / SV CLK
boost::posix_time::ptime p_utc_time = Rinex_Printer::compute_GPS_time(gps_ephemeris_iter->second,gps_ephemeris_iter->second.d_TOW); boost::posix_time::ptime p_utc_time = Rinex_Printer::compute_GPS_time(gps_ephemeris_iter->second, gps_ephemeris_iter->second.d_Toe);
std::string timestring = boost::posix_time::to_iso_string(p_utc_time); std::string timestring = boost::posix_time::to_iso_string(p_utc_time);
std::string month (timestring, 4, 2); std::string month (timestring, 4, 2);
std::string day (timestring, 6, 2); std::string day (timestring, 6, 2);
@ -946,15 +946,55 @@ void Rinex_Printer::log_rinex_nav(std::ofstream& out, const std::map<int,Gps_Eph
std::string year (timestring, 2, 2); std::string year (timestring, 2, 2);
line += year; line += year;
line += std::string(1, ' '); line += std::string(1, ' ');
line += month; if(boost::lexical_cast<int>(month) < 10)
{
line += std::string(1, ' ');
line += std::string(month, 1, 1);
}
else
{
line += month;
}
line += std::string(1, ' '); line += std::string(1, ' ');
line += day; if(boost::lexical_cast<int>(day) < 10)
{
line += std::string(1, ' ');
line += std::string(day, 1, 1);
}
else
{
line += day;
}
line += std::string(1, ' '); line += std::string(1, ' ');
line += hour; if(boost::lexical_cast<int>(hour) < 10)
{
line += std::string(1, ' ');
line += std::string(hour, 1, 1);
}
else
{
line += hour;
}
line += std::string(1, ' '); line += std::string(1, ' ');
line += minutes; if(boost::lexical_cast<int>(minutes) < 10)
{
line += std::string(1, ' ');
line += std::string(minutes, 1, 1);
}
else
{
line += minutes;
}
line += std::string(1, ' '); line += std::string(1, ' ');
line += seconds; if(boost::lexical_cast<int>(seconds) < 10)
{
line += std::string(1, ' ');
line += std::string(seconds, 1, 1);
}
else
{
line += seconds;
}
line += std::string(1, '.'); line += std::string(1, '.');
std::string decimal = std::string("0"); std::string decimal = std::string("0");
if (timestring.size() > 16) if (timestring.size() > 16)
@ -1010,18 +1050,15 @@ void Rinex_Printer::log_rinex_nav(std::ofstream& out, const std::map<int,Gps_Eph
{ {
line += std::string(5, ' '); line += std::string(5, ' ');
} }
// IODE is not present in ephemeris data
// If there is a discontinued reception the ephemeris is not validated // If there is a discontinued reception the ephemeris is not validated
//if (gps_ephemeris_iter->second.d_IODE_SF2 == gps_ephemeris_iter->second.d_IODE_SF3) if (gps_ephemeris_iter->second.d_IODE_SF2 == gps_ephemeris_iter->second.d_IODE_SF3)
// { {
// line += Rinex_Printer::doub2for(gps_ephemeris_iter->second.d_IODE_SF2, 18, 2); line += Rinex_Printer::doub2for(gps_ephemeris_iter->second.d_IODE_SF2, 18, 2);
// } }
//else else
// { {
// LOG(ERROR) << "Discontinued reception of Frame 2 and 3 " << std::endl; LOG(WARNING) << "Discontinued reception of Frame 2 and 3";
// } }
double d_IODE_SF2 = 0;
line += Rinex_Printer::doub2for(d_IODE_SF2, 18, 2);
line += std::string(1, ' '); line += std::string(1, ' ');
line += Rinex_Printer::doub2for(gps_ephemeris_iter->second.d_Crs, 18, 2); line += Rinex_Printer::doub2for(gps_ephemeris_iter->second.d_Crs, 18, 2);
line += std::string(1, ' '); line += std::string(1, ' ');
@ -2145,7 +2182,12 @@ void Rinex_Printer::log_rinex_obs(std::ofstream& out, const Gps_Ephemeris& eph,
line += std::string(1, ' '); line += std::string(1, ' ');
line += minutes; line += minutes;
line += std::string(1, ' '); line += std::string(1, ' ');
line += Rinex_Printer::asString(fmod(gps_t, 60), 7); double second_ = fmod(gps_t, 60);
if (second_ < 10)
{
line += std::string(1, ' ');
}
line += Rinex_Printer::asString(second_, 7);
line += std::string(2, ' '); line += std::string(2, ' ');
// Epoch flag 0: OK 1: power failure between previous and current epoch <1: Special event // Epoch flag 0: OK 1: power failure between previous and current epoch <1: Special event
line += std::string(1, '0'); line += std::string(1, '0');
@ -2195,12 +2237,33 @@ void Rinex_Printer::log_rinex_obs(std::ofstream& out, const Gps_Ephemeris& eph,
{ {
lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString<short>(lli), 1); lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString<short>(lli), 1);
} }
// Signal Strength Indicator (SSI)
int ssi = Rinex_Printer::signalStrength(pseudoranges_iter->second.CN0_dB_hz);
lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString<int>(ssi), 1);
// GPS L1 CA PHASE // GPS L1 CA PHASE
lineObs += Rinex_Printer::rightJustify(asString(pseudoranges_iter->second.Carrier_phase_rads/GPS_TWO_PI, 3), 14); lineObs += Rinex_Printer::rightJustify(asString(pseudoranges_iter->second.Carrier_phase_rads/GPS_TWO_PI, 3), 14);
if (lli == 0)
{
lineObs += std::string(1, ' ');
}
else
{
lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString<short>(lli), 1);
}
lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString<int>(ssi), 1);
// GPS L1 CA DOPPLER // GPS L1 CA DOPPLER
lineObs += Rinex_Printer::rightJustify(asString(pseudoranges_iter->second.Carrier_Doppler_hz, 3), 14); lineObs += Rinex_Printer::rightJustify(asString(pseudoranges_iter->second.Carrier_Doppler_hz, 3), 14);
if (lli == 0)
{
lineObs += std::string(1, ' ');
}
else
{
lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString<short>(lli), 1);
}
lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString<int>(ssi), 1);
//GPS L1 SIGNAL STRENGTH //GPS L1 SIGNAL STRENGTH
//int ssi=signalStrength(54.0); // The original RINEX 2.11 file stores the RSS in a tabulated format 1-9. However, it is also valid to store the CN0 using dB-Hz units
lineObs += Rinex_Printer::rightJustify(asString(pseudoranges_iter->second.CN0_dB_hz, 3), 14); lineObs += Rinex_Printer::rightJustify(asString(pseudoranges_iter->second.CN0_dB_hz, 3), 14);
if (lineObs.size() < 80) lineObs += std::string(80 - lineObs.size(), ' '); if (lineObs.size() < 80) lineObs += std::string(80 - lineObs.size(), ' ');
out << lineObs << std::endl; out << lineObs << std::endl;
@ -2223,7 +2286,7 @@ void Rinex_Printer::log_rinex_obs(std::ofstream& out, const Gps_Ephemeris& eph,
line += minutes; line += minutes;
line += std::string(1, ' '); line += std::string(1, ' ');
double seconds=fmod(gps_t, 60); double seconds = fmod(gps_t, 60);
// Add extra 0 if seconds are < 10 // Add extra 0 if seconds are < 10
if (seconds < 10) if (seconds < 10)
{ {
@ -2276,11 +2339,34 @@ void Rinex_Printer::log_rinex_obs(std::ofstream& out, const Gps_Ephemeris& eph,
lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString<short>(lli), 1); lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString<short>(lli), 1);
} }
// Signal Strength Indicator (SSI)
int ssi = Rinex_Printer::signalStrength(pseudoranges_iter->second.CN0_dB_hz);
lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString<int>(ssi), 1);
// GPS L1 CA PHASE // GPS L1 CA PHASE
lineObs += Rinex_Printer::rightJustify(asString(pseudoranges_iter->second.Carrier_phase_rads/GPS_TWO_PI, 3), 14); lineObs += Rinex_Printer::rightJustify(asString(pseudoranges_iter->second.Carrier_phase_rads/GPS_TWO_PI, 3), 14);
if (lli == 0)
{
lineObs += std::string(1, ' ');
}
else
{
lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString<short>(lli), 1);
}
lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString<int>(ssi), 1);
// GPS L1 CA DOPPLER // GPS L1 CA DOPPLER
lineObs += Rinex_Printer::rightJustify(asString(pseudoranges_iter->second.Carrier_Doppler_hz, 3), 14); lineObs += Rinex_Printer::rightJustify(asString(pseudoranges_iter->second.Carrier_Doppler_hz, 3), 14);
if (lli == 0)
{
lineObs += std::string(1, ' ');
}
else
{
lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString<short>(lli), 1);
}
lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString<int>(ssi), 1);
//GPS L1 SIGNAL STRENGTH //GPS L1 SIGNAL STRENGTH
lineObs += Rinex_Printer::rightJustify(asString(pseudoranges_iter->second.CN0_dB_hz, 3), 14); lineObs += Rinex_Printer::rightJustify(asString(pseudoranges_iter->second.CN0_dB_hz, 3), 14);
@ -2376,10 +2462,35 @@ void Rinex_Printer::log_rinex_obs(std::ofstream& out, const Galileo_Ephemeris& e
{ {
lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString<short>(lli), 1); lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString<short>(lli), 1);
} }
// Signal Strength Indicator (SSI)
int ssi = Rinex_Printer::signalStrength(pseudoranges_iter->second.CN0_dB_hz);
lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString<int>(ssi), 1);
// Galileo E1B PHASE // Galileo E1B PHASE
lineObs += Rinex_Printer::rightJustify(asString(pseudoranges_iter->second.Carrier_phase_rads / (2 * GALILEO_PI), 3), 14); lineObs += Rinex_Printer::rightJustify(asString(pseudoranges_iter->second.Carrier_phase_rads / (2 * GALILEO_PI), 3), 14);
if (lli == 0)
{
lineObs += std::string(1, ' ');
}
else
{
lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString<short>(lli), 1);
}
lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString<int>(ssi), 1);
// Galileo E1B DOPPLER // Galileo E1B DOPPLER
lineObs += Rinex_Printer::rightJustify(asString(pseudoranges_iter->second.Carrier_Doppler_hz, 3), 14); lineObs += Rinex_Printer::rightJustify(asString(pseudoranges_iter->second.Carrier_Doppler_hz, 3), 14);
if (lli == 0)
{
lineObs += std::string(1, ' ');
}
else
{
lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString<short>(lli), 1);
}
lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString<int>(ssi), 1);
// Galileo E1B SIGNAL STRENGTH // Galileo E1B SIGNAL STRENGTH
lineObs += Rinex_Printer::rightJustify(asString(pseudoranges_iter->second.CN0_dB_hz, 3), 14); lineObs += Rinex_Printer::rightJustify(asString(pseudoranges_iter->second.CN0_dB_hz, 3), 14);
if (lineObs.size() < 80) lineObs += std::string(80 - lineObs.size(), ' '); if (lineObs.size() < 80) lineObs += std::string(80 - lineObs.size(), ' ');
@ -2472,11 +2583,33 @@ void Rinex_Printer::log_rinex_obs(std::ofstream& out, const Gps_Ephemeris& gps_e
lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString<short>(lli), 1); lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString<short>(lli), 1);
} }
// Signal Strength Indicator (SSI)
int ssi = Rinex_Printer::signalStrength(pseudoranges_iter->second.CN0_dB_hz);
lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString<int>(ssi), 1);
// PHASE // PHASE
lineObs += Rinex_Printer::rightJustify(asString(pseudoranges_iter->second.Carrier_phase_rads/GPS_TWO_PI, 3), 14); lineObs += Rinex_Printer::rightJustify(asString(pseudoranges_iter->second.Carrier_phase_rads/GPS_TWO_PI, 3), 14);
if (lli == 0)
{
lineObs += std::string(1, ' ');
}
else
{
lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString<short>(lli), 1);
}
lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString<int>(ssi), 1);
// DOPPLER // DOPPLER
lineObs += Rinex_Printer::rightJustify(asString(pseudoranges_iter->second.Carrier_Doppler_hz, 3), 14); lineObs += Rinex_Printer::rightJustify(asString(pseudoranges_iter->second.Carrier_Doppler_hz, 3), 14);
if (lli == 0)
{
lineObs += std::string(1, ' ');
}
else
{
lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString<short>(lli), 1);
}
lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString<int>(ssi), 1);
// SIGNAL STRENGTH // SIGNAL STRENGTH
lineObs += Rinex_Printer::rightJustify(asString(pseudoranges_iter->second.CN0_dB_hz, 3), 14); lineObs += Rinex_Printer::rightJustify(asString(pseudoranges_iter->second.CN0_dB_hz, 3), 14);

View File

@ -16,37 +16,25 @@
# along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>. # along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
# #
set(ACQ_ADAPTER_SOURCES
gps_l1_ca_pcps_acquisition.cc
gps_l1_ca_pcps_multithread_acquisition.cc
gps_l1_ca_pcps_assisted_acquisition.cc
gps_l1_ca_pcps_acquisition_fine_doppler.cc
gps_l1_ca_pcps_tong_acquisition.cc
gps_l1_ca_pcps_quicksync_acquisition.cc
galileo_e1_pcps_ambiguous_acquisition.cc
galileo_e1_pcps_cccwsr_ambiguous_acquisition.cc
galileo_e1_pcps_quicksync_ambiguous_acquisition.cc
galileo_e1_pcps_tong_ambiguous_acquisition.cc
galileo_e1_pcps_8ms_ambiguous_acquisition.cc
galileo_e5a_noncoherent_iq_acquisition_caf.cc
)
if(OPENCL_FOUND) if(OPENCL_FOUND)
set(ACQ_ADAPTER_SOURCES set(ACQ_ADAPTER_SOURCES ${ACQ_ADAPTER_SOURCES} gps_l1_ca_pcps_opencl_acquisition.cc)
gps_l1_ca_pcps_acquisition.cc
gps_l1_ca_pcps_multithread_acquisition.cc
gps_l1_ca_pcps_assisted_acquisition.cc
gps_l1_ca_pcps_acquisition_fine_doppler.cc
gps_l1_ca_pcps_tong_acquisition.cc
gps_l1_ca_pcps_quicksync_acquisition.cc
gps_l1_ca_pcps_opencl_acquisition.cc
galileo_e1_pcps_ambiguous_acquisition.cc
galileo_e1_pcps_cccwsr_ambiguous_acquisition.cc
galileo_e1_pcps_quicksync_ambiguous_acquisition.cc
galileo_e1_pcps_tong_ambiguous_acquisition.cc
galileo_e1_pcps_8ms_ambiguous_acquisition.cc
galileo_e5a_noncoherent_iq_acquisition_caf.cc
)
else(OPENCL_FOUND)
set(ACQ_ADAPTER_SOURCES
gps_l1_ca_pcps_acquisition.cc
gps_l1_ca_pcps_multithread_acquisition.cc
gps_l1_ca_pcps_assisted_acquisition.cc
gps_l1_ca_pcps_acquisition_fine_doppler.cc
gps_l1_ca_pcps_tong_acquisition.cc
gps_l1_ca_pcps_quicksync_acquisition.cc
galileo_e1_pcps_ambiguous_acquisition.cc
galileo_e1_pcps_cccwsr_ambiguous_acquisition.cc
galileo_e1_pcps_quicksync_ambiguous_acquisition.cc
galileo_e1_pcps_tong_ambiguous_acquisition.cc
galileo_e1_pcps_8ms_ambiguous_acquisition.cc
galileo_e5a_noncoherent_iq_acquisition_caf.cc
)
endif(OPENCL_FOUND) endif(OPENCL_FOUND)
include_directories( include_directories(
@ -60,9 +48,11 @@ include_directories(
${GLOG_INCLUDE_DIRS} ${GLOG_INCLUDE_DIRS}
${GFlags_INCLUDE_DIRS} ${GFlags_INCLUDE_DIRS}
${GNURADIO_RUNTIME_INCLUDE_DIRS} ${GNURADIO_RUNTIME_INCLUDE_DIRS}
${GNURADIO_BLOCKS_INCLUDE_DIRS}
) )
file(GLOB ACQ_ADAPTER_HEADERS "*.h") file(GLOB ACQ_ADAPTER_HEADERS "*.h")
add_library(acq_adapters ${ACQ_ADAPTER_SOURCES} ${ACQ_ADAPTER_HEADERS}) add_library(acq_adapters ${ACQ_ADAPTER_SOURCES} ${ACQ_ADAPTER_HEADERS})
source_group(Headers FILES ${ACQ_ADAPTER_HEADERS}) source_group(Headers FILES ${ACQ_ADAPTER_HEADERS})
target_link_libraries(acq_adapters gnss_sp_libs acq_gr_blocks ${Boost_LIBRARIES} ${GNURADIO_RUNTIME_LIBRARIES} ${GNURADIO_BLOCKS_LIBRARIES}) target_link_libraries(acq_adapters gnss_sp_libs acq_gr_blocks ${Boost_LIBRARIES} ${GNURADIO_RUNTIME_LIBRARIES} ${GNURADIO_BLOCKS_LIBRARIES})

View File

@ -267,6 +267,12 @@ GalileoE1PcpsAmbiguousAcquisition::reset()
} }
} }
void
GalileoE1PcpsAmbiguousAcquisition::set_state(int state)
{
acquisition_cc_->set_state(state);
}
float GalileoE1PcpsAmbiguousAcquisition::calculate_threshold(float pfa) float GalileoE1PcpsAmbiguousAcquisition::calculate_threshold(float pfa)
{ {
unsigned int frequency_bins = 0; unsigned int frequency_bins = 0;

View File

@ -129,6 +129,11 @@ public:
*/ */
void reset(); void reset();
/*!
* \brief If state = 1, it forces the block to start acquiring from the first sample
*/
void set_state(int state);
private: private:
ConfigurationInterface* configuration_; ConfigurationInterface* configuration_;
pcps_acquisition_cc_sptr acquisition_cc_; pcps_acquisition_cc_sptr acquisition_cc_;

View File

@ -259,10 +259,18 @@ GalileoE1PcpsCccwsrAmbiguousAcquisition::reset()
} }
} }
void
GalileoE1PcpsCccwsrAmbiguousAcquisition::set_state(int state)
{
acquisition_cc_->set_state(state);
}
float GalileoE1PcpsCccwsrAmbiguousAcquisition::calculate_threshold(float pfa) float GalileoE1PcpsCccwsrAmbiguousAcquisition::calculate_threshold(float pfa)
{ {
return 0.0; if(pfa){ /* Not implemented*/};
return 0.0;
} }

View File

@ -126,6 +126,11 @@ public:
*/ */
void reset(); void reset();
/*!
* \brief If state = 1, it forces the block to start acquiring from the first sample
*/
void set_state(int state);
private: private:
ConfigurationInterface* configuration_; ConfigurationInterface* configuration_;
pcps_cccwsr_acquisition_cc_sptr acquisition_cc_; pcps_cccwsr_acquisition_cc_sptr acquisition_cc_;

View File

@ -294,6 +294,16 @@ GalileoE1PcpsQuickSyncAmbiguousAcquisition::reset()
} }
} }
void GalileoE1PcpsQuickSyncAmbiguousAcquisition::set_state(int state)
{
if (item_type_.compare("gr_complex") == 0)
{
acquisition_cc_->set_state(state);
}
}
float GalileoE1PcpsQuickSyncAmbiguousAcquisition::calculate_threshold(float pfa) float GalileoE1PcpsQuickSyncAmbiguousAcquisition::calculate_threshold(float pfa)
{ {
unsigned int frequency_bins = 0; unsigned int frequency_bins = 0;

View File

@ -129,6 +129,11 @@ public:
*/ */
void reset(); void reset();
/*!
* \brief If state = 1, it forces the block to start acquiring from the first sample
*/
void set_state(int state);
private: private:
ConfigurationInterface* configuration_; ConfigurationInterface* configuration_;
pcps_quicksync_acquisition_cc_sptr acquisition_cc_; pcps_quicksync_acquisition_cc_sptr acquisition_cc_;

View File

@ -259,6 +259,12 @@ GalileoE1PcpsTongAmbiguousAcquisition::reset()
} }
} }
void
GalileoE1PcpsTongAmbiguousAcquisition::set_state(int state)
{
acquisition_cc_->set_state(state);
}
float GalileoE1PcpsTongAmbiguousAcquisition::calculate_threshold(float pfa) float GalileoE1PcpsTongAmbiguousAcquisition::calculate_threshold(float pfa)
{ {

View File

@ -129,6 +129,11 @@ public:
*/ */
void reset(); void reset();
/*!
* \brief If state = 1, it forces the block to start acquiring from the first sample
*/
void set_state(int state);
private: private:
ConfigurationInterface* configuration_; ConfigurationInterface* configuration_;
pcps_tong_acquisition_cc_sptr acquisition_cc_; pcps_tong_acquisition_cc_sptr acquisition_cc_;

View File

@ -304,16 +304,23 @@ float GalileoE5aNoncoherentIQAcquisitionCaf::calculate_threshold(float pfa)
return threshold; return threshold;
} }
void GalileoE5aNoncoherentIQAcquisitionCaf::set_state(int state)
{
acquisition_cc_->set_state(state);
}
void GalileoE5aNoncoherentIQAcquisitionCaf::connect(gr::top_block_sptr top_block) void GalileoE5aNoncoherentIQAcquisitionCaf::connect(gr::top_block_sptr top_block)
{ {
// Nothing to connect internally if(top_block) { /* top_block is not null */};
// Nothing to connect internally
} }
void GalileoE5aNoncoherentIQAcquisitionCaf::disconnect(gr::top_block_sptr top_block) void GalileoE5aNoncoherentIQAcquisitionCaf::disconnect(gr::top_block_sptr top_block)
{ {
// Nothing to disconnect internally if(top_block) { /* top_block is not null */};
// Nothing to disconnect internally
} }
gr::basic_block_sptr GalileoE5aNoncoherentIQAcquisitionCaf::get_left_block() gr::basic_block_sptr GalileoE5aNoncoherentIQAcquisitionCaf::get_left_block()

View File

@ -129,6 +129,13 @@ public:
*/ */
void reset(); void reset();
/*!
* \brief If set to 1, ensures that acquisition starts at the
* first available sample.
* \param state - int=1 forces start of acquisition
*/
void set_state(int state);
private: private:
ConfigurationInterface* configuration_; ConfigurationInterface* configuration_;
galileo_e5a_noncoherentIQ_acquisition_caf_cc_sptr acquisition_cc_; galileo_e5a_noncoherentIQ_acquisition_caf_cc_sptr acquisition_cc_;

View File

@ -60,6 +60,7 @@ GpsL1CaPcpsAcquisition::GpsL1CaPcpsAcquisition(
item_type_ = configuration_->property(role + ".item_type", item_type_ = configuration_->property(role + ".item_type",
default_item_type); default_item_type);
//float pfa = configuration_->property(role + ".pfa", 0.0);
fs_in_ = configuration_->property("GNSS-SDR.internal_fs_hz", 2048000); fs_in_ = configuration_->property("GNSS-SDR.internal_fs_hz", 2048000);
if_ = configuration_->property(role + ".ifreq", 0); if_ = configuration_->property(role + ".ifreq", 0);
@ -89,25 +90,36 @@ GpsL1CaPcpsAcquisition::GpsL1CaPcpsAcquisition(
code_= new gr_complex[vector_length_]; code_= new gr_complex[vector_length_];
if (item_type_.compare("gr_complex") == 0) // if (item_type_.compare("gr_complex") == 0 )
{ // {
item_size_ = sizeof(gr_complex); item_size_ = sizeof(gr_complex);
acquisition_cc_ = pcps_make_acquisition_cc(sampled_ms_, max_dwells_, acquisition_cc_ = pcps_make_acquisition_cc(sampled_ms_, max_dwells_,
shift_resolution_, if_, fs_in_, code_length_, code_length_, shift_resolution_, if_, fs_in_, code_length_, code_length_,
bit_transition_flag_, queue_, dump_, dump_filename_); bit_transition_flag_, queue_, dump_, dump_filename_);
stream_to_vector_ = gr::blocks::stream_to_vector::make(item_size_, vector_length_); stream_to_vector_ = gr::blocks::stream_to_vector::make(item_size_, vector_length_);
DLOG(INFO) << "stream_to_vector(" << stream_to_vector_->unique_id() DLOG(INFO) << "stream_to_vector(" << stream_to_vector_->unique_id() << ")";
<< ")"; DLOG(INFO) << "acquisition(" << acquisition_cc_->unique_id() << ")";
DLOG(INFO) << "acquisition(" << acquisition_cc_->unique_id() // }
<< ")";
} if (item_type_.compare("cshort") == 0)
else {
{ cshort_to_float_x2_ = make_cshort_to_float_x2();
LOG(WARNING) << item_type_ float_to_complex_ = gr::blocks::float_to_complex::make();
<< " unknown acquisition item type"; }
}
if (item_type_.compare("cbyte") == 0)
{
cbyte_to_float_x2_ = make_complex_byte_to_float_x2();
float_to_complex_ = gr::blocks::float_to_complex::make();
}
//}
//else
// {
// LOG(WARNING) << item_type_
// << " unknown acquisition item type";
// }
} }
@ -120,56 +132,56 @@ GpsL1CaPcpsAcquisition::~GpsL1CaPcpsAcquisition()
void GpsL1CaPcpsAcquisition::set_channel(unsigned int channel) void GpsL1CaPcpsAcquisition::set_channel(unsigned int channel)
{ {
channel_ = channel; channel_ = channel;
if (item_type_.compare("gr_complex") == 0) //if (item_type_.compare("gr_complex") == 0)
{ //{
acquisition_cc_->set_channel(channel_); acquisition_cc_->set_channel(channel_);
} //}
} }
void GpsL1CaPcpsAcquisition::set_threshold(float threshold) void GpsL1CaPcpsAcquisition::set_threshold(float threshold)
{ {
float pfa = configuration_->property(role_ + boost::lexical_cast<std::string>(channel_) + ".pfa", 0.0); float pfa = configuration_->property(role_ + boost::lexical_cast<std::string>(channel_) + ".pfa", 0.0);
if(pfa == 0.0) if(pfa == 0.0)
{ {
pfa = configuration_->property(role_+".pfa", 0.0); pfa = configuration_->property(role_+".pfa", 0.0);
}
if(pfa == 0.0)
{
threshold_ = threshold;
}
else
{
threshold_ = calculate_threshold(pfa);
} }
if(pfa == 0.0)
{
threshold_ = threshold;
}
else
{
threshold_ = calculate_threshold(pfa);
}
DLOG(INFO) <<"Channel "<<channel_<<" Threshold = " << threshold_; DLOG(INFO) <<"Channel "<<channel_<<" Threshold = " << threshold_;
if (item_type_.compare("gr_complex") == 0) // if (item_type_.compare("gr_complex") == 0)
{ // {
acquisition_cc_->set_threshold(threshold_); acquisition_cc_->set_threshold(threshold_);
} // }
} }
void GpsL1CaPcpsAcquisition::set_doppler_max(unsigned int doppler_max) void GpsL1CaPcpsAcquisition::set_doppler_max(unsigned int doppler_max)
{ {
doppler_max_ = doppler_max; doppler_max_ = doppler_max;
if (item_type_.compare("gr_complex") == 0) // if (item_type_.compare("gr_complex") == 0)
{ // {
acquisition_cc_->set_doppler_max(doppler_max_); acquisition_cc_->set_doppler_max(doppler_max_);
} // }
} }
void GpsL1CaPcpsAcquisition::set_doppler_step(unsigned int doppler_step) void GpsL1CaPcpsAcquisition::set_doppler_step(unsigned int doppler_step)
{ {
doppler_step_ = doppler_step; doppler_step_ = doppler_step;
if (item_type_.compare("gr_complex") == 0) // if (item_type_.compare("gr_complex") == 0)
{ // {
acquisition_cc_->set_doppler_step(doppler_step_); acquisition_cc_->set_doppler_step(doppler_step_);
} // }
} }
@ -178,33 +190,33 @@ void GpsL1CaPcpsAcquisition::set_channel_queue(
concurrent_queue<int> *channel_internal_queue) concurrent_queue<int> *channel_internal_queue)
{ {
channel_internal_queue_ = channel_internal_queue; channel_internal_queue_ = channel_internal_queue;
if (item_type_.compare("gr_complex") == 0) // if (item_type_.compare("gr_complex") == 0)
{ // {
acquisition_cc_->set_channel_queue(channel_internal_queue_); acquisition_cc_->set_channel_queue(channel_internal_queue_);
} // }
} }
void GpsL1CaPcpsAcquisition::set_gnss_synchro(Gnss_Synchro* gnss_synchro) void GpsL1CaPcpsAcquisition::set_gnss_synchro(Gnss_Synchro* gnss_synchro)
{ {
gnss_synchro_ = gnss_synchro; gnss_synchro_ = gnss_synchro;
if (item_type_.compare("gr_complex") == 0) // if (item_type_.compare("gr_complex") == 0)
{ // {
acquisition_cc_->set_gnss_synchro(gnss_synchro_); acquisition_cc_->set_gnss_synchro(gnss_synchro_);
} // }
} }
signed int GpsL1CaPcpsAcquisition::mag() signed int GpsL1CaPcpsAcquisition::mag()
{ {
if (item_type_.compare("gr_complex") == 0) // // if (item_type_.compare("gr_complex") == 0)
{ // {
return acquisition_cc_->mag(); return acquisition_cc_->mag();
} // }
else // else
{ // {
return 0; // return 0;
} // }
} }
@ -217,33 +229,42 @@ void GpsL1CaPcpsAcquisition::init()
void GpsL1CaPcpsAcquisition::set_local_code() void GpsL1CaPcpsAcquisition::set_local_code()
{ {
if (item_type_.compare("gr_complex") == 0) // if (item_type_.compare("gr_complex") == 0)
{ // {
std::complex<float>* code = new std::complex<float>[code_length_]; std::complex<float>* code = new std::complex<float>[code_length_];
gps_l1_ca_code_gen_complex_sampled(code, gnss_synchro_->PRN, fs_in_, 0); gps_l1_ca_code_gen_complex_sampled(code, gnss_synchro_->PRN, fs_in_, 0);
for (unsigned int i = 0; i < sampled_ms_; i++) for (unsigned int i = 0; i < sampled_ms_; i++)
{ {
memcpy(&(code_[i*code_length_]), code, memcpy(&(code_[i*code_length_]), code,
sizeof(gr_complex)*code_length_); sizeof(gr_complex)*code_length_);
} }
acquisition_cc_->set_local_code(code_); acquisition_cc_->set_local_code(code_);
delete[] code; delete[] code;
} // }
} }
void GpsL1CaPcpsAcquisition::reset() void GpsL1CaPcpsAcquisition::reset()
{ {
if (item_type_.compare("gr_complex") == 0) // if (item_type_.compare("gr_complex") == 0)
{ // {
acquisition_cc_->set_active(true); acquisition_cc_->set_active(true);
} // }
} }
void GpsL1CaPcpsAcquisition::set_state(int state)
{
// if (item_type_.compare("gr_complex") == 0)
// {
acquisition_cc_->set_state(state);
// }
}
float GpsL1CaPcpsAcquisition::calculate_threshold(float pfa) float GpsL1CaPcpsAcquisition::calculate_threshold(float pfa)
{ {
@ -271,6 +292,24 @@ void GpsL1CaPcpsAcquisition::connect(gr::top_block_sptr top_block)
{ {
top_block->connect(stream_to_vector_, 0, acquisition_cc_, 0); top_block->connect(stream_to_vector_, 0, acquisition_cc_, 0);
} }
else if (item_type_.compare("cshort") == 0)
{
top_block->connect(cshort_to_float_x2_, 0, float_to_complex_, 0);
top_block->connect(cshort_to_float_x2_, 1, float_to_complex_, 1);
top_block->connect(float_to_complex_, 0, stream_to_vector_, 0);
top_block->connect(stream_to_vector_, 0, acquisition_cc_, 0);
}
else if (item_type_.compare("cbyte") == 0)
{
top_block->connect(cbyte_to_float_x2_, 0, float_to_complex_, 0);
top_block->connect(cbyte_to_float_x2_, 1, float_to_complex_, 1);
top_block->connect(float_to_complex_, 0, stream_to_vector_, 0);
top_block->connect(stream_to_vector_, 0, acquisition_cc_, 0);
}
else
{
LOG(WARNING) << item_type_ << " unknown acquisition item type";
}
} }
@ -278,15 +317,53 @@ void GpsL1CaPcpsAcquisition::connect(gr::top_block_sptr top_block)
void GpsL1CaPcpsAcquisition::disconnect(gr::top_block_sptr top_block) void GpsL1CaPcpsAcquisition::disconnect(gr::top_block_sptr top_block)
{ {
if (item_type_.compare("gr_complex") == 0) if (item_type_.compare("gr_complex") == 0)
{ {
top_block->disconnect(stream_to_vector_, 0, acquisition_cc_, 0); top_block->disconnect(stream_to_vector_, 0, acquisition_cc_, 0);
} }
else if (item_type_.compare("cshort") == 0)
{
// Since a short-based acq implementation is not available,
// we just convert cshorts to gr_complex
top_block->disconnect(cshort_to_float_x2_, 0, float_to_complex_, 0);
top_block->disconnect(cshort_to_float_x2_, 1, float_to_complex_, 1);
top_block->disconnect(float_to_complex_, 0, stream_to_vector_, 0);
top_block->disconnect(stream_to_vector_, 0, acquisition_cc_, 0);
}
else if (item_type_.compare("cbyte") == 0)
{
// Since a byte-based acq implementation is not available,
// we just convert cshorts to gr_complex
top_block->disconnect(cbyte_to_float_x2_, 0, float_to_complex_, 0);
top_block->disconnect(cbyte_to_float_x2_, 1, float_to_complex_, 1);
top_block->disconnect(float_to_complex_, 0, stream_to_vector_, 0);
top_block->disconnect(stream_to_vector_, 0, acquisition_cc_, 0);
}
else
{
LOG(WARNING) << item_type_ << " unknown acquisition item type";
}
} }
gr::basic_block_sptr GpsL1CaPcpsAcquisition::get_left_block() gr::basic_block_sptr GpsL1CaPcpsAcquisition::get_left_block()
{ {
return stream_to_vector_; if (item_type_.compare("gr_complex") == 0)
{
return stream_to_vector_;
}
else if (item_type_.compare("cshort") == 0)
{
return cshort_to_float_x2_;
}
else if (item_type_.compare("cbyte") == 0)
{
return cbyte_to_float_x2_;
}
else
{
LOG(WARNING) << item_type_ << " unknown acquisition item type";
return nullptr;
}
} }

View File

@ -39,9 +39,12 @@
#include <string> #include <string>
#include <gnuradio/msg_queue.h> #include <gnuradio/msg_queue.h>
#include <gnuradio/blocks/stream_to_vector.h> #include <gnuradio/blocks/stream_to_vector.h>
#include <gnuradio/blocks/float_to_complex.h>
#include "gnss_synchro.h" #include "gnss_synchro.h"
#include "acquisition_interface.h" #include "acquisition_interface.h"
#include "pcps_acquisition_cc.h" #include "pcps_acquisition_cc.h"
#include "cshort_to_float_x2.h"
#include "complex_byte_to_float_x2.h"
@ -134,10 +137,18 @@ public:
*/ */
void reset(); void reset();
/*!
* \brief If state = 1, it forces the block to start acquiring from the first sample
*/
void set_state(int state);
private: private:
ConfigurationInterface* configuration_; ConfigurationInterface* configuration_;
pcps_acquisition_cc_sptr acquisition_cc_; pcps_acquisition_cc_sptr acquisition_cc_;
gr::blocks::stream_to_vector::sptr stream_to_vector_; gr::blocks::stream_to_vector::sptr stream_to_vector_;
gr::blocks::float_to_complex::sptr float_to_complex_;
cshort_to_float_x2_sptr cshort_to_float_x2_;
complex_byte_to_float_x2_sptr cbyte_to_float_x2_;
size_t item_size_; size_t item_size_;
std::string item_type_; std::string item_type_;
unsigned int vector_length_; unsigned int vector_length_;

View File

@ -166,7 +166,7 @@ void GpsL1CaPcpsAcquisitionFineDoppler::reset()
void GpsL1CaPcpsAcquisitionFineDoppler::connect(boost::shared_ptr<gr::top_block> top_block) void GpsL1CaPcpsAcquisitionFineDoppler::connect(boost::shared_ptr<gr::top_block> top_block)
{ {
if(top_block) { /* top_block is not null */};
//nothing to disconnect, now the tracking uses gr_sync_decimator //nothing to disconnect, now the tracking uses gr_sync_decimator
} }
@ -174,7 +174,8 @@ void GpsL1CaPcpsAcquisitionFineDoppler::connect(boost::shared_ptr<gr::top_block>
void GpsL1CaPcpsAcquisitionFineDoppler::disconnect(boost::shared_ptr<gr::top_block> top_block) void GpsL1CaPcpsAcquisitionFineDoppler::disconnect(boost::shared_ptr<gr::top_block> top_block)
{ {
//nothing to disconnect, now the tracking uses gr_sync_decimator if(top_block) { /* top_block is not null */};
//nothing to disconnect, now the tracking uses gr_sync_decimator
} }

View File

@ -163,15 +163,15 @@ void GpsL1CaPcpsAssistedAcquisition::reset()
void GpsL1CaPcpsAssistedAcquisition::connect(gr::top_block_sptr top_block) void GpsL1CaPcpsAssistedAcquisition::connect(gr::top_block_sptr top_block)
{ {
if(top_block) { /* top_block is not null */};
//nothing to disconnect, now the tracking uses gr_sync_decimator //nothing to disconnect, now the tracking uses gr_sync_decimator
} }
void GpsL1CaPcpsAssistedAcquisition::disconnect(gr::top_block_sptr top_block) void GpsL1CaPcpsAssistedAcquisition::disconnect(gr::top_block_sptr top_block)
{ {
//nothing to disconnect, now the tracking uses gr_sync_decimator if(top_block) { /* top_block is not null */};
//nothing to disconnect, now the tracking uses gr_sync_decimator
} }

View File

@ -276,6 +276,14 @@ void GpsL1CaPcpsQuickSyncAcquisition::reset()
} }
} }
void GpsL1CaPcpsQuickSyncAcquisition::set_state(int state)
{
if (item_type_.compare("gr_complex") == 0)
{
acquisition_cc_->set_state(state);
}
}
float GpsL1CaPcpsQuickSyncAcquisition::calculate_threshold(float pfa) float GpsL1CaPcpsQuickSyncAcquisition::calculate_threshold(float pfa)
{ {

View File

@ -132,7 +132,10 @@ public:
*/ */
void reset(); void reset();
/*!
* \brief If state = 1, it forces the block to start acquiring from the first sample
*/
void set_state(int state);
private: private:
ConfigurationInterface* configuration_; ConfigurationInterface* configuration_;
pcps_quicksync_acquisition_cc_sptr acquisition_cc_; pcps_quicksync_acquisition_cc_sptr acquisition_cc_;

View File

@ -229,6 +229,14 @@ void GpsL1CaPcpsTongAcquisition::reset()
} }
} }
void GpsL1CaPcpsTongAcquisition::set_state(int state)
{
if (item_type_.compare("gr_complex") == 0)
{
acquisition_cc_->set_state(state);
}
}
float GpsL1CaPcpsTongAcquisition::calculate_threshold(float pfa) float GpsL1CaPcpsTongAcquisition::calculate_threshold(float pfa)
{ {
//Calculate the threshold //Calculate the threshold

View File

@ -127,10 +127,14 @@ public:
/*! /*!
* \brief Restart acquisition algorithm * \brief Restart acquisition algorithm
*/// std::cout << "role " << role_ << std::endl; */
void reset(); void reset();
/*!
* \brief If state = 1, it forces the block to start acquiring from the first sample
*/
void set_state(int state);
private: private:
ConfigurationInterface* configuration_; ConfigurationInterface* configuration_;
pcps_tong_acquisition_cc_sptr acquisition_cc_; pcps_tong_acquisition_cc_sptr acquisition_cc_;

View File

@ -16,31 +16,21 @@
# along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>. # along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
# #
set(ACQ_GR_BLOCKS_SOURCES
pcps_acquisition_cc.cc
pcps_multithread_acquisition_cc.cc
pcps_assisted_acquisition_cc.cc
pcps_acquisition_fine_doppler_cc.cc
pcps_tong_acquisition_cc.cc
pcps_cccwsr_acquisition_cc.cc
pcps_quicksync_acquisition_cc.cc
galileo_pcps_8ms_acquisition_cc.cc
galileo_e5a_noncoherent_iq_acquisition_caf_cc.cc
)
if(OPENCL_FOUND) if(OPENCL_FOUND)
set(ACQ_GR_BLOCKS_SOURCES set(ACQ_GR_BLOCKS_SOURCES ${ACQ_GR_BLOCKS_SOURCES} pcps_opencl_acquisition_cc.cc)
pcps_acquisition_cc.cc
pcps_multithread_acquisition_cc.cc
pcps_assisted_acquisition_cc.cc
pcps_acquisition_fine_doppler_cc.cc
pcps_tong_acquisition_cc.cc
pcps_cccwsr_acquisition_cc.cc
pcps_quicksync_acquisition_cc.cc
galileo_pcps_8ms_acquisition_cc.cc
galileo_e5a_noncoherent_iq_acquisition_caf_cc.cc
pcps_opencl_acquisition_cc.cc # Needs OpenCL
)
else(OPENCL_FOUND)
set(ACQ_GR_BLOCKS_SOURCES
pcps_acquisition_cc.cc
pcps_multithread_acquisition_cc.cc
pcps_assisted_acquisition_cc.cc
pcps_acquisition_fine_doppler_cc.cc
pcps_tong_acquisition_cc.cc
pcps_cccwsr_acquisition_cc.cc
pcps_quicksync_acquisition_cc.cc
galileo_pcps_8ms_acquisition_cc.cc
galileo_e5a_noncoherent_iq_acquisition_caf_cc.cc
)
endif(OPENCL_FOUND) endif(OPENCL_FOUND)
include_directories( include_directories(

View File

@ -281,6 +281,31 @@ void galileo_e5a_noncoherentIQ_acquisition_caf_cc::init()
} }
void galileo_e5a_noncoherentIQ_acquisition_caf_cc::set_state(int state)
{
d_state = state;
if (d_state == 1)
{
d_gnss_synchro->Acq_delay_samples = 0.0;
d_gnss_synchro->Acq_doppler_hz = 0.0;
d_gnss_synchro->Acq_samplestamp_samples = 0;
d_well_count = 0;
d_mag = 0.0;
d_input_power = 0.0;
d_test_statistics = 0.0;
}
else if (d_state == 0)
{}
else
{
LOG(ERROR) << "State can only be set to 0 or 1";
}
}
int galileo_e5a_noncoherentIQ_acquisition_caf_cc::general_work(int noutput_items, int galileo_e5a_noncoherentIQ_acquisition_caf_cc::general_work(int noutput_items,
gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items) gr_vector_void_star &output_items)

View File

@ -203,6 +203,13 @@ public:
d_active = active; d_active = active;
} }
/*!
* \brief If set to 1, ensures that acquisition starts at the
* first available sample.
* \param state - int=1 forces start of acquisition
*/
void set_state(int state);
/*! /*!
* \brief Set acquisition channel unique ID * \brief Set acquisition channel unique ID
* \param channel - receiver channel. * \param channel - receiver channel.

View File

@ -166,6 +166,30 @@ void galileo_pcps_8ms_acquisition_cc::init()
} }
} }
void galileo_pcps_8ms_acquisition_cc::set_state(int state)
{
d_state = state;
if (d_state == 1)
{
d_gnss_synchro->Acq_delay_samples = 0.0;
d_gnss_synchro->Acq_doppler_hz = 0.0;
d_gnss_synchro->Acq_samplestamp_samples = 0;
d_well_count = 0;
d_mag = 0.0;
d_input_power = 0.0;
d_test_statistics = 0.0;
}
else if (d_state == 0)
{}
else
{
LOG(ERROR) << "State can only be set to 0 or 1";
}
}
int galileo_pcps_8ms_acquisition_cc::general_work(int noutput_items, int galileo_pcps_8ms_acquisition_cc::general_work(int noutput_items,
gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items) gr_vector_void_star &output_items)

View File

@ -161,6 +161,13 @@ public:
d_active = active; d_active = active;
} }
/*!
* \brief If set to 1, ensures that acquisition starts at the
* first available sample.
* \param state - int=1 forces start of acquisition
*/
void set_state(int state);
/*! /*!
* \brief Set acquisition channel unique ID * \brief Set acquisition channel unique ID
* \param channel - receiver channel. * \param channel - receiver channel.

View File

@ -158,6 +158,29 @@ void pcps_acquisition_cc::init()
} }
} }
void pcps_acquisition_cc::set_state(int state)
{
d_state = state;
if (d_state == 1)
{
d_gnss_synchro->Acq_delay_samples = 0.0;
d_gnss_synchro->Acq_doppler_hz = 0.0;
d_gnss_synchro->Acq_samplestamp_samples = 0;
d_well_count = 0;
d_mag = 0.0;
d_input_power = 0.0;
d_test_statistics = 0.0;
}
else if (d_state == 0)
{}
else
{
LOG(ERROR) << "State can only be set to 0 or 1";
}
}
int pcps_acquisition_cc::general_work(int noutput_items, int pcps_acquisition_cc::general_work(int noutput_items,
gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items) gr_vector_void_star &output_items)

View File

@ -182,6 +182,13 @@ public:
d_active = active; d_active = active;
} }
/*!
* \brief If set to 1, ensures that acquisition starts at the
* first available sample.
* \param state - int=1 forces start of acquisition
*/
void set_state(int state);
/*! /*!
* \brief Set acquisition channel unique ID * \brief Set acquisition channel unique ID
* \param channel - receiver channel. * \param channel - receiver channel.

View File

@ -45,8 +45,8 @@
* ------------------------------------------------------------------------- * -------------------------------------------------------------------------
*/ */
#ifndef GNSS_SDR_PCPS_acquisition_fine_doppler_cc_H_ #ifndef GNSS_SDR_PCPS_ACQUISITION_FINE_DOPPLER_CC_H_
#define GNSS_SDR_PCPS_acquisition_fine_doppler_cc_H_ #define GNSS_SDR_PCPS_ACQUISITION_FINE_DOPPLER_CC_H_
#include <fstream> #include <fstream>
#include <queue> #include <queue>
@ -61,8 +61,10 @@
#include "gnss_synchro.h" #include "gnss_synchro.h"
class pcps_acquisition_fine_doppler_cc; class pcps_acquisition_fine_doppler_cc;
typedef boost::shared_ptr<pcps_acquisition_fine_doppler_cc> typedef boost::shared_ptr<pcps_acquisition_fine_doppler_cc>
pcps_acquisition_fine_doppler_cc_sptr; pcps_acquisition_fine_doppler_cc_sptr;
pcps_acquisition_fine_doppler_cc_sptr pcps_acquisition_fine_doppler_cc_sptr
pcps_make_acquisition_fine_doppler_cc(int max_dwells, unsigned int sampled_ms, pcps_make_acquisition_fine_doppler_cc(int max_dwells, unsigned int sampled_ms,
int doppler_max, int doppler_min, long freq, long fs_in, int samples_per_ms, int doppler_max, int doppler_min, long freq, long fs_in, int samples_per_ms,
@ -78,166 +80,166 @@ pcps_make_acquisition_fine_doppler_cc(int max_dwells, unsigned int sampled_ms,
class pcps_acquisition_fine_doppler_cc: public gr::block class pcps_acquisition_fine_doppler_cc: public gr::block
{ {
private: private:
friend pcps_acquisition_fine_doppler_cc_sptr friend pcps_acquisition_fine_doppler_cc_sptr
pcps_make_acquisition_fine_doppler_cc(int max_dwells, unsigned int sampled_ms, pcps_make_acquisition_fine_doppler_cc(int max_dwells, unsigned int sampled_ms,
int doppler_max, int doppler_min, long freq, long fs_in, int doppler_max, int doppler_min, long freq, long fs_in,
int samples_per_ms, boost::shared_ptr<gr::msg_queue> queue, bool dump, int samples_per_ms, boost::shared_ptr<gr::msg_queue> queue, bool dump,
std::string dump_filename); std::string dump_filename);
pcps_acquisition_fine_doppler_cc(int max_dwells, unsigned int sampled_ms, pcps_acquisition_fine_doppler_cc(int max_dwells, unsigned int sampled_ms,
int doppler_max, int doppler_min, long freq, long fs_in, int doppler_max, int doppler_min, long freq, long fs_in,
int samples_per_ms, boost::shared_ptr<gr::msg_queue> queue, bool dump, int samples_per_ms, boost::shared_ptr<gr::msg_queue> queue, bool dump,
std::string dump_filename); std::string dump_filename);
void calculate_magnitudes(gr_complex* fft_begin, int doppler_shift, void calculate_magnitudes(gr_complex* fft_begin, int doppler_shift,
int doppler_offset); int doppler_offset);
int compute_and_accumulate_grid(gr_vector_const_void_star &input_items); int compute_and_accumulate_grid(gr_vector_const_void_star &input_items);
int estimate_Doppler(gr_vector_const_void_star &input_items, int available_samples); int estimate_Doppler(gr_vector_const_void_star &input_items, int available_samples);
float estimate_input_power(gr_vector_const_void_star &input_items); float estimate_input_power(gr_vector_const_void_star &input_items);
double search_maximum(); double search_maximum();
void reset_grid(); void reset_grid();
void update_carrier_wipeoff(); void update_carrier_wipeoff();
void free_grid_memory(); void free_grid_memory();
long d_fs_in; long d_fs_in;
long d_freq; long d_freq;
int d_samples_per_ms; int d_samples_per_ms;
int d_max_dwells; int d_max_dwells;
unsigned int d_doppler_resolution; unsigned int d_doppler_resolution;
int d_gnuradio_forecast_samples; int d_gnuradio_forecast_samples;
float d_threshold; float d_threshold;
std::string d_satellite_str; std::string d_satellite_str;
int d_config_doppler_max; int d_config_doppler_max;
int d_config_doppler_min; int d_config_doppler_min;
int d_num_doppler_points; int d_num_doppler_points;
int d_doppler_step; int d_doppler_step;
unsigned int d_sampled_ms; unsigned int d_sampled_ms;
unsigned int d_fft_size; unsigned int d_fft_size;
unsigned long int d_sample_counter; unsigned long int d_sample_counter;
gr_complex* d_carrier; gr_complex* d_carrier;
gr_complex* d_fft_codes; gr_complex* d_fft_codes;
float* d_magnitude; float* d_magnitude;
float** d_grid_data; float** d_grid_data;
gr_complex** d_grid_doppler_wipeoffs; gr_complex** d_grid_doppler_wipeoffs;
gr::fft::fft_complex* d_fft_if; gr::fft::fft_complex* d_fft_if;
gr::fft::fft_complex* d_ifft; gr::fft::fft_complex* d_ifft;
Gnss_Synchro *d_gnss_synchro; Gnss_Synchro *d_gnss_synchro;
unsigned int d_code_phase; unsigned int d_code_phase;
float d_doppler_freq; float d_doppler_freq;
float d_input_power; float d_input_power;
float d_test_statistics; float d_test_statistics;
boost::shared_ptr<gr::msg_queue> d_queue; boost::shared_ptr<gr::msg_queue> d_queue;
concurrent_queue<int> *d_channel_internal_queue; concurrent_queue<int> *d_channel_internal_queue;
std::ofstream d_dump_file; std::ofstream d_dump_file;
int d_state; int d_state;
bool d_active; bool d_active;
int d_well_count; int d_well_count;
bool d_dump; bool d_dump;
unsigned int d_channel; unsigned int d_channel;
std::string d_dump_filename; std::string d_dump_filename;
public: public:
/*! /*!
* \brief Default destructor. * \brief Default destructor.
*/ */
~pcps_acquisition_fine_doppler_cc(); ~pcps_acquisition_fine_doppler_cc();
/*! /*!
* \brief Set acquisition/tracking common Gnss_Synchro object pointer * \brief Set acquisition/tracking common Gnss_Synchro object pointer
* to exchange synchronization data between acquisition and tracking blocks. * to exchange synchronization data between acquisition and tracking blocks.
* \param p_gnss_synchro Satellite information shared by the processing blocks. * \param p_gnss_synchro Satellite information shared by the processing blocks.
*/ */
void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro)
{ {
d_gnss_synchro = p_gnss_synchro; d_gnss_synchro = p_gnss_synchro;
} }
/*! /*!
* \brief Returns the maximum peak of grid search. * \brief Returns the maximum peak of grid search.
*/ */
unsigned int mag() unsigned int mag()
{ {
return d_test_statistics; return d_test_statistics;
} }
/*! /*!
* \brief Initializes acquisition algorithm. * \brief Initializes acquisition algorithm.
*/ */
void init(); void init();
/*! /*!
* \brief Sets local code for PCPS acquisition algorithm. * \brief Sets local code for PCPS acquisition algorithm.
* \param code - Pointer to the PRN code. * \param code - Pointer to the PRN code.
*/ */
void set_local_code(std::complex<float> * code); void set_local_code(std::complex<float> * code);
/*! /*!
* \brief Starts acquisition algorithm, turning from standby mode to * \brief Starts acquisition algorithm, turning from standby mode to
* active mode * active mode
* \param active - bool that activates/deactivates the block. * \param active - bool that activates/deactivates the block.
*/ */
void set_active(bool active) void set_active(bool active)
{ {
d_active = active; d_active = active;
} }
/*! /*!
* \brief Set acquisition channel unique ID * \brief Set acquisition channel unique ID
* \param channel - receiver channel. * \param channel - receiver channel.
*/ */
void set_channel(unsigned int channel) void set_channel(unsigned int channel)
{ {
d_channel = channel; d_channel = channel;
} }
/*! /*!
* \brief Set statistics threshold of PCPS algorithm. * \brief Set statistics threshold of PCPS algorithm.
* \param threshold - Threshold for signal detection (check \ref Navitec2012, * \param threshold - Threshold for signal detection (check \ref Navitec2012,
* Algorithm 1, for a definition of this threshold). * Algorithm 1, for a definition of this threshold).
*/ */
void set_threshold(float threshold) void set_threshold(float threshold)
{ {
d_threshold = threshold; d_threshold = threshold;
} }
/*! /*!
* \brief Set maximum Doppler grid search * \brief Set maximum Doppler grid search
* \param doppler_max - Maximum Doppler shift considered in the grid search [Hz]. * \param doppler_max - Maximum Doppler shift considered in the grid search [Hz].
*/ */
void set_doppler_max(unsigned int doppler_max) void set_doppler_max(unsigned int doppler_max)
{ {
d_config_doppler_max = doppler_max; d_config_doppler_max = doppler_max;
} }
/*! /*!
* \brief Set Doppler steps for the grid search * \brief Set Doppler steps for the grid search
* \param doppler_step - Frequency bin of the search grid [Hz]. * \param doppler_step - Frequency bin of the search grid [Hz].
*/ */
void set_doppler_step(unsigned int doppler_step); void set_doppler_step(unsigned int doppler_step);
/*! /*!
* \brief Set tracking channel internal queue. * \brief Set tracking channel internal queue.
* \param channel_internal_queue - Channel's internal blocks information queue. * \param channel_internal_queue - Channel's internal blocks information queue.
*/ */
void set_channel_queue(concurrent_queue<int> *channel_internal_queue) void set_channel_queue(concurrent_queue<int> *channel_internal_queue)
{ {
d_channel_internal_queue = channel_internal_queue; d_channel_internal_queue = channel_internal_queue;
} }
/*! /*!
* \brief Parallel Code Phase Search Acquisition signal processing. * \brief Parallel Code Phase Search Acquisition signal processing.
*/ */
int general_work(int noutput_items, gr_vector_int &ninput_items, int general_work(int noutput_items, gr_vector_int &ninput_items,
gr_vector_const_void_star &input_items, gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items); gr_vector_void_star &output_items);
void forecast (int noutput_items, gr_vector_int &ninput_items_required); void forecast (int noutput_items, gr_vector_int &ninput_items_required);
}; };

View File

@ -182,6 +182,29 @@ void pcps_cccwsr_acquisition_cc::init()
} }
} }
void pcps_cccwsr_acquisition_cc::set_state(int state)
{
d_state = state;
if (d_state == 1)
{
d_gnss_synchro->Acq_delay_samples = 0.0;
d_gnss_synchro->Acq_doppler_hz = 0.0;
d_gnss_synchro->Acq_samplestamp_samples = 0;
d_well_count = 0;
d_mag = 0.0;
d_input_power = 0.0;
d_test_statistics = 0.0;
}
else if (d_state == 0)
{}
else
{
LOG(ERROR) << "State can only be set to 0 or 1";
}
}
int pcps_cccwsr_acquisition_cc::general_work(int noutput_items, int pcps_cccwsr_acquisition_cc::general_work(int noutput_items,
gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items) gr_vector_void_star &output_items)

View File

@ -172,6 +172,13 @@ public:
d_active = active; d_active = active;
} }
/*!
* \brief If set to 1, ensures that acquisition starts at the
* first available sample.
* \param state - int=1 forces start of acquisition
*/
void set_state(int state);
/*! /*!
* \brief Set acquisition channel unique ID * \brief Set acquisition channel unique ID
* \param channel - receiver channel. * \param channel - receiver channel.

View File

@ -299,6 +299,33 @@ void pcps_multithread_acquisition_cc::acquisition_core()
d_core_working = false; d_core_working = false;
} }
void pcps_multithread_acquisition_cc::set_state(int state)
{
d_state = state;
if (d_state == 1)
{
d_gnss_synchro->Acq_delay_samples = 0.0;
d_gnss_synchro->Acq_doppler_hz = 0.0;
d_gnss_synchro->Acq_samplestamp_samples = 0;
d_well_count = 0;
d_mag = 0.0;
d_input_power = 0.0;
d_test_statistics = 0.0;
d_in_dwell_count = 0;
d_sample_counter_buffer.clear();
}
else if (d_state == 0)
{}
else
{
LOG(ERROR) << "State can only be set to 0 or 1";
}
}
int pcps_multithread_acquisition_cc::general_work(int noutput_items, int pcps_multithread_acquisition_cc::general_work(int noutput_items,
gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items) gr_vector_void_star &output_items)

View File

@ -190,6 +190,13 @@ public:
d_active = active; d_active = active;
} }
/*!
* \brief If set to 1, ensures that acquisition starts at the
* first available sample.
* \param state - int=1 forces start of acquisition
*/
void set_state(int state);
/*! /*!
* \brief Set acquisition channel unique ID * \brief Set acquisition channel unique ID
* \param channel - receiver channel. * \param channel - receiver channel.

View File

@ -664,6 +664,28 @@ void pcps_opencl_acquisition_cc::acquisition_core_opencl()
} }
void pcps_multithread_acquisition_cc::set_state(int state)
{
d_state = state;
if (d_state == 1)
{
d_gnss_synchro->Acq_delay_samples = 0.0;
d_gnss_synchro->Acq_doppler_hz = 0.0;
d_gnss_synchro->Acq_samplestamp_samples = 0;
d_well_count = 0;
d_mag = 0.0;
d_input_power = 0.0;
d_test_statistics = 0.0;
d_in_dwell_count = 0;
d_sample_counter_buffer.clear();
}
else if (d_state == 0)
{}
else
{
LOG(ERROR) << "State can only be set to 0 or 1";
}
}
int pcps_opencl_acquisition_cc::general_work(int noutput_items, int pcps_opencl_acquisition_cc::general_work(int noutput_items,
gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items,

View File

@ -216,6 +216,13 @@ public:
d_active = active; d_active = active;
} }
/*!
* \brief If set to 1, ensures that acquisition starts at the
* first available sample.
* \param state - int=1 forces start of acquisition
*/
void set_state(int state);
/*! /*!
* \brief Set acquisition channel unique ID * \brief Set acquisition channel unique ID
* \param channel - receiver channel. * \param channel - receiver channel.

View File

@ -208,6 +208,28 @@ void pcps_quicksync_acquisition_cc::init()
} }
void pcps_quicksync_acquisition_cc::set_state(int state)
{
d_state = state;
if (d_state == 1)
{
d_gnss_synchro->Acq_delay_samples = 0.0;
d_gnss_synchro->Acq_doppler_hz = 0.0;
d_gnss_synchro->Acq_samplestamp_samples = 0;
d_well_count = 0;
d_mag = 0.0;
d_input_power = 0.0;
d_test_statistics = 0.0;
d_active = 1;
}
else if (d_state == 0)
{}
else
{
LOG(ERROR) << "State can only be set to 0 or 1";
}
}
int pcps_quicksync_acquisition_cc::general_work(int noutput_items, int pcps_quicksync_acquisition_cc::general_work(int noutput_items,
gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items) gr_vector_void_star &output_items)

View File

@ -202,6 +202,13 @@ public:
d_active = active; d_active = active;
} }
/*!
* \brief If set to 1, ensures that acquisition starts at the
* first available sample.
* \param state - int=1 forces start of acquisition
*/
void set_state(int state);
/*! /*!
* \brief Set acquisition channel unique ID * \brief Set acquisition channel unique ID
* \param channel - receiver channel. * \param channel - receiver channel.

View File

@ -186,6 +186,37 @@ void pcps_tong_acquisition_cc::init()
} }
} }
void pcps_tong_acquisition_cc::set_state(int state)
{
d_state = state;
if (d_state == 1)
{
d_gnss_synchro->Acq_delay_samples = 0.0;
d_gnss_synchro->Acq_doppler_hz = 0.0;
d_gnss_synchro->Acq_samplestamp_samples = 0;
d_well_count = 0;
d_well_count = 0;
d_tong_count = d_tong_init_val;
d_mag = 0.0;
d_input_power = 0.0;
d_test_statistics = 0.0;
for (unsigned int doppler_index = 0; doppler_index < d_num_doppler_bins; doppler_index++)
{
for (unsigned int i = 0; i < d_fft_size; i++)
{
d_grid_data[doppler_index][i] = 0;
}
}
}
else if (d_state == 0)
{}
else
{
LOG(ERROR) << "State can only be set to 0 or 1";
}
}
int pcps_tong_acquisition_cc::general_work(int noutput_items, int pcps_tong_acquisition_cc::general_work(int noutput_items,
gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items) gr_vector_void_star &output_items)

View File

@ -180,6 +180,13 @@ public:
d_active = active; d_active = active;
} }
/*!
* \brief If set to 1, ensures that acquisition starts at the
* first available sample.
* \param state - int=1 forces start of acquisition
*/
void set_state(int state);
/*! /*!
* \brief Set acquisition channel unique ID * \brief Set acquisition channel unique ID
* \param channel - receiver channel. * \param channel - receiver channel.

View File

@ -58,10 +58,10 @@ public:
{ {
return role_; return role_;
} }
//! Returns "ByteToShort" //! Returns "Byte_To_Short"
std::string implementation() std::string implementation()
{ {
return "ByteToShort"; return "Byte_To_Short";
} }
size_t item_size() size_t item_size()
{ {

View File

@ -59,10 +59,10 @@ public:
{ {
return role_; return role_;
} }
//! Returns "IbyteToCbyte" //! Returns "Ibyte_To_Cbyte"
std::string implementation() std::string implementation()
{ {
return "IbyteToCbyte"; return "Ibyte_To_Cbyte";
} }
size_t item_size() size_t item_size()
{ {

View File

@ -59,10 +59,10 @@ public:
{ {
return role_; return role_;
} }
//! Returns "IbyteToComplex" //! Returns "Ibyte_To_Complex"
std::string implementation() std::string implementation()
{ {
return "IbyteToComplex"; return "Ibyte_To_Complex";
} }
size_t item_size() size_t item_size()
{ {

View File

@ -58,10 +58,10 @@ public:
{ {
return role_; return role_;
} }
//! Returns "IshortToComplex" //! Returns "Ishort_To_Complex"
std::string implementation() std::string implementation()
{ {
return "IshortToComplex"; return "Ishort_To_Complex";
} }
size_t item_size() size_t item_size()
{ {

View File

@ -59,10 +59,10 @@ public:
{ {
return role_; return role_;
} }
//! Returns "IshortToCshort" //! Returns "Ishort_To_Cshort"
std::string implementation() std::string implementation()
{ {
return "IshortToCshort"; return "Ishort_To_Cshort";
} }
size_t item_size() size_t item_size()
{ {

View File

@ -27,6 +27,7 @@ include_directories(
${CMAKE_SOURCE_DIR}/src/core/system_parameters ${CMAKE_SOURCE_DIR}/src/core/system_parameters
${CMAKE_SOURCE_DIR}/src/core/interfaces ${CMAKE_SOURCE_DIR}/src/core/interfaces
${CMAKE_SOURCE_DIR}/src/algorithms/input_filter/gnuradio_blocks ${CMAKE_SOURCE_DIR}/src/algorithms/input_filter/gnuradio_blocks
${CMAKE_SOURCE_DIR}/src/algorithms/libs
${GLOG_INCLUDE_DIRS} ${GLOG_INCLUDE_DIRS}
${GFlags_INCLUDE_DIRS} ${GFlags_INCLUDE_DIRS}
${GNURADIO_RUNTIME_INCLUDE_DIRS} ${GNURADIO_RUNTIME_INCLUDE_DIRS}
@ -36,5 +37,5 @@ include_directories(
file(GLOB INPUT_FILTER_ADAPTER_HEADERS "*.h") file(GLOB INPUT_FILTER_ADAPTER_HEADERS "*.h")
add_library(input_filter_adapters ${INPUT_FILTER_ADAPTER_SOURCES} ${INPUT_FILTER_ADAPTER_HEADERS}) add_library(input_filter_adapters ${INPUT_FILTER_ADAPTER_SOURCES} ${INPUT_FILTER_ADAPTER_HEADERS})
source_group(Headers FILES ${INPUT_FILTER_ADAPTER_HEADERS}) source_group(Headers FILES ${INPUT_FILTER_ADAPTER_HEADERS})
add_dependencies(input_filter_adapters glog-${glog_RELEASE}) add_dependencies(input_filter_adapters glog-${glog_RELEASE} gnss_sp_libs)
target_link_libraries(input_filter_adapters input_filter_gr_blocks ${GNURADIO_RUNTIME_LIBRARIES} ${GNURADIO_BLOCKS_LIBRARIES} ${GNURADIO_FILTER_LIBRARIES}) target_link_libraries(input_filter_adapters input_filter_gr_blocks ${GNURADIO_RUNTIME_LIBRARIES} ${GNURADIO_BLOCKS_LIBRARIES} ${GNURADIO_FILTER_LIBRARIES} gnss_sp_libs)

View File

@ -76,6 +76,23 @@ FirFilter::FirFilter(ConfigurationInterface* configuration, std::string role,
file_sink_ = gr::blocks::file_sink::make(item_size, dump_filename_.c_str()); file_sink_ = gr::blocks::file_sink::make(item_size, dump_filename_.c_str());
} }
} }
else if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("cshort") == 0)
&& (output_item_type_.compare("gr_complex") == 0))
{
item_size = sizeof(gr_complex);
cshort_to_float_x2_ = make_cshort_to_float_x2();
fir_filter_fff_1_ = gr::filter::fir_filter_fff::make(1, taps_);
fir_filter_fff_2_ = gr::filter::fir_filter_fff::make(1, taps_);
DLOG(INFO) << "I input_filter(" << fir_filter_fff_1_->unique_id() << ")";
DLOG(INFO) << "Q input_filter(" << fir_filter_fff_2_->unique_id() << ")";
float_to_complex_ = gr::blocks::float_to_complex::make();
if (dump_)
{
DLOG(INFO) << "Dumping output into file " << dump_filename_;
file_sink_ = gr::blocks::file_sink::make(item_size, dump_filename_.c_str());
}
}
else if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("cbyte") == 0) else if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("cbyte") == 0)
&& (output_item_type_.compare("gr_complex") == 0)) && (output_item_type_.compare("gr_complex") == 0))
{ {
@ -169,7 +186,6 @@ void FirFilter::connect(gr::top_block_sptr top_block)
{ {
top_block->connect(float_to_complex_, 0, file_sink_, 0); top_block->connect(float_to_complex_, 0, file_sink_, 0);
} }
} }
else if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("cbyte") == 0) else if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("cbyte") == 0)
&& (output_item_type_.compare("cbyte") == 0)) && (output_item_type_.compare("cbyte") == 0))
@ -185,6 +201,18 @@ void FirFilter::connect(gr::top_block_sptr top_block)
top_block->connect(char_x2_cbyte_, 0, file_sink_, 0); top_block->connect(char_x2_cbyte_, 0, file_sink_, 0);
} }
} }
else if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("cshort") == 0)
&& (output_item_type_.compare("gr_complex") == 0))
{
top_block->connect(cshort_to_float_x2_, 0, fir_filter_fff_1_, 0);
top_block->connect(cshort_to_float_x2_, 1, fir_filter_fff_2_, 0);
top_block->connect(fir_filter_fff_1_, 0, float_to_complex_, 0);
top_block->connect(fir_filter_fff_2_, 0, float_to_complex_, 1);
if (dump_)
{
top_block->connect(float_to_complex_, 0, file_sink_, 0);
}
}
else else
{ {
LOG(ERROR) << " Unknown item type conversion"; LOG(ERROR) << " Unknown item type conversion";
@ -228,7 +256,6 @@ void FirFilter::disconnect(gr::top_block_sptr top_block)
{ {
top_block->disconnect(short_x2_to_cshort_, 0, file_sink_, 0); top_block->disconnect(short_x2_to_cshort_, 0, file_sink_, 0);
} }
} }
else if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("cbyte") == 0) else if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("cbyte") == 0)
&& (output_item_type_.compare("cbyte") == 0)) && (output_item_type_.compare("cbyte") == 0))
@ -244,6 +271,18 @@ void FirFilter::disconnect(gr::top_block_sptr top_block)
top_block->disconnect(char_x2_cbyte_, 0, file_sink_, 0); top_block->disconnect(char_x2_cbyte_, 0, file_sink_, 0);
} }
} }
else if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("cshort") == 0)
&& (output_item_type_.compare("gr_complex") == 0))
{
top_block->disconnect(cshort_to_float_x2_, 0, fir_filter_fff_1_, 0);
top_block->disconnect(cshort_to_float_x2_, 1, fir_filter_fff_2_, 0);
top_block->disconnect(fir_filter_fff_1_, 0, float_to_complex_, 0);
top_block->disconnect(fir_filter_fff_2_, 0, float_to_complex_, 1);
if (dump_)
{
top_block->disconnect(float_to_complex_, 0, file_sink_, 0);
}
}
else else
{ {
LOG(ERROR) << " Unknown item type conversion"; LOG(ERROR) << " Unknown item type conversion";
@ -274,6 +313,11 @@ gr::basic_block_sptr FirFilter::get_left_block()
{ {
return cbyte_to_float_x2_; return cbyte_to_float_x2_;
} }
else if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("cshort") == 0)
&& (output_item_type_.compare("gr_complex") == 0))
{
return cshort_to_float_x2_;
}
else else
{ {
return nullptr; return nullptr;
@ -305,6 +349,11 @@ gr::basic_block_sptr FirFilter::get_right_block()
{ {
return char_x2_cbyte_; return char_x2_cbyte_;
} }
else if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("cshort") == 0)
&& (output_item_type_.compare("gr_complex") == 0))
{
return float_to_complex_;
}
else else
{ {
return nullptr; return nullptr;

View File

@ -19,11 +19,6 @@
set(INPUT_FILTER_GR_BLOCKS_SOURCES set(INPUT_FILTER_GR_BLOCKS_SOURCES
beamformer.cc beamformer.cc
complex_byte_to_float_x2.cc
byte_x2_to_complex_byte.cc
cshort_to_float_x2.cc
short_x2_to_cshort.cc
complex_float_to_complex_byte.cc
) )
include_directories( include_directories(
@ -32,14 +27,9 @@ include_directories(
${GFlags_INCLUDE_DIRS} ${GFlags_INCLUDE_DIRS}
${GNURADIO_RUNTIME_INCLUDE_DIRS} ${GNURADIO_RUNTIME_INCLUDE_DIRS}
${GNURADIO_BLOCKS_INCLUDE_DIRS} ${GNURADIO_BLOCKS_INCLUDE_DIRS}
${VOLK_INCLUDE_DIRS}
${VOLK_GNSSSDR_INCLUDE_DIRS}
) )
file(GLOB INPUT_FILTER_GR_BLOCKS_HEADERS "*.h") file(GLOB INPUT_FILTER_GR_BLOCKS_HEADERS "*.h")
add_library(input_filter_gr_blocks ${INPUT_FILTER_GR_BLOCKS_SOURCES} ${INPUT_FILTER_GR_BLOCKS_HEADERS}) add_library(input_filter_gr_blocks ${INPUT_FILTER_GR_BLOCKS_SOURCES} ${INPUT_FILTER_GR_BLOCKS_HEADERS})
source_group(Headers FILES ${INPUT_FILTER_GR_BLOCKS_HEADERS}) source_group(Headers FILES ${INPUT_FILTER_GR_BLOCKS_HEADERS})
target_link_libraries(input_filter_gr_blocks ${GNURADIO_RUNTIME_LIBRARIES} ${VOLK_LIBRARIES} ${VOLK_GNSSSDR_LIBRARIES} ${GNURADIO_BLOCKS_LIBRARIES}) target_link_libraries(input_filter_gr_blocks ${GNURADIO_RUNTIME_LIBRARIES})
if(NOT VOLK_GNSSSDR_FOUND)
add_dependencies(input_filter_gr_blocks volk_gnsssdr_module)
endif(NOT VOLK_GNSSSDR_FOUND)

View File

@ -16,28 +16,28 @@
# along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>. # along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
# #
set(GNSS_SPLIBS_SOURCES
galileo_e1_signal_processing.cc
gnss_sdr_valve.cc
gnss_signal_processing.cc
gps_sdr_signal_processing.cc
nco_lib.cc
pass_through.cc
galileo_e5_signal_processing.cc
complex_byte_to_float_x2.cc
byte_x2_to_complex_byte.cc
cshort_to_float_x2.cc
short_x2_to_cshort.cc
complex_float_to_complex_byte.cc
)
if(OPENCL_FOUND) if(OPENCL_FOUND)
set(GNSS_SPLIBS_SOURCES set(GNSS_SPLIBS_SOURCES ${GNSS_SPLIBS_SOURCES}
galileo_e1_signal_processing.cc
gnss_sdr_valve.cc
gnss_signal_processing.cc
gps_sdr_signal_processing.cc
nco_lib.cc
pass_through.cc
fft_execute.cc # Needs OpenCL fft_execute.cc # Needs OpenCL
fft_setup.cc # Needs OpenCL fft_setup.cc # Needs OpenCL
fft_kernelstring.cc # Needs OpenCL fft_kernelstring.cc # Needs OpenCL
galileo_e5_signal_processing.cc
)
else(OPENCL_FOUND)
set(GNSS_SPLIBS_SOURCES
galileo_e1_signal_processing.cc
gnss_sdr_valve.cc
gnss_signal_processing.cc
gps_sdr_signal_processing.cc
nco_lib.cc
pass_through.cc
galileo_e5_signal_processing.cc
) )
endif(OPENCL_FOUND) endif(OPENCL_FOUND)
@ -50,7 +50,9 @@ include_directories(
${GLOG_INCLUDE_DIRS} ${GLOG_INCLUDE_DIRS}
${GFlags_INCLUDE_DIRS} ${GFlags_INCLUDE_DIRS}
${GNURADIO_RUNTIME_INCLUDE_DIRS} ${GNURADIO_RUNTIME_INCLUDE_DIRS}
${GNURADIO_BLOCKS_INCLUDE_DIRS}
${VOLK_INCLUDE_DIRS} ${VOLK_INCLUDE_DIRS}
${VOLK_GNSSSDR_INCLUDE_DIRS}
) )
if(OPENCL_FOUND) if(OPENCL_FOUND)
@ -66,10 +68,16 @@ file(GLOB GNSS_SPLIBS_HEADERS "*.h")
add_library(gnss_sp_libs ${GNSS_SPLIBS_SOURCES} ${GNSS_SPLIBS_HEADERS}) add_library(gnss_sp_libs ${GNSS_SPLIBS_SOURCES} ${GNSS_SPLIBS_HEADERS})
source_group(Headers FILES ${GNSS_SPLIBS_HEADERS}) source_group(Headers FILES ${GNSS_SPLIBS_HEADERS})
target_link_libraries(gnss_sp_libs ${GNURADIO_RUNTIME_LIBRARIES} target_link_libraries(gnss_sp_libs ${GNURADIO_RUNTIME_LIBRARIES}
${VOLK_LIBRARIES}
${VOLK_GNSSSDR_LIBRARIES}
${GNURADIO_BLOCKS_LIBRARIES} ${GNURADIO_BLOCKS_LIBRARIES}
${GNURADIO_FFT_LIBRARIES} ${GNURADIO_FFT_LIBRARIES}
${GNURADIO_FILTER_LIBRARIES} ${GNURADIO_FILTER_LIBRARIES}
${OPT_LIBRARIES} ${OPT_LIBRARIES}
gnss_rx gnss_rx
) )
if(NOT VOLK_GNSSSDR_FOUND)
add_dependencies(gnss_sp_libs volk_gnsssdr_module)
endif(NOT VOLK_GNSSSDR_FOUND)

View File

@ -47,8 +47,18 @@ Pass_Through::Pass_Through(ConfigurationInterface* configuration, std::string ro
out_streams_(out_streams) out_streams_(out_streams)
{ {
std::string default_item_type = "gr_complex"; std::string default_item_type = "gr_complex";
item_type_ = configuration->property(role + ".item_type", default_item_type); std::string input_type = configuration->property(role + ".input_item_type", default_item_type);
std::string output_type = configuration->property(role + ".output_item_type", default_item_type);
if(input_type.compare(output_type) != 0)
{
LOG(WARNING) << "input_item_type and output_item_type are different in a Pass_Through implementation! Taking "
<< input_type
<< ", but item_size will supersede it.";
}
item_type_ = configuration->property(role + ".item_type", input_type);
vector_size_ = configuration->property(role + ".vector_size", 1); vector_size_ = configuration->property(role + ".vector_size", 1);
if(item_type_.compare("float") == 0) if(item_type_.compare("float") == 0)
{ {
item_size_ = sizeof(float); item_size_ = sizeof(float);
@ -61,6 +71,10 @@ Pass_Through::Pass_Through(ConfigurationInterface* configuration, std::string ro
{ {
item_size_ = sizeof(int16_t); item_size_ = sizeof(int16_t);
} }
else if(item_type_.compare("ishort") == 0)
{
item_size_ = sizeof(int16_t);
}
else if(item_type_.compare("cshort") == 0) else if(item_type_.compare("cshort") == 0)
{ {
item_size_ = sizeof(lv_16sc_t); item_size_ = sizeof(lv_16sc_t);
@ -69,6 +83,10 @@ Pass_Through::Pass_Through(ConfigurationInterface* configuration, std::string ro
{ {
item_size_ = sizeof(int8_t); item_size_ = sizeof(int8_t);
} }
else if(item_type_.compare("ibyte") == 0)
{
item_size_ = sizeof(int8_t);
}
else if(item_type_.compare("cbyte") == 0) else if(item_type_.compare("cbyte") == 0)
{ {
item_size_ = sizeof(lv_8sc_t); item_size_ = sizeof(lv_8sc_t);
@ -91,14 +109,16 @@ Pass_Through::~Pass_Through()
void Pass_Through::connect(gr::top_block_sptr top_block) void Pass_Through::connect(gr::top_block_sptr top_block)
{ {
DLOG(INFO) << "nothing to connect internally"; if(top_block) { /* top_block is not null */};
DLOG(INFO) << "nothing to connect internally";
} }
void Pass_Through::disconnect(gr::top_block_sptr top_block) void Pass_Through::disconnect(gr::top_block_sptr top_block)
{ {
// Nothing to disconnect if(top_block) { /* top_block is not null */};
// Nothing to disconnect
} }

View File

@ -72,7 +72,8 @@ GalileoE1Observables::~GalileoE1Observables()
void GalileoE1Observables::connect(gr::top_block_sptr top_block) void GalileoE1Observables::connect(gr::top_block_sptr top_block)
{ {
// Nothing to connect internally if(top_block) { /* top_block is not null */};
// Nothing to connect internally
DLOG(INFO) << "nothing to connect internally"; DLOG(INFO) << "nothing to connect internally";
} }
@ -80,7 +81,8 @@ void GalileoE1Observables::connect(gr::top_block_sptr top_block)
void GalileoE1Observables::disconnect(gr::top_block_sptr top_block) void GalileoE1Observables::disconnect(gr::top_block_sptr top_block)
{ {
// Nothing to disconnect if(top_block) { /* top_block is not null */};
// Nothing to disconnect
} }

View File

@ -72,7 +72,8 @@ GpsL1CaObservables::~GpsL1CaObservables()
void GpsL1CaObservables::connect(gr::top_block_sptr top_block) void GpsL1CaObservables::connect(gr::top_block_sptr top_block)
{ {
// Nothing to connect internally if(top_block) { /* top_block is not null */};
// Nothing to connect internally
DLOG(INFO) << "nothing to connect internally"; DLOG(INFO) << "nothing to connect internally";
} }
@ -80,7 +81,8 @@ void GpsL1CaObservables::connect(gr::top_block_sptr top_block)
void GpsL1CaObservables::disconnect(gr::top_block_sptr top_block) void GpsL1CaObservables::disconnect(gr::top_block_sptr top_block)
{ {
// Nothing to disconnect if(top_block) { /* top_block is not null */};
// Nothing to disconnect
} }

View File

@ -72,7 +72,8 @@ HybridObservables::~HybridObservables()
void HybridObservables::connect(gr::top_block_sptr top_block) void HybridObservables::connect(gr::top_block_sptr top_block)
{ {
// Nothing to connect internally if(top_block) { /* top_block is not null */};
// Nothing to connect internally
DLOG(INFO) << "nothing to connect internally"; DLOG(INFO) << "nothing to connect internally";
} }
@ -80,7 +81,8 @@ void HybridObservables::connect(gr::top_block_sptr top_block)
void HybridObservables::disconnect(gr::top_block_sptr top_block) void HybridObservables::disconnect(gr::top_block_sptr top_block)
{ {
// Nothing to disconnect if(top_block) { /* top_block is not null */};
// Nothing to disconnect
} }

View File

@ -78,13 +78,15 @@ FileOutputFilter::~FileOutputFilter()
void FileOutputFilter::connect(gr::top_block_sptr top_block) void FileOutputFilter::connect(gr::top_block_sptr top_block)
{ {
DLOG(INFO) << "nothing to connect internally"; if(top_block) { /* top_block is not null */};
DLOG(INFO) << "nothing to connect internally";
} }
void FileOutputFilter::disconnect(gr::top_block_sptr top_block) void FileOutputFilter::disconnect(gr::top_block_sptr top_block)
{ {
// Nothing to disconnect internally if(top_block) { /* top_block is not null */};
// Nothing to disconnect internally
} }

View File

@ -76,14 +76,16 @@ NullSinkOutputFilter::~NullSinkOutputFilter()
void NullSinkOutputFilter::connect(gr::top_block_sptr top_block) void NullSinkOutputFilter::connect(gr::top_block_sptr top_block)
{ {
DLOG(INFO) << "nothing to connect internally"; if(top_block) { /* top_block is not null */};
DLOG(INFO) << "nothing to connect internally";
} }
void NullSinkOutputFilter::disconnect(gr::top_block_sptr top_block) void NullSinkOutputFilter::disconnect(gr::top_block_sptr top_block)
{ {
// Nothing to connect if(top_block) { /* top_block is not null */};
// Nothing to connect
} }

View File

@ -93,14 +93,16 @@ void GalileoE1BTelemetryDecoder::set_satellite(Gnss_Satellite satellite)
void GalileoE1BTelemetryDecoder::connect(gr::top_block_sptr top_block) void GalileoE1BTelemetryDecoder::connect(gr::top_block_sptr top_block)
{ {
// Nothing to connect internally if(top_block) { /* top_block is not null */};
// Nothing to connect internally
DLOG(INFO) << "nothing to connect internally"; DLOG(INFO) << "nothing to connect internally";
} }
void GalileoE1BTelemetryDecoder::disconnect(gr::top_block_sptr top_block) void GalileoE1BTelemetryDecoder::disconnect(gr::top_block_sptr top_block)
{ {
// Nothing to disconnect if(top_block) { /* top_block is not null */};
// Nothing to disconnect
} }

View File

@ -99,14 +99,16 @@ void GalileoE5aTelemetryDecoder::set_satellite(Gnss_Satellite satellite)
void GalileoE5aTelemetryDecoder::connect(gr::top_block_sptr top_block) void GalileoE5aTelemetryDecoder::connect(gr::top_block_sptr top_block)
{ {
// Nothing to connect internally if(top_block) { /* top_block is not null */};
// Nothing to connect internally
DLOG(INFO) << "nothing to connect internally"; DLOG(INFO) << "nothing to connect internally";
} }
void GalileoE5aTelemetryDecoder::disconnect(gr::top_block_sptr top_block) void GalileoE5aTelemetryDecoder::disconnect(gr::top_block_sptr top_block)
{ {
// Nothing to disconnect if(top_block) { /* top_block is not null */};
// Nothing to disconnect
} }

View File

@ -97,14 +97,16 @@ void GpsL1CaTelemetryDecoder::set_satellite(Gnss_Satellite satellite)
void GpsL1CaTelemetryDecoder::connect(gr::top_block_sptr top_block) void GpsL1CaTelemetryDecoder::connect(gr::top_block_sptr top_block)
{ {
// Nothing to connect internally if(top_block) { /* top_block is not null */};
// Nothing to connect internally
DLOG(INFO) << "nothing to connect internally"; DLOG(INFO) << "nothing to connect internally";
} }
void GpsL1CaTelemetryDecoder::disconnect(gr::top_block_sptr top_block) void GpsL1CaTelemetryDecoder::disconnect(gr::top_block_sptr top_block)
{ {
// Nothing to disconnect if(top_block) { /* top_block is not null */};
// Nothing to disconnect
} }

View File

@ -92,14 +92,16 @@ void SbasL1TelemetryDecoder::set_satellite(Gnss_Satellite satellite)
void SbasL1TelemetryDecoder::connect(gr::top_block_sptr top_block) void SbasL1TelemetryDecoder::connect(gr::top_block_sptr top_block)
{ {
// Nothing to connect internally if(top_block) { /* top_block is not null */};
// Nothing to connect internally
DLOG(INFO) << "nothing to connect internally"; DLOG(INFO) << "nothing to connect internally";
} }
void SbasL1TelemetryDecoder::disconnect(gr::top_block_sptr top_block) void SbasL1TelemetryDecoder::disconnect(gr::top_block_sptr top_block)
{ {
// Nothing to disconnect if(top_block) { /* top_block is not null */};
// Nothing to disconnect
} }

View File

@ -138,12 +138,14 @@ void GalileoE1DllPllVemlTracking::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro)
void GalileoE1DllPllVemlTracking::connect(gr::top_block_sptr top_block) void GalileoE1DllPllVemlTracking::connect(gr::top_block_sptr top_block)
{ {
//nothing to connect, now the tracking uses gr_sync_decimator if(top_block) { /* top_block is not null */};
//nothing to connect, now the tracking uses gr_sync_decimator
} }
void GalileoE1DllPllVemlTracking::disconnect(gr::top_block_sptr top_block) void GalileoE1DllPllVemlTracking::disconnect(gr::top_block_sptr top_block)
{ {
//nothing to disconnect, now the tracking uses gr_sync_decimator if(top_block) { /* top_block is not null */};
//nothing to disconnect, now the tracking uses gr_sync_decimator
} }
gr::basic_block_sptr GalileoE1DllPllVemlTracking::get_left_block() gr::basic_block_sptr GalileoE1DllPllVemlTracking::get_left_block()

View File

@ -141,12 +141,14 @@ void GalileoE1TcpConnectorTracking::set_gnss_synchro(Gnss_Synchro* p_gnss_synchr
void GalileoE1TcpConnectorTracking::connect(gr::top_block_sptr top_block) void GalileoE1TcpConnectorTracking::connect(gr::top_block_sptr top_block)
{ {
//nothing to connect, now the tracking uses gr_sync_decimator if(top_block) { /* top_block is not null */};
//nothing to connect, now the tracking uses gr_sync_decimator
} }
void GalileoE1TcpConnectorTracking::disconnect(gr::top_block_sptr top_block) void GalileoE1TcpConnectorTracking::disconnect(gr::top_block_sptr top_block)
{ {
//nothing to disconnect, now the tracking uses gr_sync_decimator if(top_block) { /* top_block is not null */};
//nothing to disconnect, now the tracking uses gr_sync_decimator
} }
gr::basic_block_sptr GalileoE1TcpConnectorTracking::get_left_block() gr::basic_block_sptr GalileoE1TcpConnectorTracking::get_left_block()

View File

@ -144,12 +144,14 @@ void GalileoE5aDllPllTracking::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro)
void GalileoE5aDllPllTracking::connect(gr::top_block_sptr top_block) void GalileoE5aDllPllTracking::connect(gr::top_block_sptr top_block)
{ {
//nothing to connect, now the tracking uses gr_sync_decimator if(top_block) { /* top_block is not null */};
//nothing to connect, now the tracking uses gr_sync_decimator
} }
void GalileoE5aDllPllTracking::disconnect(gr::top_block_sptr top_block) void GalileoE5aDllPllTracking::disconnect(gr::top_block_sptr top_block)
{ {
//nothing to disconnect, now the tracking uses gr_sync_decimator if(top_block) { /* top_block is not null */};
//nothing to disconnect, now the tracking uses gr_sync_decimator
} }
gr::basic_block_sptr GalileoE5aDllPllTracking::get_left_block() gr::basic_block_sptr GalileoE5aDllPllTracking::get_left_block()

View File

@ -138,12 +138,14 @@ void GalileoVolkE1DllPllVemlTracking::set_gnss_synchro(Gnss_Synchro* p_gnss_sync
void GalileoVolkE1DllPllVemlTracking::connect(gr::top_block_sptr top_block) void GalileoVolkE1DllPllVemlTracking::connect(gr::top_block_sptr top_block)
{ {
//nothing to connect, now the tracking uses gr_sync_decimator if(top_block) { /* top_block is not null */};
//nothing to connect, now the tracking uses gr_sync_decimator
} }
void GalileoVolkE1DllPllVemlTracking::disconnect(gr::top_block_sptr top_block) void GalileoVolkE1DllPllVemlTracking::disconnect(gr::top_block_sptr top_block)
{ {
//nothing to disconnect, now the tracking uses gr_sync_decimator if(top_block) { /* top_block is not null */};
//nothing to disconnect, now the tracking uses gr_sync_decimator
} }
gr::basic_block_sptr GalileoVolkE1DllPllVemlTracking::get_left_block() gr::basic_block_sptr GalileoVolkE1DllPllVemlTracking::get_left_block()

View File

@ -138,12 +138,14 @@ void GpsL1CaDllFllPllTracking::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro)
void GpsL1CaDllFllPllTracking::connect(gr::top_block_sptr top_block) void GpsL1CaDllFllPllTracking::connect(gr::top_block_sptr top_block)
{ {
//nothing to connect, now the tracking uses gr_sync_decimator if(top_block) { /* top_block is not null */};
//nothing to connect, now the tracking uses gr_sync_decimator
} }
void GpsL1CaDllFllPllTracking::disconnect(gr::top_block_sptr top_block) void GpsL1CaDllFllPllTracking::disconnect(gr::top_block_sptr top_block)
{ {
//nothing to disconnect, now the tracking uses gr_sync_decimator if(top_block) { /* top_block is not null */};
//nothing to disconnect, now the tracking uses gr_sync_decimator
} }
gr::basic_block_sptr GpsL1CaDllFllPllTracking::get_left_block() gr::basic_block_sptr GpsL1CaDllFllPllTracking::get_left_block()

View File

@ -134,12 +134,14 @@ void GpsL1CaDllPllOptimTracking::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro)
void GpsL1CaDllPllOptimTracking::connect(gr::top_block_sptr top_block) void GpsL1CaDllPllOptimTracking::connect(gr::top_block_sptr top_block)
{ {
//nothing to connect, now the tracking uses gr_sync_decimator if(top_block) { /* top_block is not null */};
//nothing to connect, now the tracking uses gr_sync_decimator
} }
void GpsL1CaDllPllOptimTracking::disconnect(gr::top_block_sptr top_block) void GpsL1CaDllPllOptimTracking::disconnect(gr::top_block_sptr top_block)
{ {
//nothing to disconnect, now the tracking uses gr_sync_decimator if(top_block) { /* top_block is not null */};
//nothing to disconnect, now the tracking uses gr_sync_decimator
} }
gr::basic_block_sptr GpsL1CaDllPllOptimTracking::get_left_block() gr::basic_block_sptr GpsL1CaDllPllOptimTracking::get_left_block()

View File

@ -134,12 +134,14 @@ void GpsL1CaDllPllTracking::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro)
void GpsL1CaDllPllTracking::connect(gr::top_block_sptr top_block) void GpsL1CaDllPllTracking::connect(gr::top_block_sptr top_block)
{ {
//nothing to connect, now the tracking uses gr_sync_decimator if(top_block) { /* top_block is not null */};
//nothing to connect, now the tracking uses gr_sync_decimator
} }
void GpsL1CaDllPllTracking::disconnect(gr::top_block_sptr top_block) void GpsL1CaDllPllTracking::disconnect(gr::top_block_sptr top_block)
{ {
//nothing to disconnect, now the tracking uses gr_sync_decimator if(top_block) { /* top_block is not null */};
//nothing to disconnect, now the tracking uses gr_sync_decimator
} }
gr::basic_block_sptr GpsL1CaDllPllTracking::get_left_block() gr::basic_block_sptr GpsL1CaDllPllTracking::get_left_block()

View File

@ -135,12 +135,14 @@ void GpsL1CaTcpConnectorTracking::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro)
void GpsL1CaTcpConnectorTracking::connect(gr::top_block_sptr top_block) void GpsL1CaTcpConnectorTracking::connect(gr::top_block_sptr top_block)
{ {
//nothing to connect, now the tracking uses gr_sync_decimator if(top_block) { /* top_block is not null */};
//nothing to connect, now the tracking uses gr_sync_decimator
} }
void GpsL1CaTcpConnectorTracking::disconnect(gr::top_block_sptr top_block) void GpsL1CaTcpConnectorTracking::disconnect(gr::top_block_sptr top_block)
{ {
//nothing to disconnect, now the tracking uses gr_sync_decimator if(top_block) { /* top_block is not null */};
//nothing to disconnect, now the tracking uses gr_sync_decimator
} }
gr::basic_block_sptr GpsL1CaTcpConnectorTracking::get_left_block() gr::basic_block_sptr GpsL1CaTcpConnectorTracking::get_left_block()

View File

@ -37,6 +37,7 @@
#ifndef GNSS_SDR_GNSS_BLOCK_INTERFACE_H_ #ifndef GNSS_SDR_GNSS_BLOCK_INTERFACE_H_
#define GNSS_SDR_GNSS_BLOCK_INTERFACE_H_ #define GNSS_SDR_GNSS_BLOCK_INTERFACE_H_
#include <cassert>
#include <string> #include <string>
#include <gnuradio/top_block.h> #include <gnuradio/top_block.h>
@ -51,35 +52,29 @@
class GNSSBlockInterface class GNSSBlockInterface
{ {
public: public:
virtual ~GNSSBlockInterface() virtual ~GNSSBlockInterface()
{} {}
virtual std::string role() = 0; virtual std::string role() = 0;
virtual std::string implementation() = 0; virtual std::string implementation() = 0;
virtual size_t item_size() = 0; virtual size_t item_size() = 0;
virtual void connect(gr::top_block_sptr top_block) = 0; virtual void connect(gr::top_block_sptr top_block) = 0;
virtual void disconnect(gr::top_block_sptr top_block) = 0; virtual void disconnect(gr::top_block_sptr top_block) = 0;
virtual gr::basic_block_sptr get_left_block() = 0; virtual gr::basic_block_sptr get_left_block() = 0;
virtual gr::basic_block_sptr get_right_block() = 0; virtual gr::basic_block_sptr get_right_block() = 0;
virtual gr::basic_block_sptr get_left_block(int RF_channel) virtual gr::basic_block_sptr get_left_block(int RF_channel)
{ {
if (RF_channel==0) // avoid unused param warning assert(RF_channel >= 0);
{ if (RF_channel == 0){}; // avoid unused param warning
return NULL; // added to support raw array access (non pure virtual to allow left unimplemented)= 0; return NULL; // added to support raw array access (non pure virtual to allow left unimplemented)= 0;
}else{ }
return NULL; // added to support raw array access (non pure virtual to allow left unimplemented)= 0; virtual gr::basic_block_sptr get_right_block(int RF_channel)
} {
} assert(RF_channel >= 0);
virtual gr::basic_block_sptr get_right_block(int RF_channel) if (RF_channel == 0){}; // avoid unused param warning
{ return NULL; // added to support raw array access (non pure virtual to allow left unimplemented)= 0;
if (RF_channel==0) // avoid unused param warning }
{
return NULL; // added to support raw array access (non pure virtual to allow left unimplemented)= 0;
}else{
return NULL; // added to support raw array access (non pure virtual to allow left unimplemented)= 0;
}
}
}; };
#endif /*GNSS_SDR_GNSS_BLOCK_INTERFACE_H_*/ #endif /*GNSS_SDR_GNSS_BLOCK_INTERFACE_H_*/

View File

@ -128,11 +128,11 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetSignalSource(
std::shared_ptr<ConfigurationInterface> configuration, boost::shared_ptr<gr::msg_queue> queue, int ID) std::shared_ptr<ConfigurationInterface> configuration, boost::shared_ptr<gr::msg_queue> queue, int ID)
{ {
std::string default_implementation = "File_Signal_Source"; std::string default_implementation = "File_Signal_Source";
std::string role="SignalSource";//backwards compatibility for old conf files std::string role = "SignalSource"; //backwards compatibility for old conf files
if (ID!=-1) if (ID != -1)
{ {
role="SignalSource"+ boost::lexical_cast<std::string>(ID); role = "SignalSource" + boost::lexical_cast<std::string>(ID);
} }
std::string implementation = configuration->property(role + ".implementation", default_implementation); std::string implementation = configuration->property(role + ".implementation", default_implementation);
LOG(INFO) << "Getting SignalSource with implementation " << implementation; LOG(INFO) << "Getting SignalSource with implementation " << implementation;
return GetBlock(configuration, role, implementation, 0, 1, queue); return GetBlock(configuration, role, implementation, 0, 1, queue);
@ -145,21 +145,21 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetSignalConditioner(
{ {
std::string default_implementation = "Pass_Through"; std::string default_implementation = "Pass_Through";
//backwards compatibility for old conf files //backwards compatibility for old conf files
std::string role_conditioner="SignalConditioner" ; std::string role_conditioner = "SignalConditioner" ;
std::string role_datatypeadapter="DataTypeAdapter"; std::string role_datatypeadapter = "DataTypeAdapter";
std::string role_inputfilter="InputFilter"; std::string role_inputfilter = "InputFilter";
std::string role_resampler="Resampler"; std::string role_resampler = "Resampler";
if (ID!=-1) if (ID != -1)
{ {
role_conditioner="SignalConditioner" + boost::lexical_cast<std::string>(ID); role_conditioner = "SignalConditioner" + boost::lexical_cast<std::string>(ID);
role_datatypeadapter="DataTypeAdapter" + boost::lexical_cast<std::string>(ID); role_datatypeadapter = "DataTypeAdapter" + boost::lexical_cast<std::string>(ID);
role_inputfilter="InputFilter" + boost::lexical_cast<std::string>(ID); role_inputfilter = "InputFilter" + boost::lexical_cast<std::string>(ID);
role_resampler="Resampler" + boost::lexical_cast<std::string>(ID); role_resampler = "Resampler" + boost::lexical_cast<std::string>(ID);
} }
std::string signal_conditioner = configuration->property( std::string signal_conditioner = configuration->property(
role_conditioner+".implementation", default_implementation); role_conditioner + ".implementation", default_implementation);
std::string data_type_adapter; std::string data_type_adapter;
std::string input_filter; std::string input_filter;
@ -173,11 +173,11 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetSignalConditioner(
else else
{ {
data_type_adapter = configuration->property( data_type_adapter = configuration->property(
role_datatypeadapter + ".implementation", default_implementation); role_datatypeadapter + ".implementation", default_implementation);
input_filter = configuration->property( input_filter = configuration->property(
role_inputfilter + ".implementation", default_implementation); role_inputfilter + ".implementation", default_implementation);
resampler = configuration->property( resampler = configuration->property(
role_resampler + ".implementation", default_implementation); role_resampler + ".implementation", default_implementation);
} }
LOG(INFO) << "Getting SignalConditioner with DataTypeAdapter implementation: " LOG(INFO) << "Getting SignalConditioner with DataTypeAdapter implementation: "
@ -189,7 +189,7 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetSignalConditioner(
{ {
//instantiate the array version //instantiate the array version
std::unique_ptr<GNSSBlockInterface> conditioner_(new ArraySignalConditioner(configuration.get(), GetBlock(configuration, std::unique_ptr<GNSSBlockInterface> conditioner_(new ArraySignalConditioner(configuration.get(), GetBlock(configuration,
role_datatypeadapter, data_type_adapter, 1, 1, queue).release(), GetBlock( role_datatypeadapter, data_type_adapter, 1, 1, queue).release(), GetBlock(
configuration,role_inputfilter, input_filter, 1, 1, queue).release(), configuration,role_inputfilter, input_filter, 1, 1, queue).release(),
GetBlock(configuration,role_resampler, resampler, 1, 1, queue).release(), GetBlock(configuration,role_resampler, resampler, 1, 1, queue).release(),
role_conditioner, "Signal_Conditioner", queue)); role_conditioner, "Signal_Conditioner", queue));
@ -199,7 +199,7 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetSignalConditioner(
{ {
//single-antenna version //single-antenna version
std::unique_ptr<GNSSBlockInterface> conditioner_(new SignalConditioner(configuration.get(), GetBlock(configuration, std::unique_ptr<GNSSBlockInterface> conditioner_(new SignalConditioner(configuration.get(), GetBlock(configuration,
role_datatypeadapter, data_type_adapter, 1, 1, queue).release(), GetBlock( role_datatypeadapter, data_type_adapter, 1, 1, queue).release(), GetBlock(
configuration,role_inputfilter, input_filter, 1, 1, queue).release(), configuration,role_inputfilter, input_filter, 1, 1, queue).release(),
GetBlock(configuration,role_resampler, resampler, 1, 1, queue).release(), GetBlock(configuration,role_resampler, resampler, 1, 1, queue).release(),
role_conditioner, "Signal_Conditioner", queue)); role_conditioner, "Signal_Conditioner", queue));

View File

@ -57,10 +57,10 @@ public:
GNSSBlockFactory(); GNSSBlockFactory();
virtual ~GNSSBlockFactory(); virtual ~GNSSBlockFactory();
std::unique_ptr<GNSSBlockInterface> GetSignalSource(std::shared_ptr<ConfigurationInterface> configuration, std::unique_ptr<GNSSBlockInterface> GetSignalSource(std::shared_ptr<ConfigurationInterface> configuration,
boost::shared_ptr<gr::msg_queue> queue, int ID=-1); boost::shared_ptr<gr::msg_queue> queue, int ID = -1);
std::unique_ptr<GNSSBlockInterface> GetSignalConditioner(std::shared_ptr<ConfigurationInterface> configuration, std::unique_ptr<GNSSBlockInterface> GetSignalConditioner(std::shared_ptr<ConfigurationInterface> configuration,
boost::shared_ptr<gr::msg_queue> queue, int ID=-1); boost::shared_ptr<gr::msg_queue> queue, int ID = -1);
std::unique_ptr<GNSSBlockInterface> GetPVT(std::shared_ptr<ConfigurationInterface> configuration, std::unique_ptr<GNSSBlockInterface> GetPVT(std::shared_ptr<ConfigurationInterface> configuration,
boost::shared_ptr<gr::msg_queue> queue); boost::shared_ptr<gr::msg_queue> queue);

View File

@ -124,7 +124,6 @@ private:
std::string config_file_; std::string config_file_;
std::shared_ptr<ConfigurationInterface> configuration_; std::shared_ptr<ConfigurationInterface> configuration_;
std::shared_ptr<GNSSBlockFactory> block_factory_; std::shared_ptr<GNSSBlockFactory> block_factory_;
//std::shared_ptr<std::vector<std::shared_ptr<GNSSBlockInterface>>> blocks_ = std::make_shared<std::vector<std::shared_ptr<GNSSBlockInterface>>>();
std::vector<std::shared_ptr<GNSSBlockInterface>> sig_source_; std::vector<std::shared_ptr<GNSSBlockInterface>> sig_source_;
std::vector<std::shared_ptr<GNSSBlockInterface>> sig_conditioner_; std::vector<std::shared_ptr<GNSSBlockInterface>> sig_conditioner_;

View File

@ -58,21 +58,23 @@ Gps_Ephemeris::Gps_Ephemeris()
b_L2_P_data_flag = false; b_L2_P_data_flag = false;
i_SV_accuracy = 0; i_SV_accuracy = 0;
i_SV_health = 0; i_SV_health = 0;
d_TGD = 0; //!< Estimated Group Delay Differential: L1-L2 correction term only for the benefit of "L1 P(Y)" or "L2 P(Y)" s users [s] d_IODE_SF2 = 0;
d_IODC = 0; //!< Issue of Data, Clock d_IODE_SF3 = 0;
i_AODO = 0; //!< Age of Data Offset (AODO) term for the navigation message correction table (NMCT) contained in subframe 4 (reference paragraph 20.3.3.5.1.9) [s] d_TGD = 0; // Estimated Group Delay Differential: L1-L2 correction term only for the benefit of "L1 P(Y)" or "L2 P(Y)" s users [s]
d_IODC = 0; // Issue of Data, Clock
i_AODO = 0; // Age of Data Offset (AODO) term for the navigation message correction table (NMCT) contained in subframe 4 (reference paragraph 20.3.3.5.1.9) [s]
b_fit_interval_flag = false; //!< indicates the curve-fit interval used by the CS (Block II/IIA/IIR/IIR-M/IIF) and SS (Block IIIA) in determining the ephemeris parameters, as follows: 0 = 4 hours, 1 = greater than 4 hours. b_fit_interval_flag = false; // indicates the curve-fit interval used by the CS (Block II/IIA/IIR/IIR-M/IIF) and SS (Block IIIA) in determining the ephemeris parameters, as follows: 0 = 4 hours, 1 = greater than 4 hours.
d_spare1 = 0; d_spare1 = 0;
d_spare2 = 0; d_spare2 = 0;
d_A_f0 = 0; //!< Coefficient 0 of code phase offset model [s] d_A_f0 = 0; // Coefficient 0 of code phase offset model [s]
d_A_f1 = 0; //!< Coefficient 1 of code phase offset model [s/s] d_A_f1 = 0; // Coefficient 1 of code phase offset model [s/s]
d_A_f2 = 0; //!< Coefficient 2 of code phase offset model [s/s^2] d_A_f2 = 0; // Coefficient 2 of code phase offset model [s/s^2]
b_integrity_status_flag = false; b_integrity_status_flag = false;
b_alert_flag = false; //!< If true, indicates that the SV URA may be worse than indicated in d_SV_accuracy, use that SV at our own risk. b_alert_flag = false; // If true, indicates that the SV URA may be worse than indicated in d_SV_accuracy, use that SV at our own risk.
b_antispoofing_flag = false; //!< If true, the AntiSpoofing mode is ON in that SV b_antispoofing_flag = false; // If true, the AntiSpoofing mode is ON in that SV
//Plane A (info from http://www.navcen.uscg.gov/?Do=constellationStatus) //Plane A (info from http://www.navcen.uscg.gov/?Do=constellationStatus)
satelliteBlock[9] = "IIA"; satelliteBlock[9] = "IIA";

View File

@ -83,6 +83,8 @@ public:
int i_SV_health; int i_SV_health;
double d_TGD; //!< Estimated Group Delay Differential: L1-L2 correction term only for the benefit of "L1 P(Y)" or "L2 P(Y)" s users [s] double d_TGD; //!< Estimated Group Delay Differential: L1-L2 correction term only for the benefit of "L1 P(Y)" or "L2 P(Y)" s users [s]
double d_IODC; //!< Issue of Data, Clock double d_IODC; //!< Issue of Data, Clock
double d_IODE_SF2; //!< Issue of Data, Ephemeris (IODE), subframe 2
double d_IODE_SF3; //!< Issue of Data, Ephemeris(IODE), subframe 3
int i_AODO; //!< Age of Data Offset (AODO) term for the navigation message correction table (NMCT) contained in subframe 4 (reference paragraph 20.3.3.5.1.9) [s] int i_AODO; //!< Age of Data Offset (AODO) term for the navigation message correction table (NMCT) contained in subframe 4 (reference paragraph 20.3.3.5.1.9) [s]
bool b_fit_interval_flag;//!< indicates the curve-fit interval used by the CS (Block II/IIA/IIR/IIR-M/IIF) and SS (Block IIIA) in determining the ephemeris parameters, as follows: 0 = 4 hours, 1 = greater than 4 hours. bool b_fit_interval_flag;//!< indicates the curve-fit interval used by the CS (Block II/IIA/IIR/IIR-M/IIF) and SS (Block IIIA) in determining the ephemeris parameters, as follows: 0 = 4 hours, 1 = greater than 4 hours.
@ -133,9 +135,12 @@ public:
void serialize(Archive& archive, const unsigned int version) void serialize(Archive& archive, const unsigned int version)
{ {
using boost::serialization::make_nvp; using boost::serialization::make_nvp;
if(version){};
archive & make_nvp("i_satellite_PRN", i_satellite_PRN); // SV PRN NUMBER archive & make_nvp("i_satellite_PRN", i_satellite_PRN); // SV PRN NUMBER
archive & make_nvp("d_TOW", d_TOW); //!< Time of GPS Week of the ephemeris set (taken from subframes TOW) [s] archive & make_nvp("d_TOW", d_TOW); //!< Time of GPS Week of the ephemeris set (taken from subframes TOW) [s]
archive & make_nvp("d_IODE_SF2", d_IODE_SF2);
archive & make_nvp("d_IODE_SF3", d_IODE_SF3);
archive & make_nvp("d_Crs", d_Crs); //!< Amplitude of the Sine Harmonic Correction Term to the Orbit Radius [m] archive & make_nvp("d_Crs", d_Crs); //!< Amplitude of the Sine Harmonic Correction Term to the Orbit Radius [m]
archive & make_nvp("d_Delta_n", d_Delta_n); //!< Mean Motion Difference From Computed Value [semi-circles/s] archive & make_nvp("d_Delta_n", d_Delta_n); //!< Mean Motion Difference From Computed Value [semi-circles/s]
archive & make_nvp("d_M_0", d_M_0); //!< Mean Anomaly at Reference Time [semi-circles] archive & make_nvp("d_M_0", d_M_0); //!< Mean Anomaly at Reference Time [semi-circles]

View File

@ -66,7 +66,7 @@ public:
void serialize(Archive& archive, const unsigned int version) void serialize(Archive& archive, const unsigned int version)
{ {
using boost::serialization::make_nvp; using boost::serialization::make_nvp;
if(version){};
archive & make_nvp("d_alpha0",d_alpha0); archive & make_nvp("d_alpha0",d_alpha0);
archive & make_nvp("d_alpha1",d_alpha1); archive & make_nvp("d_alpha1",d_alpha1);
archive & make_nvp("d_alpha2",d_alpha2); archive & make_nvp("d_alpha2",d_alpha2);

View File

@ -43,7 +43,6 @@ void Gps_Navigation_Message::reset()
d_TOW_SF3 = 0; d_TOW_SF3 = 0;
d_TOW_SF4 = 0; d_TOW_SF4 = 0;
d_TOW_SF5 = 0; d_TOW_SF5 = 0;
d_IODE_SF2 = 0; d_IODE_SF2 = 0;
d_IODE_SF3 = 0; d_IODE_SF3 = 0;
d_Crs = 0; d_Crs = 0;
@ -762,6 +761,8 @@ Gps_Ephemeris Gps_Navigation_Message::get_ephemeris()
ephemeris.i_SV_health = i_SV_health; ephemeris.i_SV_health = i_SV_health;
ephemeris.d_TGD = d_TGD; ephemeris.d_TGD = d_TGD;
ephemeris.d_IODC = d_IODC; ephemeris.d_IODC = d_IODC;
ephemeris.d_IODE_SF2 = d_IODE_SF2;
ephemeris.d_IODE_SF3 = d_IODE_SF3;
ephemeris.i_AODO = i_AODO; ephemeris.i_AODO = i_AODO;
ephemeris.b_fit_interval_flag = b_fit_interval_flag; ephemeris.b_fit_interval_flag = b_fit_interval_flag;
ephemeris.d_spare1 = d_spare1; ephemeris.d_spare1 = d_spare1;

View File

@ -61,7 +61,7 @@ public:
void serialize(Archive& archive, const unsigned int version) void serialize(Archive& archive, const unsigned int version)
{ {
using boost::serialization::make_nvp; using boost::serialization::make_nvp;
if(version){};
archive & make_nvp("valid", valid); archive & make_nvp("valid", valid);
archive & make_nvp("lat", lat); archive & make_nvp("lat", lat);
archive & make_nvp("lon", lon); archive & make_nvp("lon", lon);

View File

@ -62,6 +62,7 @@ public:
void serialize(Archive& archive, const unsigned int version) void serialize(Archive& archive, const unsigned int version)
{ {
using boost::serialization::make_nvp; using boost::serialization::make_nvp;
if(version){};
archive & make_nvp("valid", valid); archive & make_nvp("valid", valid);
archive & make_nvp("d_TOW", d_TOW); archive & make_nvp("d_TOW", d_TOW);
archive & make_nvp("d_Week", d_Week); archive & make_nvp("d_Week", d_Week);

View File

@ -68,7 +68,7 @@ public:
void serialize(Archive& archive, const unsigned int version) void serialize(Archive& archive, const unsigned int version)
{ {
using boost::serialization::make_nvp; using boost::serialization::make_nvp;
if(version){};
archive & make_nvp("valid",valid); archive & make_nvp("valid",valid);
archive & make_nvp("d_A1",d_A1); archive & make_nvp("d_A1",d_A1);
archive & make_nvp("d_A0",d_A0); archive & make_nvp("d_A0",d_A0);

View File

@ -89,8 +89,6 @@ install(TARGETS gnss-sdr
install(DIRECTORY ${CMAKE_SOURCE_DIR}/conf DESTINATION share/gnss-sdr install(DIRECTORY ${CMAKE_SOURCE_DIR}/conf DESTINATION share/gnss-sdr
FILES_MATCHING PATTERN "*.conf" FILES_MATCHING PATTERN "*.conf"
) )
install(DIRECTORY DESTINATION share/gnss-sdr/data/)
install(FILES ${CMAKE_SOURCE_DIR}/conf/gnss-sdr.conf DESTINATION share/gnss-sdr/conf install(FILES ${CMAKE_SOURCE_DIR}/conf/gnss-sdr.conf DESTINATION share/gnss-sdr/conf
RENAME default.conf) RENAME default.conf)

View File

@ -28,8 +28,7 @@ if(NOT GTEST_DIR_LOCAL)
else() else()
set(GTEST_DIR_LOCAL true) set(GTEST_DIR_LOCAL true)
endif(NOT GTEST_DIR_LOCAL) endif(NOT GTEST_DIR_LOCAL)
find_path(GTEST_INCLUDE_DIRS NAMES gtest/gtest.h
PATHS /usr/include)
if(GTEST_INCLUDE_DIRS) if(GTEST_INCLUDE_DIRS)
set(GTEST_DIR_LOCAL true) set(GTEST_DIR_LOCAL true)
endif(GTEST_INCLUDE_DIRS) endif(GTEST_INCLUDE_DIRS)
@ -86,10 +85,8 @@ if(NOT ${GTEST_DIR_LOCAL})
set(GTEST_LIB_DIR "${CMAKE_CURRENT_BINARY_DIR}/../../gtest-${gtest_RELEASE}") set(GTEST_LIB_DIR "${CMAKE_CURRENT_BINARY_DIR}/../../gtest-${gtest_RELEASE}")
else(NOT ${GTEST_DIR_LOCAL}) else(NOT ${GTEST_DIR_LOCAL})
if(GTEST_INCLUDE_DIRS) if(GTEST_INCLUDE_DIRS)
find_path(GTEST_SOURCE_DIR NAMES gtest-all.cc PATHS /usr/src/gtest/src) set(GTEST_INCLUDE_DIRECTORIES ${GTEST_INCLUDE_DIRS} ${LIBGTEST_DEV_DIR})
find_path(GTEST_SOURCE_INCLUDE NAMES src/gtest-all.cc PATHS /usr/src/gtest) add_library(gtest ${LIBGTEST_DEV_DIR}/src/gtest-all.cc ${LIBGTEST_DEV_DIR}/src/gtest_main.cc)
set(GTEST_INCLUDE_DIRECTORIES ${GTEST_INCLUDE_DIRS} ${GTEST_SOURCE_INCLUDE} ${GTEST_SOURCE_DIR})
add_library(gtest ${GTEST_SOURCE_DIR}/gtest-all.cc ${GTEST_SOURCE_DIR}/gtest_main.cc)
set(GTEST_LIBRARIES gtest) set(GTEST_LIBRARIES gtest)
else(GTEST_INCLUDE_DIRS) else(GTEST_INCLUDE_DIRS)
# If the variable GTEST_DIR is defined, we use the existing Googletest # If the variable GTEST_DIR is defined, we use the existing Googletest
@ -153,6 +150,7 @@ include_directories(
${VOLK_INCLUDE_DIRS} ${VOLK_INCLUDE_DIRS}
${VOLK_GNSSSDR_INCLUDE_DIRS} ${VOLK_GNSSSDR_INCLUDE_DIRS}
${GNSS_SDR_TEST_OPTIONAL_HEADERS} ${GNSS_SDR_TEST_OPTIONAL_HEADERS}
${GNSS_SDR_TEST_OPTIONAL_HEADERS}
) )

View File

@ -50,7 +50,7 @@ TEST(MagnitudeSquared_Test, StandardCComplexImplementation)
for(number = 0; number < (unsigned int)FLAGS_size_magnitude_test; number++) for(number = 0; number < (unsigned int)FLAGS_size_magnitude_test; number++)
{ {
output[number] = (input[number].real()*input[number].real()) + (input[number].imag()*input[number].imag()); output[number] = (input[number].real() * input[number].real()) + (input[number].imag() * input[number].imag());
} }
gettimeofday(&tv, NULL); gettimeofday(&tv, NULL);
@ -66,7 +66,7 @@ TEST(MagnitudeSquared_Test, StandardCComplexImplementation)
TEST(MagnitudeSquared_Test, C11ComplexImplementation) TEST(MagnitudeSquared_Test, C11ComplexImplementation)
{ {
const std::vector<std::complex<float>> input(FLAGS_size_magnitude_test); const std::vector<std::complex<float>> input(FLAGS_size_magnitude_test);
std::vector<std::complex<float>> output(FLAGS_size_magnitude_test); std::vector<float> output(FLAGS_size_magnitude_test);
struct timeval tv; struct timeval tv;
int pos = 0; int pos = 0;
gettimeofday(&tv, NULL); gettimeofday(&tv, NULL);

View File

@ -484,13 +484,15 @@ TEST_F(GalileoE1Pcps8msAmbiguousAcquisitionGSoC2013Test, ValidationOfResults)
} }
acquisition->set_local_code(); acquisition->set_local_code();
//acquisition->set_state(1);
start_queue(); start_queue();
EXPECT_NO_THROW( { EXPECT_NO_THROW( {
top_block->run(); // Start threads and wait top_block->run(); // Start threads and wait
}) << "Failure running the top_block." << std::endl; }) << "Failure running the top_block." << std::endl;
stop_queue();
if (i == 0) if (i == 0)
{ {
EXPECT_EQ(1, message) << "Acquisition failure. Expected message: 1=ACQ SUCCESS."; EXPECT_EQ(1, message) << "Acquisition failure. Expected message: 1=ACQ SUCCESS.";
@ -505,16 +507,7 @@ TEST_F(GalileoE1Pcps8msAmbiguousAcquisitionGSoC2013Test, ValidationOfResults)
EXPECT_EQ(2, message) << "Acquisition failure. Expected message: 2=ACQ FAIL."; EXPECT_EQ(2, message) << "Acquisition failure. Expected message: 2=ACQ FAIL.";
} }
#ifdef OLD_BOOST ch_thread.join();
ASSERT_NO_THROW( {
ch_thread.timed_join(boost::posix_time::seconds(1));
}) << "Failure while waiting the queue to stop" << std::endl;
#endif
#ifndef OLD_BOOST
ASSERT_NO_THROW( {
ch_thread.try_join_until(boost::chrono::steady_clock::now() + boost::chrono::milliseconds(50));
}) << "Failure while waiting the queue to stop" << std::endl;
#endif
} }
} }
@ -583,13 +576,13 @@ TEST_F(GalileoE1Pcps8msAmbiguousAcquisitionGSoC2013Test, ValidationOfResultsProb
} }
acquisition->set_local_code(); acquisition->set_local_code();
//acquisition->set_state(1);
start_queue(); start_queue();
EXPECT_NO_THROW( { EXPECT_NO_THROW( {
top_block->run(); // Start threads and wait top_block->run(); // Start threads and wait
}) << "Failure running the top_block." << std::endl; }) << "Failure running the top_block." << std::endl;
stop_queue();
if (i == 0) if (i == 0)
{ {
std::cout << "Estimated probability of detection = " << Pd << std::endl; std::cout << "Estimated probability of detection = " << Pd << std::endl;
@ -601,15 +594,7 @@ TEST_F(GalileoE1Pcps8msAmbiguousAcquisitionGSoC2013Test, ValidationOfResultsProb
std::cout << "Estimated probability of false alarm (satellite absent) = " << Pfa_a << std::endl; std::cout << "Estimated probability of false alarm (satellite absent) = " << Pfa_a << std::endl;
std::cout << "Mean acq time = " << mean_acq_time_us << " microseconds." << std::endl; std::cout << "Mean acq time = " << mean_acq_time_us << " microseconds." << std::endl;
} }
#ifdef OLD_BOOST
ASSERT_NO_THROW( { ch_thread.join();
ch_thread.timed_join(boost::posix_time::seconds(1));
}) << "Failure while waiting the queue to stop" << std::endl;
#endif
#ifndef OLD_BOOST
ASSERT_NO_THROW( {
ch_thread.try_join_until(boost::chrono::steady_clock::now() + boost::chrono::milliseconds(50));
}) << "Failure while waiting the queue to stop" << std::endl;
#endif
} }
} }

Some files were not shown because too many files have changed in this diff Show More