mirror of
				https://github.com/gnss-sdr/gnss-sdr
				synced 2025-10-31 07:13:03 +00:00 
			
		
		
		
	bugfixes: Add RTCM header creation for GLONASS satellites
Added code to enable RTCM header generation when in GLONASS. Also fixes bug to allow combined observations from GPS and GLONASS. Fix some code compilation warnings and unit tests.
This commit is contained in:
		| @@ -27,7 +27,7 @@ Resampler.item_type=gr_complex | ||||
| ;######### CHANNELS GLOBAL CONFIG ############ | ||||
| Channel.signal=1G | ||||
| Channels.in_acquisition=1 | ||||
| Channels_1G.count=5 | ||||
| Channels_1G.count=8 | ||||
|  | ||||
| Channel0.satellite=24   ; k= | ||||
| Channel1.satellite=1    ; k=1 | ||||
| @@ -45,7 +45,8 @@ Acquisition_1G.doppler_max=10000 | ||||
| Acquisition_1G.doppler_step=250 | ||||
| Acquisition_1G.dump=true; | ||||
| Acquisition_1G.dump_filename=/archive/glo_acquisition.dat | ||||
| ;Acquisition_1G.coherent_integration_time_ms=10 | ||||
| Acquisition_1G.coherent_integration_time_ms=1 | ||||
| ;Acquisition_1G.max_dwells = 5 | ||||
|  | ||||
| ;######### TRACKING GLOBAL CONFIG ############ | ||||
| Tracking_1G.implementation=GLONASS_L1_CA_DLL_PLL_Tracking | ||||
|   | ||||
| @@ -7,7 +7,7 @@ SignalSource.repeat=false | ||||
|  | ||||
| ;######### SIGNAL_SOURCE CONFIG ############ | ||||
| SignalSource0.implementation=File_Signal_Source | ||||
| SignalSource0.filename=/archive/NT1065_L1_20160923_fs6625e6_if0e3_schar.bin ; <- PUT YOUR FILE HERE | ||||
| SignalSource0.filename=/archive/NT1065_L1_20160923_fs6625e6_if60e3_schar.bin ; <- PUT YOUR FILE HERE | ||||
| SignalSource0.item_type=ibyte | ||||
| SignalSource0.sampling_frequency=6625000 | ||||
| SignalSource0.samples=0 | ||||
| @@ -25,8 +25,26 @@ SignalSource1.dump_filename=/archive/signal_glonass.bin | ||||
| ;######### SIGNAL_CONDITIONER CONFIG ############ | ||||
| SignalConditioner0.implementation=Signal_Conditioner | ||||
| DataTypeAdapter0.implementation=Ibyte_To_Complex | ||||
| InputFilter0.implementation=Pass_Through | ||||
| InputFilter0.implementation=Freq_Xlating_Fir_Filter | ||||
| InputFilter0.item_type=gr_complex | ||||
| InputFilter0.output_item_type=gr_complex | ||||
| InputFilter0.taps_item_type=float | ||||
| InputFilter0.number_of_taps=5 | ||||
| InputFilter0.number_of_bands=2 | ||||
| InputFilter0.band1_begin=0.0 | ||||
| InputFilter0.band1_end=0.70 | ||||
| InputFilter0.band2_begin=0.80 | ||||
| InputFilter0.band2_end=1.0 | ||||
| InputFilter0.ampl1_begin=1.0 | ||||
| InputFilter0.ampl1_end=1.0 | ||||
| InputFilter0.ampl2_begin=0.0 | ||||
| InputFilter0.ampl2_end=0.0 | ||||
| InputFilter0.band1_error=1.0 | ||||
| InputFilter0.band2_error=1.0 | ||||
| InputFilter0.filter_type=bandpass | ||||
| InputFilter0.grid_density=16 | ||||
| InputFilter0.sampling_frequency=6625000 | ||||
| InputFilter0.IF=60000 | ||||
| Resampler0.implementation=Direct_Resampler | ||||
| Resampler0.sample_freq_in=6625000 | ||||
| Resampler0.sample_freq_out=6625000 | ||||
|   | ||||
							
								
								
									
										93
									
								
								conf/gnss-sdr_GPS_L1_CA_ibyte.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								conf/gnss-sdr_GPS_L1_CA_ibyte.conf
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,93 @@ | ||||
| [GNSS-SDR] | ||||
|  | ||||
| ;######### GLOBAL OPTIONS ################## | ||||
| GNSS-SDR.internal_fs_hz=6625000 | ||||
|  | ||||
| ;######### SIGNAL_SOURCE CONFIG ############ | ||||
| SignalSource.implementation=File_Signal_Source | ||||
| SignalSource.filename=/archive/NT1065_L1_20160923_fs6625e6_if60e3_schar.bin ; <- PUT YOUR FILE HERE | ||||
| SignalSource.item_type=ibyte | ||||
| SignalSource.sampling_frequency=6625000 | ||||
| ;SignalSource.freq=0 | ||||
| ;SignalSource.samples=66250000 | ||||
| SignalSource.samples=0 | ||||
| SignalSource.dump=false; | ||||
|  | ||||
| ;######### SIGNAL_CONDITIONER CONFIG ############ | ||||
| SignalConditioner.implementation=Signal_Conditioner | ||||
| DataTypeAdapter.implementation=Ibyte_To_Complex | ||||
| InputFilter.implementation=Freq_Xlating_Fir_Filter | ||||
| InputFilter.item_type=gr_complex | ||||
| InputFilter.output_item_type=gr_complex | ||||
| InputFilter.taps_item_type=float | ||||
| InputFilter.number_of_taps=5 | ||||
| InputFilter.number_of_bands=2 | ||||
| InputFilter.band1_begin=0.0 | ||||
| InputFilter.band1_end=0.70 | ||||
| InputFilter.band2_begin=0.80 | ||||
| InputFilter.band2_end=1.0 | ||||
| InputFilter.ampl1_begin=1.0 | ||||
| InputFilter.ampl1_end=1.0 | ||||
| InputFilter.ampl2_begin=0.0 | ||||
| InputFilter.ampl2_end=0.0 | ||||
| InputFilter.band1_error=1.0 | ||||
| InputFilter.band2_error=1.0 | ||||
| InputFilter.filter_type=bandpass | ||||
| InputFilter.grid_density=16 | ||||
| InputFilter.sampling_frequency=6625000 | ||||
| InputFilter.IF=60000 | ||||
| Resampler.implementation=Direct_Resampler | ||||
| Resampler.sample_freq_in=6625000 | ||||
| Resampler.sample_freq_out=6625000 | ||||
| Resampler.item_type=gr_complex | ||||
|  | ||||
| ;######### CHANNELS GLOBAL CONFIG ############ | ||||
| Channel.signal=1C | ||||
| Channels.in_acquisition=1 | ||||
| Channels_1C.count=6 | ||||
|  | ||||
| ;######### ACQUISITION GLOBAL CONFIG ############ | ||||
| Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition | ||||
| Acquisition_1C.item_type=gr_complex | ||||
| Acquisition_1C.threshold=0.01 | ||||
| ;Acquisition_1C.pfa=0.00001 | ||||
| Acquisition_1C.if=0 | ||||
| Acquisition_1C.doppler_max=10000 | ||||
| Acquisition_1C.doppler_step=250 | ||||
| Acquisition_1C.dump=false; | ||||
| Acquisition_1C.dump_filename=/archive/gps_acquisition.dat | ||||
| ;Acquisition_1C.coherent_integration_time_ms=10 | ||||
|  | ||||
| ;######### TRACKING GLOBAL CONFIG ############ | ||||
| Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking | ||||
| Tracking_1C.item_type=gr_complex | ||||
| Tracking_1C.if=60000 | ||||
| Tracking_1C.early_late_space_chips=0.5 | ||||
| Tracking_1C.pll_bw_hz=25.0; | ||||
| Tracking_1C.dll_bw_hz=3.0; | ||||
| Tracking_1C.dump=false; | ||||
| Tracking_1C.dump_filename=/archive/gps_tracking_ch_ | ||||
|  | ||||
| ;######### TELEMETRY DECODER GPS CONFIG ############ | ||||
| TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder | ||||
|  | ||||
| ;######### OBSERVABLES CONFIG ############ | ||||
| Observables.implementation=Hybrid_Observables | ||||
| Observables.dump=true; | ||||
| Observables.dump_filename=/archive/gps_observables.dat | ||||
|  | ||||
| ;######### PVT CONFIG ############ | ||||
| PVT.implementation=RTKLIB_PVT | ||||
| PVT.positioning_mode=Single | ||||
| PVT.output_rate_ms=100 | ||||
| PVT.display_rate_ms=500 | ||||
| PVT.trop_model=Saastamoinen | ||||
| PVT.flag_rtcm_server=true | ||||
| PVT.flag_rtcm_tty_port=false | ||||
| PVT.rtcm_dump_devname=/dev/pts/1 | ||||
| PVT.rtcm_tcp_port=2101 | ||||
| PVT.rtcm_MT1019_rate_ms=5000 | ||||
| PVT.rtcm_MT1045_rate_ms=5000 | ||||
| PVT.rtcm_MT1097_rate_ms=1000 | ||||
| PVT.rtcm_MT1077_rate_ms=1000 | ||||
| PVT.rinex_version=2 | ||||
| @@ -1258,15 +1258,15 @@ int rtklib_pvt_cc::work (int noutput_items, gr_vector_const_void_star &input_ite | ||||
|                                                 { | ||||
|                                                     if(flag_write_RTCM_1020_output == true) | ||||
|                                                         { | ||||
|                                                             for(std::map<int,Glonass_Gnav_Ephemeris>::iterator glonass_gnav_ephemeris_iter = d_ls_pvt->glonass_gnav_ephemeris_map.begin(); glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.end(); glonass_gnav_ephemeris_iter++ ) | ||||
|                                                             for(std::map<int,Glonass_Gnav_Ephemeris>::const_iterator glonass_gnav_ephemeris_iter = d_ls_pvt->glonass_gnav_ephemeris_map.cbegin(); glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.cend(); glonass_gnav_ephemeris_iter++ ) | ||||
|                                                                 { | ||||
|                                                                     d_rtcm_printer->Print_Rtcm_MT1020(glonass_gnav_ephemeris_iter->second, d_ls_pvt->glonass_gnav_utc_model); | ||||
|                                                                 } | ||||
|                                                         } | ||||
|  | ||||
|                                                     std::map<int,Glonass_Gnav_Ephemeris>::iterator glo_gnav_ephemeris_iter = d_ls_pvt->glonass_gnav_ephemeris_map.begin(); | ||||
|                                                     std::map<int,Glonass_Gnav_Ephemeris>::const_iterator glo_gnav_ephemeris_iter = d_ls_pvt->glonass_gnav_ephemeris_map.cbegin(); | ||||
|  | ||||
|                                                     if (glo_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.end()) | ||||
|                                                     if (glo_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.cend()) | ||||
|                                                         { | ||||
|                                                             d_rtcm_printer->Print_Rtcm_MSM(7, {}, {}, {}, glo_gnav_ephemeris_iter->second, d_rx_time, gnss_observables_map, 0, 0, 0, 0, 0); | ||||
|                                                         } | ||||
| @@ -1276,14 +1276,14 @@ int rtklib_pvt_cc::work (int noutput_items, gr_vector_const_void_star &input_ite | ||||
|                                                 { | ||||
|                                                     if(flag_write_RTCM_1019_output == true) | ||||
|                                                         { | ||||
|                                                             for(gps_ephemeris_iter = d_ls_pvt->gps_ephemeris_map.begin(); gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.end(); gps_ephemeris_iter++ ) | ||||
|                                                             for(gps_ephemeris_iter = d_ls_pvt->gps_ephemeris_map.cbegin(); gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.cend(); gps_ephemeris_iter++ ) | ||||
|                                                                 { | ||||
|                                                                     d_rtcm_printer->Print_Rtcm_MT1019(gps_ephemeris_iter->second); | ||||
|                                                                 } | ||||
|                                                         } | ||||
|                                                     if(flag_write_RTCM_1020_output == true) | ||||
|                                                         { | ||||
|                                                             for(std::map<int,Glonass_Gnav_Ephemeris>::iterator glonass_gnav_ephemeris_iter = d_ls_pvt->glonass_gnav_ephemeris_map.begin(); glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.end(); glonass_gnav_ephemeris_iter++ ) | ||||
|                                                             for(std::map<int,Glonass_Gnav_Ephemeris>::const_iterator glonass_gnav_ephemeris_iter = d_ls_pvt->glonass_gnav_ephemeris_map.cbegin(); glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.cend(); glonass_gnav_ephemeris_iter++ ) | ||||
|                                                                 { | ||||
|                                                                     d_rtcm_printer->Print_Rtcm_MT1020(glonass_gnav_ephemeris_iter->second, d_ls_pvt->glonass_gnav_utc_model); | ||||
|                                                                 } | ||||
| @@ -1302,7 +1302,7 @@ int rtklib_pvt_cc::work (int noutput_items, gr_vector_const_void_star &input_ite | ||||
|                                                                                 { | ||||
|                                                                                     // This is a channel with valid GPS signal | ||||
|                                                                                     gps_ephemeris_iter = d_ls_pvt->gps_ephemeris_map.find(gnss_observables_iter->second.PRN); | ||||
|                                                                                     if (gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.end()) | ||||
|                                                                                     if (gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.cend()) | ||||
|                                                                                         { | ||||
|                                                                                             gps_channel = i; | ||||
|                                                                                         } | ||||
| @@ -1313,7 +1313,7 @@ int rtklib_pvt_cc::work (int noutput_items, gr_vector_const_void_star &input_ite | ||||
|                                                                             if(system.compare("R") == 0) | ||||
|                                                                                 { | ||||
|                                                                                     glonass_gnav_ephemeris_iter = d_ls_pvt->glonass_gnav_ephemeris_map.find(gnss_observables_iter->second.PRN); | ||||
|                                                                                     if (glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.end()) | ||||
|                                                                                     if (glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.cend()) | ||||
|                                                                                         { | ||||
|                                                                                             glo_channel = i; | ||||
|                                                                                         } | ||||
| @@ -1324,14 +1324,14 @@ int rtklib_pvt_cc::work (int noutput_items, gr_vector_const_void_star &input_ite | ||||
|                                                             if(flag_write_RTCM_MSM_output == true) | ||||
|                                                                 { | ||||
|  | ||||
|                                                                     if (glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.end()) | ||||
|                                                                     if (glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.cend()) | ||||
|                                                                         { | ||||
|                                                                             d_rtcm_printer->Print_Rtcm_MSM(7, {}, {}, {}, glonass_gnav_ephemeris_iter->second, d_rx_time, gnss_observables_map, 0, 0, 0, 0, 0); | ||||
|                                                                         } | ||||
|                                                                 } | ||||
|                                                             if(flag_write_RTCM_MSM_output == true) | ||||
|                                                                 { | ||||
|                                                                     if (gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.end()) | ||||
|                                                                     if (gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.cend()) | ||||
|                                                                         { | ||||
|                                                                             d_rtcm_printer->Print_Rtcm_MSM(7, gps_ephemeris_iter->second, {}, {}, {}, d_rx_time, gnss_observables_map, 0, 0, 0, 0, 0); | ||||
|                                                                         } | ||||
| @@ -1342,14 +1342,14 @@ int rtklib_pvt_cc::work (int noutput_items, gr_vector_const_void_star &input_ite | ||||
|                                                 { | ||||
|                                                     if(flag_write_RTCM_1020_output == true) | ||||
|                                                         { | ||||
|                                                             for(std::map<int,Glonass_Gnav_Ephemeris>::iterator glonass_gnav_ephemeris_iter = d_ls_pvt->glonass_gnav_ephemeris_map.begin(); glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.end(); glonass_gnav_ephemeris_iter++ ) | ||||
|                                                             for(std::map<int,Glonass_Gnav_Ephemeris>::const_iterator glonass_gnav_ephemeris_iter = d_ls_pvt->glonass_gnav_ephemeris_map.cbegin(); glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.cend(); glonass_gnav_ephemeris_iter++ ) | ||||
|                                                                 { | ||||
|                                                                     d_rtcm_printer->Print_Rtcm_MT1020(glonass_gnav_ephemeris_iter->second, d_ls_pvt->glonass_gnav_utc_model); | ||||
|                                                                 } | ||||
|                                                         } | ||||
|                                                     if(flag_write_RTCM_1045_output == true) | ||||
|                                                         { | ||||
|                                                             for(galileo_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.begin(); galileo_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.end(); galileo_ephemeris_iter++ ) | ||||
|                                                             for(galileo_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.cbegin(); galileo_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.cend(); galileo_ephemeris_iter++ ) | ||||
|                                                                 { | ||||
|                                                                     d_rtcm_printer->Print_Rtcm_MT1045(galileo_ephemeris_iter->second); | ||||
|                                                                 } | ||||
| @@ -1359,18 +1359,18 @@ int rtklib_pvt_cc::work (int noutput_items, gr_vector_const_void_star &input_ite | ||||
|                                                             //gps_ephemeris_iter = d_ls_pvt->gps_ephemeris_map.end(); | ||||
|                                                             //galileo_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.end(); | ||||
|                                                             unsigned int i = 0; | ||||
|                                                             for (gnss_observables_iter = gnss_observables_map.begin(); gnss_observables_iter != gnss_observables_map.end(); gnss_observables_iter++) | ||||
|                                                             for (gnss_observables_iter = gnss_observables_map.cbegin(); gnss_observables_iter != gnss_observables_map.cend(); gnss_observables_iter++) | ||||
|                                                                 { | ||||
|                                                                     std::string system(&gnss_observables_iter->second.System, 1); | ||||
|                                                                     if(gps_channel == 0) | ||||
|                                                                     if(gal_channel == 0) | ||||
|                                                                         { | ||||
|                                                                             if(system.compare("G") == 0) | ||||
|                                                                             if(system.compare("E") == 0) | ||||
|                                                                                 { | ||||
|                                                                                     // This is a channel with valid GPS signal | ||||
|                                                                                     gps_ephemeris_iter = d_ls_pvt->gps_ephemeris_map.find(gnss_observables_iter->second.PRN); | ||||
|                                                                                     if (gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.end()) | ||||
|                                                                                     galileo_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.find(gnss_observables_iter->second.PRN); | ||||
|                                                                                     if (galileo_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.cend()) | ||||
|                                                                                         { | ||||
|                                                                                             gps_channel = i; | ||||
|                                                                                     		gal_channel = i; | ||||
|                                                                                         } | ||||
|                                                                                 } | ||||
|                                                                         } | ||||
| @@ -1424,7 +1424,6 @@ int rtklib_pvt_cc::work (int noutput_items, gr_vector_const_void_star &input_ite | ||||
|                                                         } | ||||
|                                                     b_rtcm_writing_started = true; | ||||
|                                                 } | ||||
|  | ||||
|                                             if((type_of_rx == 4) || (type_of_rx == 5) || (type_of_rx == 6) || (type_of_rx == 14) || (type_of_rx == 15)) // Galileo | ||||
|                                                 { | ||||
|                                                     for(std::map<int,Galileo_Ephemeris>::const_iterator gal_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.cbegin(); gal_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.cend(); gal_ephemeris_iter++ ) | ||||
| @@ -1514,6 +1513,140 @@ int rtklib_pvt_cc::work (int noutput_items, gr_vector_const_void_star &input_ite | ||||
|                                                         } | ||||
|                                                     b_rtcm_writing_started = true; | ||||
|                                                 } | ||||
|                                             if((type_of_rx == 23) || (type_of_rx == 24) || (type_of_rx == 25)) // GLONASS | ||||
| 												{ | ||||
| 													for(std::map<int,Glonass_Gnav_Ephemeris>::const_iterator glonass_gnav_ephemeris_iter = d_ls_pvt->glonass_gnav_ephemeris_map.cbegin(); glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.cend(); glonass_gnav_ephemeris_iter++ ) | ||||
| 														{ | ||||
| 															d_rtcm_printer->Print_Rtcm_MT1020(glonass_gnav_ephemeris_iter->second, d_ls_pvt->glonass_gnav_utc_model); | ||||
| 														} | ||||
|  | ||||
| 													std::map<int,Glonass_Gnav_Ephemeris>::const_iterator glo_gnav_ephemeris_iter = d_ls_pvt->glonass_gnav_ephemeris_map.cbegin(); | ||||
|  | ||||
| 													if (glo_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.cend()) | ||||
| 														{ | ||||
| 															d_rtcm_printer->Print_Rtcm_MSM(7, {}, {}, {}, glo_gnav_ephemeris_iter->second, d_rx_time, gnss_observables_map, 0, 0, 0, 0, 0); | ||||
| 														} | ||||
| 													b_rtcm_writing_started = true; | ||||
| 												} | ||||
|                                             if(type_of_rx == 26) // GPS L1 C/A + GLONASS L1 C/A | ||||
|                                                 { | ||||
|                                             		if(d_rtcm_MT1019_rate_ms != 0) // allows deactivating messages by setting rate = 0 | ||||
|                                                         { | ||||
|                                                             for(gps_ephemeris_iter = d_ls_pvt->gps_ephemeris_map.cbegin(); gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.cend(); gps_ephemeris_iter++ ) | ||||
|                                                                 { | ||||
|                                                                     d_rtcm_printer->Print_Rtcm_MT1019(gps_ephemeris_iter->second); | ||||
|                                                                 } | ||||
|                                                         } | ||||
|                                             		if(d_rtcm_MT1020_rate_ms != 0) // allows deactivating messages by setting rate = 0 | ||||
|                                                         { | ||||
|                                                             for(std::map<int,Glonass_Gnav_Ephemeris>::const_iterator glonass_gnav_ephemeris_iter = d_ls_pvt->glonass_gnav_ephemeris_map.cbegin(); glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.cend(); glonass_gnav_ephemeris_iter++ ) | ||||
|                                                                 { | ||||
|                                                                     d_rtcm_printer->Print_Rtcm_MT1020(glonass_gnav_ephemeris_iter->second, d_ls_pvt->glonass_gnav_utc_model); | ||||
|                                                                 } | ||||
|                                                         } | ||||
|  | ||||
| 													//gps_ephemeris_iter = d_ls_pvt->gps_ephemeris_map.end(); | ||||
| 													//galileo_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.end(); | ||||
| 													unsigned int i = 0; | ||||
| 													for (gnss_observables_iter = gnss_observables_map.cbegin(); gnss_observables_iter != gnss_observables_map.cend(); gnss_observables_iter++) | ||||
| 														{ | ||||
| 															std::string system(&gnss_observables_iter->second.System, 1); | ||||
| 															if(gps_channel == 0) | ||||
| 																{ | ||||
| 																	if(system.compare("G") == 0) | ||||
| 																		{ | ||||
| 																			// This is a channel with valid GPS signal | ||||
| 																			gps_ephemeris_iter = d_ls_pvt->gps_ephemeris_map.find(gnss_observables_iter->second.PRN); | ||||
| 																			if (gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.cend()) | ||||
| 																				{ | ||||
| 																					gps_channel = i; | ||||
| 																				} | ||||
| 																		} | ||||
| 																} | ||||
| 															if(glo_channel == 0) | ||||
| 																{ | ||||
| 																	if(system.compare("R") == 0) | ||||
| 																		{ | ||||
| 																			glonass_gnav_ephemeris_iter = d_ls_pvt->glonass_gnav_ephemeris_map.find(gnss_observables_iter->second.PRN); | ||||
| 																			if (glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.cend()) | ||||
| 																				{ | ||||
| 																					glo_channel = i; | ||||
| 																				} | ||||
| 																		} | ||||
| 																} | ||||
| 															i++; | ||||
| 														} | ||||
| 													if (glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.cend()) | ||||
| 														{ | ||||
| 															d_rtcm_printer->Print_Rtcm_MSM(7, {}, {}, {}, glonass_gnav_ephemeris_iter->second, d_rx_time, gnss_observables_map, 0, 0, 0, 0, 0); | ||||
| 														} | ||||
|  | ||||
| 													if (gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.cend()) | ||||
| 														{ | ||||
| 															d_rtcm_printer->Print_Rtcm_MSM(7, gps_ephemeris_iter->second, {}, {}, {}, d_rx_time, gnss_observables_map, 0, 0, 0, 0, 0); | ||||
| 														} | ||||
|  | ||||
| 													b_rtcm_writing_started = true; | ||||
|  | ||||
|                                                 } | ||||
|                                             if(type_of_rx == 27) // GLONASS L1 C/A + Galileo E1B | ||||
| 												{ | ||||
|                                         			if(d_rtcm_MT1020_rate_ms != 0) // allows deactivating messages by setting rate = 0 | ||||
| 														{ | ||||
| 															for(std::map<int,Glonass_Gnav_Ephemeris>::const_iterator glonass_gnav_ephemeris_iter = d_ls_pvt->glonass_gnav_ephemeris_map.cbegin(); glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.cend(); glonass_gnav_ephemeris_iter++ ) | ||||
| 																{ | ||||
| 																	d_rtcm_printer->Print_Rtcm_MT1020(glonass_gnav_ephemeris_iter->second, d_ls_pvt->glonass_gnav_utc_model); | ||||
| 																} | ||||
| 														} | ||||
|                                             		if(d_rtcm_MT1045_rate_ms != 0) // allows deactivating messages by setting rate = 0 | ||||
| 														{ | ||||
| 															for(galileo_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.cbegin(); galileo_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.cend(); galileo_ephemeris_iter++ ) | ||||
| 																{ | ||||
| 																	d_rtcm_printer->Print_Rtcm_MT1045(galileo_ephemeris_iter->second); | ||||
| 																} | ||||
| 														} | ||||
|  | ||||
| 													unsigned int i = 0; | ||||
| 													for (gnss_observables_iter = gnss_observables_map.cbegin(); gnss_observables_iter != gnss_observables_map.cend(); gnss_observables_iter++) | ||||
| 														{ | ||||
| 															std::string system(&gnss_observables_iter->second.System, 1); | ||||
| 															if(gal_channel == 0) | ||||
| 																{ | ||||
| 																	if(system.compare("E") == 0) | ||||
| 																		{ | ||||
| 																			// This is a channel with valid GPS signal | ||||
| 																			galileo_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.find(gnss_observables_iter->second.PRN); | ||||
| 																			if (galileo_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.cend()) | ||||
| 																				{ | ||||
| 																					gal_channel = i; | ||||
| 																				} | ||||
| 																		} | ||||
| 																} | ||||
| 															if(glo_channel == 0) | ||||
| 																{ | ||||
| 																	if(system.compare("R") == 0) | ||||
| 																		{ | ||||
| 																			glonass_gnav_ephemeris_iter = d_ls_pvt->glonass_gnav_ephemeris_map.find(gnss_observables_iter->second.PRN); | ||||
| 																			if (glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.end()) | ||||
| 																				{ | ||||
| 																					glo_channel = i; | ||||
| 																				} | ||||
| 																		} | ||||
| 																} | ||||
| 															i++; | ||||
| 														} | ||||
| 													if (galileo_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.end()) | ||||
| 														{ | ||||
| 															d_rtcm_printer->Print_Rtcm_MSM(7, {}, {}, galileo_ephemeris_iter->second, {}, d_rx_time, gnss_observables_map, 0, 0, 0, 0, 0); | ||||
| 														} | ||||
| 													if (glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.end()) | ||||
| 														{ | ||||
| 															d_rtcm_printer->Print_Rtcm_MSM(7, {}, {}, {}, glonass_gnav_ephemeris_iter->second, d_rx_time, gnss_observables_map, 0, 0, 0, 0, 0); | ||||
| 														} | ||||
|  | ||||
|  | ||||
| 												} | ||||
|  | ||||
|                                         } | ||||
|                                 } | ||||
|                         } | ||||
|   | ||||
| @@ -35,6 +35,7 @@ | ||||
| #include <cstring>  // for memcpy | ||||
| #include <gnuradio/io_signature.h> | ||||
| #include "control_message_factory.h" | ||||
| #include <glog/logging.h> | ||||
|  | ||||
| gnss_sdr_valve::gnss_sdr_valve (size_t sizeof_stream_item, | ||||
|         unsigned long long nitems, | ||||
| @@ -61,6 +62,7 @@ int gnss_sdr_valve::work (int noutput_items, | ||||
|         { | ||||
|             ControlMessageFactory* cmf = new ControlMessageFactory(); | ||||
|             d_queue->handle(cmf->GetQueueMessage(200,0)); | ||||
|             LOG(INFO) << "Stoping reciver, "<< d_ncopied_items << " samples processed"; | ||||
|             delete cmf; | ||||
|             return -1;    // Done! | ||||
|         } | ||||
|   | ||||
| @@ -106,6 +106,7 @@ glonass_l1_ca_telemetry_decoder_cc::glonass_l1_ca_telemetry_decoder_cc( | ||||
|  | ||||
|     d_flag_parity = false; | ||||
|     d_TOW_at_current_symbol = 0; | ||||
|     Flag_valid_word = false; | ||||
|     delta_t = 0; | ||||
|     d_CRC_error_counter = 0; | ||||
|     d_flag_preamble = false; | ||||
|   | ||||
| @@ -83,7 +83,6 @@ private: | ||||
|     unsigned short int d_preambles_bits[GLONASS_GNAV_PREAMBLE_LENGTH_BITS]; | ||||
|     int *d_preambles_symbols; | ||||
|     unsigned int d_samples_per_symbol; | ||||
|     unsigned int d_samples_per_preamble_symbol; | ||||
|     int d_symbols_per_preamble; | ||||
|  | ||||
|     //!< Storage for incoming data | ||||
|   | ||||
| @@ -74,18 +74,19 @@ TEST(GlonassGnavEphemerisTest, ConvertGlonassT2GpsT1) | ||||
|     gnav_eph.d_yr = 2004; | ||||
|     gnav_eph.d_N_T = 366+28; | ||||
|  | ||||
|     double tod = 70200; | ||||
|     double glo2utc = 3600*3; | ||||
|     double tod = 48600; | ||||
|     double week = 0.0; | ||||
|     double tow = 0.0; | ||||
|     double true_leap_sec = 13; | ||||
|     double true_week = 1307; | ||||
|     double true_tow = 480600+true_leap_sec; | ||||
|  | ||||
| 	gnav_eph.glot_to_gpst(tod, 0.0, 0.0, &week, &tow); | ||||
| 	gnav_eph.glot_to_gpst(tod + glo2utc, 0.0, 0.0, &week, &tow); | ||||
|  | ||||
|     // Perform assertions of decoded fields | ||||
| 	ASSERT_TRUE(week - true_week < FLT_EPSILON ); | ||||
| 	ASSERT_TRUE(tow - true_week < FLT_EPSILON ); | ||||
| 	ASSERT_TRUE(tow - true_tow < FLT_EPSILON ); | ||||
| } | ||||
|  | ||||
| /*! | ||||
| @@ -98,18 +99,19 @@ TEST(GlonassGnavEphemerisTest, ConvertGlonassT2GpsT2) | ||||
|     gnav_eph.d_yr = 2016; | ||||
|     gnav_eph.d_N_T = 268; | ||||
|  | ||||
|     double glo2utc = 3600*3; | ||||
|     double tod = 7560; | ||||
|     double week = 0.0; | ||||
|     double tow = 0.0; | ||||
|     double true_leap_sec = 13; | ||||
|     double true_leap_sec = 17; | ||||
|     double true_week = 1915; | ||||
|     double true_tow = 480600+true_leap_sec; | ||||
|     double true_tow = 518400+true_leap_sec+tod; | ||||
|  | ||||
| 	gnav_eph.glot_to_gpst(tod, 0.0, 0.0, &week, &tow); | ||||
| 	gnav_eph.glot_to_gpst(tod + glo2utc, 0.0, 0.0, &week, &tow); | ||||
|  | ||||
|     // Perform assertions of decoded fields | ||||
| 	ASSERT_TRUE(week - true_week < FLT_EPSILON ); | ||||
| 	ASSERT_TRUE(tow - true_week < FLT_EPSILON ); | ||||
| 	ASSERT_TRUE(tow - true_tow < FLT_EPSILON ); | ||||
| } | ||||
|  | ||||
| /*! | ||||
| @@ -122,16 +124,17 @@ TEST(GlonassGnavEphemerisTest, ConvertGlonassT2GpsT3) | ||||
|     gnav_eph.d_yr = 2016; | ||||
|     gnav_eph.d_N_T = 62; | ||||
|  | ||||
|     double tod = 7560 + 6*3600; | ||||
|     double glo2utc = 3600*3; | ||||
|     double tod = 7560; | ||||
|     double week = 0.0; | ||||
|     double tow = 0.0; | ||||
|     double true_leap_sec = 13; | ||||
|     double true_week = 1307; | ||||
|     double true_tow = 480600+true_leap_sec; | ||||
|     double true_leap_sec = 17; | ||||
|     double true_week = 1886; | ||||
|     double true_tow = 259200+true_leap_sec; | ||||
|  | ||||
| 	gnav_eph.glot_to_gpst(tod, 0.0, 0.0, &week, &tow); | ||||
| 	gnav_eph.glot_to_gpst(tod + glo2utc, 0.0, 0.0, &week, &tow); | ||||
|  | ||||
|     // Perform assertions of decoded fields | ||||
| 	ASSERT_TRUE(week - true_week < FLT_EPSILON ); | ||||
| 	ASSERT_TRUE(tow - true_week < FLT_EPSILON ); | ||||
| 	ASSERT_TRUE(tow - true_tow < FLT_EPSILON ); | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Damian Miralles
					Damian Miralles