mirror of
				https://github.com/gnss-sdr/gnss-sdr
				synced 2025-10-30 23:03:05 +00:00 
			
		
		
		
	Fix defects detected by Coverity Scan
This commit is contained in:
		| @@ -147,15 +147,10 @@ private: | ||||
|     gr::blocks::stream_to_vector::sptr stream_to_vector_; | ||||
|     gr::blocks::float_to_complex::sptr float_to_complex_; | ||||
|     complex_byte_to_float_x2_sptr cbyte_to_float_x2_; | ||||
|     bool bit_transition_flag_; | ||||
|     bool use_CFAR_algorithm_flag_; | ||||
|     bool acquire_pilot_; | ||||
|     uint32_t channel_; | ||||
|     uint32_t doppler_max_; | ||||
|     uint32_t doppler_step_; | ||||
|     uint32_t max_dwells_; | ||||
|     bool dump_; | ||||
|     bool blocking_; | ||||
|     std::string dump_filename_; | ||||
|     Gnss_Synchro* gnss_synchro_; | ||||
|     std::string role_; | ||||
|   | ||||
| @@ -67,7 +67,7 @@ public: | ||||
|  | ||||
|     inline size_t item_size() override | ||||
|     { | ||||
|         return item_size_; | ||||
|         return sizeof(int); | ||||
|     } | ||||
|  | ||||
|     void connect(gr::top_block_sptr top_block) override; | ||||
| @@ -150,35 +150,19 @@ private: | ||||
|     pcps_acquisition_fpga_sptr acquisition_fpga_; | ||||
|     gr::blocks::stream_to_vector::sptr stream_to_vector_; | ||||
|  | ||||
|     size_t item_size_; | ||||
|  | ||||
|     std::string item_type_; | ||||
|     std::string dump_filename_; | ||||
|     std::string role_; | ||||
|  | ||||
|     bool bit_transition_flag_; | ||||
|     bool dump_; | ||||
|     bool acq_pilot_; | ||||
|     bool use_CFAR_; | ||||
|     bool blocking_; | ||||
|     bool acq_iq_; | ||||
|  | ||||
|     uint32_t vector_length_; | ||||
|     uint32_t code_length_; | ||||
|     uint32_t channel_; | ||||
|     uint32_t doppler_max_; | ||||
|     uint32_t doppler_step_; | ||||
|     uint32_t sampled_ms_; | ||||
|     uint32_t max_dwells_; | ||||
|     unsigned int in_streams_; | ||||
|     unsigned int out_streams_; | ||||
|  | ||||
|     int64_t fs_in_; | ||||
|  | ||||
|     float threshold_; | ||||
|  | ||||
|     gr_complex* code_; | ||||
|  | ||||
|     Gnss_Synchro* gnss_synchro_; | ||||
|  | ||||
|     lv_16sc_t* d_all_fft_codes_;  // memory that contains all the code ffts | ||||
|   | ||||
| @@ -146,7 +146,6 @@ GpsL2MPcpsAcquisitionFpga::GpsL2MPcpsAcquisitionFpga( | ||||
|  | ||||
| GpsL2MPcpsAcquisitionFpga::~GpsL2MPcpsAcquisitionFpga() | ||||
| { | ||||
|     //delete[] code_; | ||||
|     delete[] d_all_fft_codes_; | ||||
| } | ||||
|  | ||||
| @@ -212,9 +211,6 @@ void GpsL2MPcpsAcquisitionFpga::init() | ||||
|  | ||||
| void GpsL2MPcpsAcquisitionFpga::set_local_code() | ||||
| { | ||||
|     //gps_l2c_m_code_gen_complex_sampled(code_, gnss_synchro_->PRN, fs_in_); | ||||
|  | ||||
|     //acquisition_fpga_->set_local_code(code_); | ||||
|     acquisition_fpga_->set_local_code(); | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -75,7 +75,7 @@ public: | ||||
|  | ||||
|     inline size_t item_size() override | ||||
|     { | ||||
|         return item_size_; | ||||
|         return sizeof(int); | ||||
|     } | ||||
|  | ||||
|     void connect(gr::top_block_sptr top_block) override; | ||||
| @@ -149,23 +149,13 @@ private: | ||||
|     gr::blocks::stream_to_vector::sptr stream_to_vector_; | ||||
|     gr::blocks::float_to_complex::sptr float_to_complex_; | ||||
|     complex_byte_to_float_x2_sptr cbyte_to_float_x2_; | ||||
|     size_t item_size_; | ||||
|     std::string item_type_; | ||||
|     unsigned int vector_length_; | ||||
|     unsigned int code_length_; | ||||
|     bool bit_transition_flag_; | ||||
|     bool use_CFAR_algorithm_flag_; | ||||
|     unsigned int channel_; | ||||
|     float threshold_; | ||||
|     unsigned int doppler_max_; | ||||
|     unsigned int doppler_step_; | ||||
|     unsigned int max_dwells_; | ||||
|     int64_t fs_in_; | ||||
|     //long if_; | ||||
|     bool dump_; | ||||
|     bool blocking_; | ||||
|     std::string dump_filename_; | ||||
|     std::complex<float>* code_; | ||||
|     Gnss_Synchro* gnss_synchro_; | ||||
|     std::string role_; | ||||
|     unsigned int in_streams_; | ||||
|   | ||||
| @@ -76,7 +76,7 @@ public: | ||||
|  | ||||
|     inline size_t item_size() override | ||||
|     { | ||||
|         return item_size_; | ||||
|         return sizeof(int); | ||||
|     } | ||||
|  | ||||
|     void connect(gr::top_block_sptr top_block) override; | ||||
| @@ -149,22 +149,11 @@ private: | ||||
|     gr::blocks::stream_to_vector::sptr stream_to_vector_; | ||||
|     gr::blocks::float_to_complex::sptr float_to_complex_; | ||||
|     complex_byte_to_float_x2_sptr cbyte_to_float_x2_; | ||||
|     size_t item_size_; | ||||
|     std::string item_type_; | ||||
|     uint32_t vector_length_; | ||||
|     uint32_t code_length_; | ||||
|     bool bit_transition_flag_; | ||||
|     bool use_CFAR_algorithm_flag_; | ||||
|     uint32_t channel_; | ||||
|     float threshold_; | ||||
|     uint32_t doppler_max_; | ||||
|     uint32_t doppler_step_; | ||||
|     uint32_t max_dwells_; | ||||
|     int64_t fs_in_; | ||||
|     bool dump_; | ||||
|     bool blocking_; | ||||
|     std::string dump_filename_; | ||||
|     std::complex<float>* code_; | ||||
|     Gnss_Synchro* gnss_synchro_; | ||||
|     std::string role_; | ||||
|     unsigned int in_streams_; | ||||
|   | ||||
| @@ -62,6 +62,18 @@ | ||||
| #define SELECT_ALL_CODE_BITS 0x000FFFFF       // Select a 20 bit word | ||||
| #define SHL_CODE_BITS 1024                    // shift left by 10 bits | ||||
|  | ||||
| #ifndef TEMP_FAILURE_RETRY | ||||
| #define TEMP_FAILURE_RETRY(exp)              \ | ||||
|     ({                                       \ | ||||
|         decltype(exp) _rc;                   \ | ||||
|         do                                   \ | ||||
|             {                                \ | ||||
|                 _rc = (exp);                 \ | ||||
|             }                                \ | ||||
|         while (_rc == -1 && errno == EINTR); \ | ||||
|         _rc;                                 \ | ||||
|     }) | ||||
| #endif | ||||
|  | ||||
| bool Fpga_Acquisition::init() | ||||
| { | ||||
|   | ||||
| @@ -40,8 +40,23 @@ | ||||
| #include <string> | ||||
| #include <sys/mman.h>  // libraries used by the GIPO | ||||
|  | ||||
| using google::LogMessage; | ||||
|  | ||||
| #define PAGE_SIZE 0x10000             // default page size for the multicorrelator memory map | ||||
| #define TEST_REG_SANITY_CHECK 0x55AA  // value to check the presence of the test register (to detect the hw) | ||||
| #ifndef TEMP_FAILURE_RETRY | ||||
| #define TEMP_FAILURE_RETRY(exp)              \ | ||||
|     ({                                       \ | ||||
|         decltype(exp) _rc;                   \ | ||||
|         do                                   \ | ||||
|             {                                \ | ||||
|                 _rc = (exp);                 \ | ||||
|             }                                \ | ||||
|         while (_rc == -1 && errno == EINTR); \ | ||||
|         _rc;                                 \ | ||||
|     }) | ||||
| #endif | ||||
|  | ||||
|  | ||||
| gnss_sdr_fpga_sample_counter::gnss_sdr_fpga_sample_counter( | ||||
|     double _fs, | ||||
| @@ -59,7 +74,7 @@ gnss_sdr_fpga_sample_counter::gnss_sdr_fpga_sample_counter( | ||||
|     //The hardware timer must keep always interrupting the PS. It must not wait for the interrupt to | ||||
|     //be served. | ||||
|     open_device(); | ||||
|  | ||||
|     is_open = true; | ||||
|     sample_counter = 0ULL; | ||||
|     current_T_rx_ms = 0; | ||||
|     current_s = 0; | ||||
| @@ -81,6 +96,15 @@ gnss_sdr_fpga_sample_counter_sptr gnss_sdr_make_fpga_sample_counter(double _fs, | ||||
| } | ||||
|  | ||||
|  | ||||
| gnss_sdr_fpga_sample_counter::~gnss_sdr_fpga_sample_counter() | ||||
| { | ||||
|     if (is_open) | ||||
|         { | ||||
|             close_device(); | ||||
|         } | ||||
| } | ||||
|  | ||||
|  | ||||
| // Called by gnuradio to enable drivers, etc for i/o devices. | ||||
| bool gnss_sdr_fpga_sample_counter::start() | ||||
| { | ||||
| @@ -100,102 +124,11 @@ bool gnss_sdr_fpga_sample_counter::stop() | ||||
|     //todo: place here the routines to stop the associated hardware (if needed).This function will be called by GNURadio at every stop of the flowgraph. | ||||
|     // return true if everything is ok. | ||||
|     close_device(); | ||||
|  | ||||
|     is_open = false; | ||||
|     return true; | ||||
| } | ||||
|  | ||||
|  | ||||
| int gnss_sdr_fpga_sample_counter::general_work(int noutput_items __attribute__((unused)), | ||||
|     __attribute__((unused)) gr_vector_int &ninput_items, | ||||
|     __attribute__((unused)) gr_vector_const_void_star &input_items, | ||||
|     gr_vector_void_star &output_items) | ||||
| { | ||||
|     //todo: Call here a function that waits for an interrupt. Do not open a thread, | ||||
|     //it must be a simple call to a BLOCKING function. | ||||
|     // The function will return the actual absolute sample count of the internal counter of the timmer. | ||||
|     // store the sample count in class member sample_counter | ||||
|     // Possible problem: what happen if the PS is overloaded and gnuradio does not call this function | ||||
|     // with the sufficient rate to catch all the interrupts in the counter. To be evaluated later. | ||||
|  | ||||
|     uint32_t counter = wait_for_interrupt_and_read_counter(); | ||||
|     uint64_t samples_passed = 2 * static_cast<uint64_t>(samples_per_output) - static_cast<uint64_t>(counter);  // ellapsed samples | ||||
|     // Note: at this moment the sample counter is implemented as a sample counter that decreases to zero and then it is automatically | ||||
|     // reloaded again and keeps counter. It is done in this way to minimize the logic in the FPGA and maximize the FPGA clock performance | ||||
|     // (it takes less resources and latency in the FPGA to compare a number against a fixed value like zero than to compare it to a programmable | ||||
|     // variable number). | ||||
|  | ||||
|     sample_counter = sample_counter + samples_passed;  //samples_per_output; | ||||
|     auto *out = reinterpret_cast<Gnss_Synchro *>(output_items[0]); | ||||
|     out[0] = Gnss_Synchro(); | ||||
|     out[0].Flag_valid_symbol_output = false; | ||||
|     out[0].Flag_valid_word = false; | ||||
|     out[0].Channel_ID = -1; | ||||
|     out[0].fs = fs; | ||||
|     if ((current_T_rx_ms % report_interval_ms) == 0) | ||||
|         { | ||||
|             current_s++; | ||||
|             if ((current_s % 60) == 0) | ||||
|                 { | ||||
|                     current_s = 0; | ||||
|                     current_m++; | ||||
|                     flag_m = true; | ||||
|                     if ((current_m % 60) == 0) | ||||
|                         { | ||||
|                             current_m = 0; | ||||
|                             current_h++; | ||||
|                             flag_h = true; | ||||
|                             if ((current_h % 24) == 0) | ||||
|                                 { | ||||
|                                     current_h = 0; | ||||
|                                     current_days++; | ||||
|                                     flag_days = true; | ||||
|                                 } | ||||
|                         } | ||||
|                 } | ||||
|  | ||||
|             if (flag_days) | ||||
|                 { | ||||
|                     std::string day; | ||||
|                     if (current_days == 1) | ||||
|                         { | ||||
|                             day = " day "; | ||||
|                         } | ||||
|                     else | ||||
|                         { | ||||
|                             day = " days "; | ||||
|                         } | ||||
|                     std::cout << "Current receiver time: " << current_days << day << current_h << " h " << current_m << " min " << current_s << " s" << std::endl; | ||||
|                 } | ||||
|             else | ||||
|                 { | ||||
|                     if (flag_h) | ||||
|                         { | ||||
|                             std::cout << "Current receiver time: " << current_h << " h " << current_m << " min " << current_s << " s" << std::endl; | ||||
|                         } | ||||
|                     else | ||||
|                         { | ||||
|                             if (flag_m) | ||||
|                                 { | ||||
|                                     std::cout << "Current receiver time: " << current_m << " min " << current_s << " s" << std::endl; | ||||
|                                 } | ||||
|                             else | ||||
|                                 { | ||||
|                                     std::cout << "Current receiver time: " << current_s << " s" << std::endl; | ||||
|                                 } | ||||
|                         } | ||||
|                 } | ||||
|             if (flag_enable_send_msg) | ||||
|                 { | ||||
|                     message_port_pub(pmt::mp("receiver_time"), pmt::from_double(static_cast<double>(current_T_rx_ms) / 1000.0)); | ||||
|                 } | ||||
|         } | ||||
|     out[0].Tracking_sample_counter = sample_counter; | ||||
|     //current_T_rx_ms = (sample_counter * 1000) / samples_per_output; | ||||
|     current_T_rx_ms = interval_ms * (sample_counter) / samples_per_output; | ||||
|     return 1; | ||||
| } | ||||
|  | ||||
|  | ||||
| uint32_t gnss_sdr_fpga_sample_counter::test_register(uint32_t writeval) | ||||
| { | ||||
|     uint32_t readval; | ||||
| @@ -290,3 +223,94 @@ uint32_t gnss_sdr_fpga_sample_counter::wait_for_interrupt_and_read_counter() | ||||
|     counter = samples_per_output;  //map_base[0]; | ||||
|     return counter; | ||||
| } | ||||
|  | ||||
|  | ||||
| int gnss_sdr_fpga_sample_counter::general_work(int noutput_items __attribute__((unused)), | ||||
|     __attribute__((unused)) gr_vector_int &ninput_items, | ||||
|     __attribute__((unused)) gr_vector_const_void_star &input_items, | ||||
|     gr_vector_void_star &output_items) | ||||
| { | ||||
|     //todo: Call here a function that waits for an interrupt. Do not open a thread, | ||||
|     //it must be a simple call to a BLOCKING function. | ||||
|     // The function will return the actual absolute sample count of the internal counter of the timmer. | ||||
|     // store the sample count in class member sample_counter | ||||
|     // Possible problem: what happen if the PS is overloaded and gnuradio does not call this function | ||||
|     // with the sufficient rate to catch all the interrupts in the counter. To be evaluated later. | ||||
|  | ||||
|     uint32_t counter = wait_for_interrupt_and_read_counter(); | ||||
|     uint64_t samples_passed = 2 * static_cast<uint64_t>(samples_per_output) - static_cast<uint64_t>(counter);  // ellapsed samples | ||||
|     // Note: at this moment the sample counter is implemented as a sample counter that decreases to zero and then it is automatically | ||||
|     // reloaded again and keeps counter. It is done in this way to minimize the logic in the FPGA and maximize the FPGA clock performance | ||||
|     // (it takes less resources and latency in the FPGA to compare a number against a fixed value like zero than to compare it to a programmable | ||||
|     // variable number). | ||||
|  | ||||
|     sample_counter = sample_counter + samples_passed;  //samples_per_output; | ||||
|     auto *out = reinterpret_cast<Gnss_Synchro *>(output_items[0]); | ||||
|     out[0] = Gnss_Synchro(); | ||||
|     out[0].Flag_valid_symbol_output = false; | ||||
|     out[0].Flag_valid_word = false; | ||||
|     out[0].Channel_ID = -1; | ||||
|     out[0].fs = fs; | ||||
|     if ((current_T_rx_ms % report_interval_ms) == 0) | ||||
|         { | ||||
|             current_s++; | ||||
|             if ((current_s % 60) == 0) | ||||
|                 { | ||||
|                     current_s = 0; | ||||
|                     current_m++; | ||||
|                     flag_m = true; | ||||
|                     if ((current_m % 60) == 0) | ||||
|                         { | ||||
|                             current_m = 0; | ||||
|                             current_h++; | ||||
|                             flag_h = true; | ||||
|                             if ((current_h % 24) == 0) | ||||
|                                 { | ||||
|                                     current_h = 0; | ||||
|                                     current_days++; | ||||
|                                     flag_days = true; | ||||
|                                 } | ||||
|                         } | ||||
|                 } | ||||
|  | ||||
|             if (flag_days) | ||||
|                 { | ||||
|                     std::string day; | ||||
|                     if (current_days == 1) | ||||
|                         { | ||||
|                             day = " day "; | ||||
|                         } | ||||
|                     else | ||||
|                         { | ||||
|                             day = " days "; | ||||
|                         } | ||||
|                     std::cout << "Current receiver time: " << current_days << day << current_h << " h " << current_m << " min " << current_s << " s" << std::endl; | ||||
|                 } | ||||
|             else | ||||
|                 { | ||||
|                     if (flag_h) | ||||
|                         { | ||||
|                             std::cout << "Current receiver time: " << current_h << " h " << current_m << " min " << current_s << " s" << std::endl; | ||||
|                         } | ||||
|                     else | ||||
|                         { | ||||
|                             if (flag_m) | ||||
|                                 { | ||||
|                                     std::cout << "Current receiver time: " << current_m << " min " << current_s << " s" << std::endl; | ||||
|                                 } | ||||
|                             else | ||||
|                                 { | ||||
|                                     std::cout << "Current receiver time: " << current_s << " s" << std::endl; | ||||
|                                 } | ||||
|                         } | ||||
|                 } | ||||
|             if (flag_enable_send_msg) | ||||
|                 { | ||||
|                     message_port_pub(pmt::mp("receiver_time"), pmt::from_double(static_cast<double>(current_T_rx_ms) / 1000.0)); | ||||
|                 } | ||||
|         } | ||||
|     out[0].Tracking_sample_counter = sample_counter; | ||||
|     //current_T_rx_ms = (sample_counter * 1000) / samples_per_output; | ||||
|     current_T_rx_ms = interval_ms * (sample_counter) / samples_per_output; | ||||
|     return 1; | ||||
| } | ||||
|   | ||||
| @@ -72,9 +72,11 @@ private: | ||||
|     int32_t fd;                             // driver descriptor | ||||
|     volatile uint32_t *map_base;            // driver memory map | ||||
|     std::string device_name = "/dev/uio2";  // HW device name | ||||
|     bool is_open; | ||||
|  | ||||
| public: | ||||
|     friend gnss_sdr_fpga_sample_counter_sptr gnss_sdr_make_fpga_sample_counter(double _fs, int32_t _interval_ms); | ||||
|     ~gnss_sdr_fpga_sample_counter(); | ||||
|     int general_work(int noutput_items, | ||||
|         gr_vector_int &ninput_items, | ||||
|         gr_vector_const_void_star &input_items, | ||||
|   | ||||
| @@ -3,7 +3,6 @@ | ||||
|  * \brief  Adapts a DLL+PLL VEML (Very Early Minus Late) tracking loop block | ||||
|  *   to a TrackingInterface for Galileo E1 signals for the FPGA | ||||
|  * \author Marc Majoral, 2019. mmajoral(at)cttc.cat | ||||
|  * \author Luis Esteve, 2012. luis(at)epsilon-formacion.com | ||||
|  * | ||||
|  * Code DLL + carrier PLL according to the algorithms described in: | ||||
|  * K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen, | ||||
| @@ -45,10 +44,6 @@ | ||||
|  | ||||
| using google::LogMessage; | ||||
|  | ||||
| void GalileoE1DllPllVemlTrackingFpga::stop_tracking() | ||||
| { | ||||
| } | ||||
|  | ||||
| GalileoE1DllPllVemlTrackingFpga::GalileoE1DllPllVemlTrackingFpga( | ||||
|     ConfigurationInterface* configuration, const std::string& role, | ||||
|     unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams) | ||||
| @@ -136,6 +131,7 @@ GalileoE1DllPllVemlTrackingFpga::GalileoE1DllPllVemlTrackingFpga( | ||||
|     d_ca_codes = static_cast<int32_t*>(volk_gnsssdr_malloc(static_cast<int32_t>(GALILEO_E1_B_CODE_LENGTH_CHIPS) * code_samples_per_chip * GALILEO_E1_NUMBER_OF_CODES * sizeof(int32_t), volk_gnsssdr_get_alignment())); | ||||
|     float* ca_codes_f; | ||||
|     float* data_codes_f = nullptr; | ||||
|     d_data_codes = nullptr; | ||||
|  | ||||
|     if (d_track_pilot) | ||||
|         { | ||||
| @@ -200,6 +196,11 @@ GalileoE1DllPllVemlTrackingFpga::~GalileoE1DllPllVemlTrackingFpga() | ||||
| } | ||||
|  | ||||
|  | ||||
| void GalileoE1DllPllVemlTrackingFpga::stop_tracking() | ||||
| { | ||||
| } | ||||
|  | ||||
|  | ||||
| void GalileoE1DllPllVemlTrackingFpga::start_tracking() | ||||
| { | ||||
|     tracking_fpga_sc->start_tracking(); | ||||
|   | ||||
| @@ -71,7 +71,7 @@ public: | ||||
|  | ||||
|     inline size_t item_size() override | ||||
|     { | ||||
|         return item_size_; | ||||
|         return sizeof(int); | ||||
|     } | ||||
|  | ||||
|     void connect(gr::top_block_sptr top_block) override; | ||||
| @@ -101,7 +101,6 @@ public: | ||||
|  | ||||
| private: | ||||
|     dll_pll_veml_tracking_fpga_sptr tracking_fpga_sc; | ||||
|     size_t item_size_; | ||||
|     uint32_t channel_; | ||||
|     std::string role_; | ||||
|     uint32_t in_streams_; | ||||
|   | ||||
| @@ -114,6 +114,7 @@ GalileoE5aDllPllTrackingFpga::GalileoE5aDllPllTrackingFpga( | ||||
|     double carrier_lock_th = configuration->property(role + ".carrier_lock_th", 0.85); | ||||
|     if (FLAGS_carrier_lock_th != 0.85) carrier_lock_th = FLAGS_carrier_lock_th; | ||||
|     trk_param_fpga.carrier_lock_th = carrier_lock_th; | ||||
|     d_data_codes = nullptr; | ||||
|  | ||||
|     // FPGA configuration parameters | ||||
|     std::string default_device_name = "/dev/uio"; | ||||
| @@ -136,7 +137,6 @@ GalileoE5aDllPllTrackingFpga::GalileoE5aDllPllTrackingFpga( | ||||
|             d_data_codes = static_cast<int32_t *>(volk_gnsssdr_malloc((static_cast<uint32_t>(code_length_chips)) * code_samples_per_chip * GALILEO_E5A_NUMBER_OF_CODES * sizeof(int32_t), volk_gnsssdr_get_alignment())); | ||||
|         } | ||||
|  | ||||
|  | ||||
|     for (uint32_t PRN = 1; PRN <= GALILEO_E5A_NUMBER_OF_CODES; PRN++) | ||||
|         { | ||||
|             galileo_e5_a_code_gen_complex_primary(aux_code, PRN, const_cast<char *>(sig_)); | ||||
|   | ||||
| @@ -70,7 +70,7 @@ public: | ||||
|  | ||||
|     inline size_t item_size() override | ||||
|     { | ||||
|         return item_size_; | ||||
|         return sizeof(int) | ||||
|     } | ||||
|  | ||||
|     void connect(gr::top_block_sptr top_block) override; | ||||
| @@ -98,7 +98,6 @@ public: | ||||
|  | ||||
| private: | ||||
|     dll_pll_veml_tracking_fpga_sptr tracking_fpga_sc; | ||||
|     size_t item_size_; | ||||
|     uint32_t channel_; | ||||
|     std::string role_; | ||||
|     uint32_t in_streams_; | ||||
|   | ||||
| @@ -70,7 +70,7 @@ public: | ||||
|  | ||||
|     inline size_t item_size() override | ||||
|     { | ||||
|         return item_size_; | ||||
|         return sizeof(int); | ||||
|     } | ||||
|  | ||||
|     void connect(gr::top_block_sptr top_block) override; | ||||
| @@ -97,7 +97,6 @@ public: | ||||
|  | ||||
| private: | ||||
|     dll_pll_veml_tracking_fpga_sptr tracking_fpga_sc; | ||||
|     size_t item_size_; | ||||
|     uint32_t channel_; | ||||
|     std::string role_; | ||||
|     uint32_t in_streams_; | ||||
|   | ||||
| @@ -66,6 +66,18 @@ | ||||
| #define LOCAL_CODE_FPGA_ENABLE_WRITE_MEMORY 0x0C000000 | ||||
| #define TEST_REGISTER_TRACK_WRITEVAL 0x55AA | ||||
|  | ||||
| #ifndef TEMP_FAILURE_RETRY | ||||
| #define TEMP_FAILURE_RETRY(exp)              \ | ||||
|     ({                                       \ | ||||
|         decltype(exp) _rc;                   \ | ||||
|         do                                   \ | ||||
|             {                                \ | ||||
|                 _rc = (exp);                 \ | ||||
|             }                                \ | ||||
|         while (_rc == -1 && errno == EINTR); \ | ||||
|         _rc;                                 \ | ||||
|     }) | ||||
| #endif | ||||
|  | ||||
| Fpga_Multicorrelator_8sc::Fpga_Multicorrelator_8sc(int32_t n_correlators, | ||||
|     std::string device_name, uint32_t device_base, int32_t *ca_codes, int32_t *data_codes, uint32_t code_length_chips, bool track_pilot, | ||||
| @@ -95,6 +107,7 @@ Fpga_Multicorrelator_8sc::Fpga_Multicorrelator_8sc(int32_t n_correlators, | ||||
|         } | ||||
|     d_shifts_chips = nullptr; | ||||
|     d_prompt_data_shift = nullptr; | ||||
|     d_Prompt_Data = nullptr; | ||||
|     d_corr_out = nullptr; | ||||
|     d_code_length_chips = 0; | ||||
|     d_rem_code_phase_chips = 0; | ||||
| @@ -105,7 +118,8 @@ Fpga_Multicorrelator_8sc::Fpga_Multicorrelator_8sc(int32_t n_correlators, | ||||
|     d_phase_step_rad_int = 0; | ||||
|     d_initial_sample_counter = 0; | ||||
|     d_channel = 0; | ||||
|     d_correlator_length_samples = 0, | ||||
|     d_correlator_length_samples = 0; | ||||
|     d_code_phase_step_chips_num = 0; | ||||
|     d_code_length_chips = code_length_chips; | ||||
|     d_ca_codes = ca_codes; | ||||
|     d_data_codes = data_codes; | ||||
| @@ -119,6 +133,14 @@ Fpga_Multicorrelator_8sc::Fpga_Multicorrelator_8sc(int32_t n_correlators, | ||||
| Fpga_Multicorrelator_8sc::~Fpga_Multicorrelator_8sc() | ||||
| { | ||||
|     close_device(); | ||||
|     if (d_initial_index != nullptr) | ||||
|         { | ||||
|             volk_gnsssdr_free(d_initial_index); | ||||
|         } | ||||
|     if (d_initial_interp_counter != nullptr) | ||||
|         { | ||||
|             volk_gnsssdr_free(d_initial_interp_counter); | ||||
|         } | ||||
| } | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -98,7 +98,7 @@ private: | ||||
|     float *d_shifts_chips; | ||||
|     float *d_prompt_data_shift; | ||||
|     int32_t d_code_length_chips; | ||||
|     int32_t d_n_correlators; | ||||
|     int32_t d_n_correlators; // number of correlators | ||||
|  | ||||
|     // data related to the hardware module and the driver | ||||
|     int32_t d_device_descriptor;    // driver descriptor | ||||
| @@ -106,7 +106,6 @@ private: | ||||
|  | ||||
|     // configuration data received from the interface | ||||
|     uint32_t d_channel;       // channel number | ||||
|     uint32_t d_ncorrelators;  // number of correlators | ||||
|     uint32_t d_correlator_length_samples; | ||||
|     float d_rem_code_phase_chips; | ||||
|     float d_code_phase_step_chips; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Carles Fernandez
					Carles Fernandez