diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_gs.cc b/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_gs.cc index bd72d4cde..ed358e9b5 100644 --- a/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_gs.cc +++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_gs.cc @@ -153,6 +153,19 @@ gps_l1_ca_telemetry_decoder_gs::~gps_l1_ca_telemetry_decoder_gs() { DLOG(INFO) << "GPS L1 C/A Telemetry decoder block (channel " << d_channel << ") destructor called."; size_t pos = 0; + + if( subframe_data_file.is_open()) + { + try + { + subframe_data_file.close(); + } + catch (const std::exception &ex) + { + LOG(WARNING) << "*** Exception in destructor closing the subframe file " << ex.what(); + } + } + if (d_dump_file.is_open() == true) { pos = d_dump_file.tellp(); @@ -228,6 +241,20 @@ void gps_l1_ca_telemetry_decoder_gs::set_channel(int32_t channel) d_nav.set_channel(channel); DLOG(INFO) << "Navigation channel set to " << channel; // ############# ENABLE DATA FILE LOG ################# + if( subframe_data_file.is_open()==false) + { + try + { + std::string file_name = subframe_file_prefix+std::to_string(channel)+std::string(".csv"); + subframe_data_file.open(file_name.data()); + } + catch(const std::ofstream::failure &e) + { + std::cerr << "*** Fail to open subframe file for channel "+ channel << "\n" + << e.what() << "\n"; + } + } + if (d_dump == true) { if (d_dump_file.is_open() == false) @@ -349,7 +376,7 @@ bool gps_l1_ca_telemetry_decoder_gs::decode_subframe(double cn0, bool flag_inver } d_nav_msg_packet.nav_message = subframe_bits.to_string(); } - const int32_t subframe_ID = d_nav.subframe_decoder(subframe.data()); // decode the subframe + const int32_t subframe_ID = d_nav.subframe_decoder(subframe.data(),&subframe_data_file); // decode the subframe if (subframe_ID > 0 && subframe_ID < 6) { switch (subframe_ID) diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_gs.h b/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_gs.h index 5939163bc..9a6d99143 100644 --- a/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_gs.h +++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_gs.h @@ -89,6 +89,9 @@ private: std::string d_dump_filename; std::ofstream d_dump_file; + std::ofstream subframe_data_file; + std::string subframe_file_prefix = "/mnt/c/Documents and Settings/Admin/gnss-sdr/data_treatment/subframes/subframe_"; + boost::circular_buffer d_symbol_history; uint64_t d_sample_counter; diff --git a/src/core/system_parameters/gps_navigation_message.cc b/src/core/system_parameters/gps_navigation_message.cc index b17458da7..fc65aaadb 100644 --- a/src/core/system_parameters/gps_navigation_message.cc +++ b/src/core/system_parameters/gps_navigation_message.cc @@ -24,6 +24,8 @@ #include // for operator<<, cout #include // for std::numeric_limits +#include + Gps_Navigation_Message::Gps_Navigation_Message() { @@ -78,7 +80,7 @@ int64_t Gps_Navigation_Message::read_navigation_signed(const std::bitset(read_navigation_unsigned(subframe_bits, SUBFRAME_ID)); + if(subframe_writer!=nullptr) + { + *subframe_writer << "*" << subframe_ID << "*"; + *subframe_writer << subframe_bits << "\n"; + } + // Decode all 5 sub-frames switch (subframe_ID) { diff --git a/src/core/system_parameters/gps_navigation_message.h b/src/core/system_parameters/gps_navigation_message.h index 16e8b2a9f..d378b912d 100644 --- a/src/core/system_parameters/gps_navigation_message.h +++ b/src/core/system_parameters/gps_navigation_message.h @@ -68,7 +68,7 @@ public: /*! * \brief Decodes the GPS NAV message */ - int32_t subframe_decoder(const char* subframe); + int32_t subframe_decoder(const char* subframe, std::ofstream* subframe_writer=nullptr); /*! * \brief Computes the Coordinated Universal Time (UTC) and