49 uint32_t code_length_chips,
51 uint32_t code_samples_per_chip);
67 float *shifts_chips,
float *prompt_data_shift, int32_t PRN);
78 float rem_carrier_phase_in_rad,
80 float carrier_phase_rate_step_rad,
81 float rem_code_phase_chips,
82 float code_phase_step_chips,
83 float code_phase_rate_step_chips,
84 int32_t signal_length_samples);
94 void open_channel(
const std::string &device_io_name, uint32_t channel);
155 static const uint32_t code_phase_step_chips_num_reg_addr = 0;
156 static const uint32_t initial_index_reg_base_addr = 1;
157 static const uint32_t initial_interp_counter_reg_base_addr = 7;
158 static const uint32_t nsamples_minus_1_reg_addr = 13;
159 static const uint32_t code_length_minus_1_reg_addr = 14;
160 static const uint32_t rem_carr_phase_rad_reg_addr = 15;
161 static const uint32_t phase_step_rad_reg_addr = 16;
162 static const uint32_t prog_mems_addr = 17;
163 static const uint32_t drop_samples_reg_addr = 18;
164 static const uint32_t initial_counter_value_reg_addr_lsw = 19;
165 static const uint32_t initial_counter_value_reg_addr_msw = 20;
166 static const uint32_t code_phase_step_chips_rate_reg_addr = 21;
167 static const uint32_t phase_step_rate_reg_addr = 22;
168 static const uint32_t stop_tracking_reg_addr = 23;
169 static const uint32_t secondary_code_lengths_reg_addr = 25;
170 static const uint32_t prog_secondary_code_0_data_reg_addr = 26;
171 static const uint32_t prog_secondary_code_1_data_reg_addr = 27;
172 static const uint32_t first_prn_length_minus_1_reg_addr = 28;
173 static const uint32_t next_prn_length_minus_1_reg_addr = 29;
174 static const uint32_t start_flag_addr = 30;
176 static const uint32_t test_reg_addr = 31;
178 static const uint32_t result_reg_real_base_addr = 1;
179 static const uint32_t result_reg_imag_base_addr = 7;
180 static const uint32_t sample_counter_reg_addr_lsw = 13;
181 static const uint32_t sample_counter_reg_addr_msw = 14;
183 static const uint32_t secondary_code_word_size = 20;
184 static const uint32_t secondary_code_wr_strobe = 0x800000;
185 static const uint32_t secondary_code_addr_bits = 0x100000;
186 static const uint32_t drop_samples = 1;
187 static const uint32_t enable_secondary_code = 2;
188 static const uint32_t init_secondary_code_addresses = 4;
189 static const uint32_t FPGA_PAGE_SIZE = 0x1000;
190 static const uint32_t max_code_resampler_counter = 1 << 31;
191 static const uint32_t local_code_fpga_clear_address_counter = 0x10000000;
192 static const uint32_t test_register_track_writeval = 0x55AA;
195 uint32_t fpga_acquisition_test_register(uint32_t writeval);
196 void fpga_configure_tracking_gps_local_code(int32_t PRN);
197 void fpga_compute_code_shift_parameters();
198 void fpga_configure_code_parameters_in_fpga();
199 void fpga_compute_signal_parameters_in_fpga();
200 void fpga_configure_signal_parameters_in_fpga();
201 void fpga_launch_multicorrelator_fpga();
202 void read_tracking_gps_results();
203 void close_device(
void);
204 void write_secondary_code(uint32_t secondary_code_length, std::string *secondary_code_string, uint32_t reg_addr);
206 volk_gnsssdr::vector<uint32_t> d_initial_index;
207 volk_gnsssdr::vector<uint32_t> d_initial_interp_counter;
209 uint64_t d_initial_sample_counter;
211 gr_complex *d_corr_out;
212 gr_complex *d_Prompt_Data;
214 float *d_shifts_chips;
215 float *d_prompt_data_shift;
217 float d_rem_code_phase_chips;
218 float d_code_phase_step_chips;
219 float d_code_phase_rate_step_chips;
220 float d_rem_carrier_phase_in_rad;
221 float d_phase_step_rad;
222 float d_carrier_phase_rate_step_rad;
224 uint32_t d_code_length_samples;
225 uint32_t d_n_correlators;
228 int32_t d_device_descriptor;
229 volatile uint32_t *d_map_base;
232 uint32_t d_correlator_length_samples;
234 uint32_t d_code_phase_step_chips_num;
235 uint32_t d_code_phase_rate_step_chips_num;
236 int32_t d_rem_carr_phase_rad_int;
237 int32_t d_phase_step_rad_int;
238 int32_t d_carrier_phase_rate_step_rad_int;
242 int32_t *d_data_codes;
245 uint32_t d_secondary_code_0_length;
246 uint32_t d_secondary_code_1_length;
249 bool d_secondary_code_enabled;