From 146e1d7a63356dd36416a9689534ac0421d7d9ee Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Mon, 22 Feb 2021 13:42:54 +0100 Subject: [PATCH] Update .proto files for GPS and Galileo ephemeris data --- docs/protobuf/galileo_ephemeris.proto | 53 ++++++ docs/protobuf/gps_ephemeris.proto | 57 ++++++ docs/protobuf/monitor_galileo_ephemeris.proto | 55 ------ docs/protobuf/monitor_gps_ephemeris.proto | 49 ----- src/algorithms/PVT/libs/CMakeLists.txt | 15 +- src/algorithms/PVT/libs/serdes_galileo_eph.h | 165 ++++++++--------- src/algorithms/PVT/libs/serdes_gps_eph.h | 168 +++++++++--------- .../pvt/serdes_monitor_pvt_test.cc | 2 +- 8 files changed, 284 insertions(+), 280 deletions(-) create mode 100644 docs/protobuf/galileo_ephemeris.proto create mode 100644 docs/protobuf/gps_ephemeris.proto delete mode 100644 docs/protobuf/monitor_galileo_ephemeris.proto delete mode 100644 docs/protobuf/monitor_gps_ephemeris.proto diff --git a/docs/protobuf/galileo_ephemeris.proto b/docs/protobuf/galileo_ephemeris.proto new file mode 100644 index 000000000..73b456106 --- /dev/null +++ b/docs/protobuf/galileo_ephemeris.proto @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: BSD-3-Clause +// SPDX-FileCopyrightText: 2018-2021 Carles Fernandez-Prades +syntax = "proto3"; + +package gnss_sdr; + +message GalileoEphemeris { + int32 PRN = 1; // SV ID + double M_0 = 2; // Mean anomaly at reference time [semi-circles] + double delta_n = 3; // Mean motion difference from computed value [semi-circles/sec] + double ecc = 4; // Eccentricity + double sqrtA = 5; // Square root of the semi-major axis [meters^1/2] + double OMEGA_0 = 6; // Longitude of ascending node of orbital plane at weekly epoch [semi-circles] + double i_0 = 7; // Inclination angle at reference time [semi-circles] + double omega = 8; // Argument of perigee [semi-circles] + double OMEGAdot = 9; // Rate of right ascension [semi-circles/sec] + double idot = 10; // Rate of inclination angle [semi-circles/sec] + double Cuc = 11; // Amplitude of the cosine harmonic correction term to the argument of latitude [radians] + double Cus = 12; // Amplitude of the sine harmonic correction term to the argument of latitude [radians] + double Crc = 13; // Amplitude of the cosine harmonic correction term to the orbit radius [meters] + double Crs = 14; // Amplitude of the sine harmonic correction term to the orbit radius [meters] + double Cic = 15; // Amplitude of the cosine harmonic correction term to the angle of inclination [radians] + double Cis = 16; // Amplitude of the sine harmonic correction term to the angle of inclination [radians] + int32 toe = 17; // Ephemeris reference time [s] + + // Clock correction parameters + int32 toc = 18; // Clock correction data reference Time of Week [sec] + double af0 = 19; // SV clock bias correction coefficient [s] + double af1 = 20; // SV clock drift correction coefficient [s/s] + double af2 = 21; // SV clock drift rate correction coefficient [s/s^2] + + double satClkDrift = 22; // SV clock drift + double dtr = 23; // Relativistic clock correction term + + // Time + int32 WN = 24; // Week number + int32 tow = 25; // Time of Week + + // Galileo-specific parameters + int32 IOD_ephemeris = 26; + int32 IOD_nav = 27; + + // SV status + int32 SISA = 28; // Signal in space accuracy index + int32 E5a_HS = 29; // E5a Signal Health Status + int32 E5b_HS = 30; // E5b Signal Health Status + int32 E1B_HS = 31; // E1B Signal Health Status + bool E5a_DVS = 32; // E5a Data Validity Status + bool E5b_DVS = 33; // E5b Data Validity Status + bool E1B_DVS = 34; // E1B Data Validity Status + double BGD_E1E5a = 35; // E1-E5a Broadcast Group Delay [s] + double BGD_E1E5b = 36; // E1-E5b Broadcast Group Delay [s] +} diff --git a/docs/protobuf/gps_ephemeris.proto b/docs/protobuf/gps_ephemeris.proto new file mode 100644 index 000000000..1dd5dd80d --- /dev/null +++ b/docs/protobuf/gps_ephemeris.proto @@ -0,0 +1,57 @@ +// SPDX-License-Identifier: BSD-3-Clause +// SPDX-FileCopyrightText: 2018-2021 Carles Fernandez-Prades +syntax = "proto3"; + +package gnss_sdr; + +message GpsEphemeris { + int32 PRN = 1; // SV ID + double M_0 = 2; // Mean anomaly at reference time [semi-circles] + double delta_n = 3; // Mean motion difference from computed value [semi-circles/sec] + double ecc = 4; // Eccentricity + double sqrtA = 5; // Square root of the semi-major axis [meters^1/2] + double OMEGA_0 = 6; // Longitude of ascending node of orbital plane at weekly epoch [semi-circles] + double i_0 = 7; // Inclination angle at reference time [semi-circles] + double omega = 8; // Argument of perigee [semi-circles] + double OMEGAdot = 9; // Rate of right ascension [semi-circles/sec] + double idot = 10; // Rate of inclination angle [semi-circles/sec] + double Cuc = 11; // Amplitude of the cosine harmonic correction term to the argument of latitude [radians] + double Cus = 12; // Amplitude of the sine harmonic correction term to the argument of latitude [radians] + double Crc = 13; // Amplitude of the cosine harmonic correction term to the orbit radius [meters] + double Crs = 14; // Amplitude of the sine harmonic correction term to the orbit radius [meters] + double Cic = 15; // Amplitude of the cosine harmonic correction term to the angle of inclination [radians] + double Cis = 16; // Amplitude of the sine harmonic correction term to the angle of inclination [radians] + int32 toe = 17; // Ephemeris reference time [s] + + // Clock correction parameters + int32 toc = 18; // Clock correction data reference Time of Week [sec] + double af0 = 19; // SV clock bias correction coefficient [s] + double af1 = 20; // SV clock drift correction coefficient [s/s] + double af2 = 21; // SV clock drift rate correction coefficient [s/s^2] + + double satClkDrift = 22; // SV clock drift + double dtr = 23; // Relativistic clock correction term + + // Time + int32 WN = 24; // Week number + int32 tow = 25; // Time of Week + + // GPS-specific parameters + int32 code_on_L2 = 26; // If 1, P code ON in L2; if 2, C/A code ON in L2; + bool L2_P_data_flag = 27; // When true, indicates that the NAV data stream was commanded OFF on the P-code of the L2 channel + int32 SV_accuracy = 28; // User Range Accuracy (URA) index of the SV (reference paragraph 6.2.1) for the standard positioning service user (Ref 20.3.3.3.1.3 IS-GPS-200L) + int32 SV_health = 29; // Satellite heath status + double TGD = 30; // Estimated Group Delay Differential: L1-L2 correction term only for the benefit of "L1 P(Y)" or "L2 P(Y)" s users [s] + int32 IODC = 31; // Issue of Data, Clock + int32 IODE_SF2 = 32; // Issue of Data, Ephemeris (IODE), subframe 2 + int32 IODE_SF3 = 33; // Issue of Data, Ephemeris (IODE), subframe 3 + int32 AODO = 34; // 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 fit_interval_flag = 35; // 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. + double spare1 = 36; + double spare2 = 37; + + bool integrity_status_flag = 38; + bool alert_flag = 39; // If true, indicates that the SV URA may be worse than indicated in d_SV_accuracy, use that SV at our own risk. + bool antispoofing_flag = 40; // If true, the AntiSpoofing mode is ON in that SV +} diff --git a/docs/protobuf/monitor_galileo_ephemeris.proto b/docs/protobuf/monitor_galileo_ephemeris.proto deleted file mode 100644 index 7880948b5..000000000 --- a/docs/protobuf/monitor_galileo_ephemeris.proto +++ /dev/null @@ -1,55 +0,0 @@ -// SPDX-License-Identifier: BSD-3-Clause -// SPDX-FileCopyrightText: 2018-2020 Carles Fernandez-Prades -syntax = "proto3"; - -package gnss_sdr; - -message MonitorGalileoEphemeris { - /* Galileo ephemeris are 16 parameters and here are reported following the ICD order, paragraph 5.1.1. - The number in the name after underscore (_1, _2, _3 and so on) refers to the page were we can find that parameter */ - int32 IOD_ephemeris=1; - int32 IOD_nav_1=2; - double M0_1=3; //!< Mean anomaly at reference time [semi-circles] - double delta_n_3=4; //!< Mean motion difference from computed value [semi-circles/sec] - double e_1=5; //!< Eccentricity - double A_1=6; //!< Square root of the semi-major axis [meters^1/2] - double OMEGA_0_2=7; //!< Longitude of ascending node of orbital plane at weekly epoch [semi-circles] - double i_0_2=8; //!< Inclination angle at reference time [semi-circles] - double omega_2=9; //!< Argument of perigee [semi-circles] - double OMEGA_dot_3=10; //!< Rate of right ascension [semi-circles/sec] - double iDot_2=11; //!< Rate of inclination angle [semi-circles/sec] - double C_uc_3=12; //!< Amplitude of the cosine harmonic correction term to the argument of latitude [radians] - double C_us_3=13; //!< Amplitude of the sine harmonic correction term to the argument of latitude [radians] - double C_rc_3=14; //!< Amplitude of the cosine harmonic correction term to the orbit radius [meters] - double C_rs_3=15; //!< Amplitude of the sine harmonic correction term to the orbit radius [meters] - double C_ic_4=16; //!< Amplitude of the cosine harmonic correction term to the angle of inclination [radians] - double C_is_4=17; //!< Amplitude of the sine harmonic correction term to the angle of inclination [radians] - uint32 d_Toe=18; // Ephemeris reference time - - /*Clock correction parameters*/ - uint32 d_Toc=19; // Clock correction data reference Time of Week - double af0_4=20; //!< SV clock bias correction coefficient [s] - double af1_4=21; //!< SV clock drift correction coefficient [s/s] - double af2_4=22; //!< SV clock drift rate correction coefficient [s/s^2] - - /*GST*/ - // Not belong to ephemeris set (page 1 to 4) - int32 WN_5=23; //!< Week number - int32 TOW_5=24; //!< Time of Week - double Galileo_satClkDrift=25; - double Galileo_dtr=26; //!< relativistic clock correction term - - // SV status - int32 SISA_3=27; - int32 E5a_HS=28; //!< E5a Signal Health Status - int32 E5b_HS_5=29; //!< E5b Signal Health Status - int32 E1B_HS_5=30; //!< E1B Signal Health Status - bool E5a_DVS=31; //!< E5a Data Validity Status - bool E5b_DVS_5=32; //!< E5b Data Validity Status - bool E1B_DVS_5=33; //!< E1B Data Validity Status - - double BGD_E1E5a_5=34; //!< E1-E5a Broadcast Group Delay [s] - double BGD_E1E5b_5=35; //!< E1-E5b Broadcast Group Delay [s] - - int32 i_satellite_PRN=36; //!< SV PRN NUMBER -} diff --git a/docs/protobuf/monitor_gps_ephemeris.proto b/docs/protobuf/monitor_gps_ephemeris.proto deleted file mode 100644 index 66896255c..000000000 --- a/docs/protobuf/monitor_gps_ephemeris.proto +++ /dev/null @@ -1,49 +0,0 @@ -// SPDX-License-Identifier: BSD-3-Clause -// SPDX-FileCopyrightText: 2018-2020 Carles Fernandez-Prades -syntax = "proto3"; - -package gnss_sdr; - -message MonitorGpsEphemeris { - uint32 i_satellite_PRN=1; // SV PRN NUMBER - double d_TOW=2; //!< Time of GPS Week of the ephemeris set (taken from subframes TOW) [s] - double d_Crs=3; //!< Amplitude of the Sine Harmonic Correction Term to the Orbit Radius [m] - double d_Delta_n=4; //!< Mean Motion Difference From Computed Value [semi-circles/s] - double d_M_0=5; //!< Mean Anomaly at Reference Time [semi-circles] - double d_Cuc=6; //!< Amplitude of the Cosine Harmonic Correction Term to the Argument of Latitude [rad] - double d_e_eccentricity=7; //!< Eccentricity [dimensionless] - double d_Cus=8; //!< Amplitude of the Sine Harmonic Correction Term to the Argument of Latitude [rad] - double d_sqrt_A=9; //!< Square Root of the Semi-Major Axis [sqrt(m)] - uint32 d_Toe=10; //!< Ephemeris data reference time of week (Ref. 20.3.3.4.3 IS-GPS-200K) [s] - uint32 d_Toc=11; //!< clock data reference time (Ref. 20.3.3.3.3.1 IS-GPS-200K) [s] - double d_Cic=12; //!< Amplitude of the Cosine Harmonic Correction Term to the Angle of Inclination [rad] - double d_OMEGA0=13; //!< Longitude of Ascending Node of Orbit Plane at Weekly Epoch [semi-circles] - double d_Cis=14; //!< Amplitude of the Sine Harmonic Correction Term to the Angle of Inclination [rad] - double d_i_0=15; //!< Inclination Angle at Reference Time [semi-circles] - double d_Crc=16; //!< Amplitude of the Cosine Harmonic Correction Term to the Orbit Radius [m] - double d_OMEGA=17; //!< Argument of Perigee [semi-cicles] - double d_OMEGA_DOT=18; //!< Rate of Right Ascension [semi-circles/s] - double d_IDOT=19; //!< Rate of Inclination Angle [semi-circles/s] - int32 i_code_on_L2=20; //!< If 1, P code ON in L2; if 2, C/A code ON in L2; - int32 i_GPS_week=21; //!< GPS week number, aka WN [week] - bool b_L2_P_data_flag=22; //!< When true, indicates that the NAV data stream was commanded OFF on the P-code of the L2 channel - int32 i_SV_accuracy=23; //!< User Range Accuracy (URA) index of the SV (reference paragraph 6.2.1) for the standard positioning service user (Ref 20.3.3.3.1.3 IS-GPS-200K) - int32 i_SV_health=24; - double d_TGD=25; //!< 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=26; //!< Issue of Data, Clock - double d_IODE_SF2=27; //!< Issue of Data, Ephemeris (IODE), subframe 2 - double d_IODE_SF3=28; //!< Issue of Data, Ephemeris(IODE), subframe 3 - int32 i_AODO=29; //!< 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=30; //!< 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. - double d_spare1=31; - double d_spare2=32; - - double d_A_f0=33; //!< Coefficient 0 of code phase offset model [s] - double d_A_f1=34; //!< Coefficient 1 of code phase offset model [s/s] - double d_A_f2=35; //!< Coefficient 2 of code phase offset model [s/s^2] - - bool b_integrity_status_flag=36; - bool b_alert_flag=37; //!< If true, indicates that the SV URA may be worse than indicated in d_SV_accuracy, use that SV at our own risk. - bool b_antispoofing_flag=38; //!< If true, the AntiSpoofing mode is ON in that SV -} diff --git a/src/algorithms/PVT/libs/CMakeLists.txt b/src/algorithms/PVT/libs/CMakeLists.txt index b00e1a9bd..0219fb89f 100644 --- a/src/algorithms/PVT/libs/CMakeLists.txt +++ b/src/algorithms/PVT/libs/CMakeLists.txt @@ -5,8 +5,8 @@ # SPDX-License-Identifier: BSD-3-Clause protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS ${CMAKE_SOURCE_DIR}/docs/protobuf/monitor_pvt.proto) -protobuf_generate_cpp(PROTO_SRCS2 PROTO_HDRS2 ${CMAKE_SOURCE_DIR}/docs/protobuf/monitor_gps_ephemeris.proto) -protobuf_generate_cpp(PROTO_SRCS3 PROTO_HDRS3 ${CMAKE_SOURCE_DIR}/docs/protobuf/monitor_galileo_ephemeris.proto) +protobuf_generate_cpp(PROTO_SRCS2 PROTO_HDRS2 ${CMAKE_SOURCE_DIR}/docs/protobuf/gps_ephemeris.proto) +protobuf_generate_cpp(PROTO_SRCS3 PROTO_HDRS3 ${CMAKE_SOURCE_DIR}/docs/protobuf/galileo_ephemeris.proto) set(PVT_LIB_SOURCES pvt_conf.cc @@ -61,7 +61,16 @@ if(USE_CMAKE_TARGET_SOURCES) ) else() source_group(Headers FILES ${PVT_LIB_HEADERS} ${PROTO_HDRS} ${PROTO_HDRS2} ${PROTO_HDRS3}) - add_library(pvt_libs ${PVT_LIB_SOURCES} ${PROTO_SRCS} ${PROTO_SRCS2} ${PROTO_SRCS3} ${PVT_LIB_HEADERS} ${PROTO_HDRS} ${PROTO_HDRS2} ${PROTO_HDRS3}) + add_library(pvt_libs + ${PVT_LIB_SOURCES} + ${PROTO_SRCS} + ${PROTO_SRCS2} + ${PROTO_SRCS3} + ${PVT_LIB_HEADERS} + ${PROTO_HDRS} + ${PROTO_HDRS2} + ${PROTO_HDRS3} + ) endif() target_link_libraries(pvt_libs diff --git a/src/algorithms/PVT/libs/serdes_galileo_eph.h b/src/algorithms/PVT/libs/serdes_galileo_eph.h index 91feb9d89..befd79db0 100644 --- a/src/algorithms/PVT/libs/serdes_galileo_eph.h +++ b/src/algorithms/PVT/libs/serdes_galileo_eph.h @@ -19,7 +19,7 @@ #define GNSS_SDR_SERDES_GALILEO_EPH_H #include "galileo_ephemeris.h" -#include "monitor_galileo_ephemeris.pb.h" // file created by Protocol Buffers at compile time +#include "galileo_ephemeris.pb.h" // file created by Protocol Buffers at compile time #include #include #include @@ -80,110 +80,97 @@ public: std::string data; - monitor_.set_i_satellite_prn(monitor->PRN); + monitor_.set_prn(monitor->PRN); + monitor_.set_m_0(monitor->M_0); + monitor_.set_delta_n(monitor->delta_n); + monitor_.set_ecc(monitor->ecc); + monitor_.set_sqrta(monitor->sqrtA); + monitor_.set_omega_0(monitor->OMEGA_0); + monitor_.set_i_0(monitor->i_0); + monitor_.set_omega(monitor->omega); + monitor_.set_omegadot(monitor->OMEGAdot); + monitor_.set_idot(monitor->idot); + monitor_.set_cuc(monitor->Cuc); + monitor_.set_cus(monitor->Cus); + monitor_.set_crc(monitor->Crc); + monitor_.set_crs(monitor->Crs); + monitor_.set_cic(monitor->Cic); + monitor_.set_cis(monitor->Cis); + monitor_.set_toe(monitor->toe); + monitor_.set_toc(monitor->toc); + monitor_.set_af0(monitor->af0); + monitor_.set_af1(monitor->af1); + monitor_.set_af2(monitor->af2); + monitor_.set_satclkdrift(monitor->satClkDrift); + monitor_.set_dtr(monitor->dtr); + monitor_.set_wn(monitor->WN); + monitor_.set_tow(monitor->tow); + + // Galileo-specific parameters monitor_.set_iod_ephemeris(monitor->IOD_ephemeris); - monitor_.set_iod_nav_1(monitor->IOD_nav); - monitor_.set_m0_1(monitor->M_0); //!< Mean anomaly at reference time [semi-circles] - monitor_.set_delta_n_3(monitor->delta_n); //!< Mean motion difference from computed value [semi-circles/sec] - monitor_.set_e_1(monitor->ecc); //!< Eccentricity - monitor_.set_a_1(monitor->sqrtA); //!< Square root of the semi-major axis [meters^1/2] - monitor_.set_omega_0_2(monitor->OMEGA_0); //!< Longitude of ascending node of orbital plane at weekly epoch [semi-circles] - monitor_.set_i_0_2(monitor->i_0); //!< Inclination angle at reference time [semi-circles] - monitor_.set_omega_2(monitor->omega); //!< Argument of perigee [semi-circles] - monitor_.set_omega_dot_3(monitor->OMEGAdot); //!< Rate of right ascension [semi-circles/sec] - monitor_.set_idot_2(monitor->idot); //!< Rate of inclination angle [semi-circles/sec] - monitor_.set_c_uc_3(monitor->Cuc); //!< Amplitude of the cosine harmonic correction term to the argument of latitude [radians] - monitor_.set_c_us_3(monitor->Cus); //!< Amplitude of the sine harmonic correction term to the argument of latitude [radians] - monitor_.set_c_rc_3(monitor->Crc); //!< Amplitude of the cosine harmonic correction term to the orbit radius [meters] - monitor_.set_c_rs_3(monitor->Crs); //!< Amplitude of the sine harmonic correction term to the orbit radius [meters] - monitor_.set_c_ic_4(monitor->Cic); //!< Amplitude of the cosine harmonic correction term to the angle of inclination [radians] - monitor_.set_c_is_4(monitor->Cis); //!< Amplitude of the sine harmonic correction term to the angle of inclination [radians] - monitor_.set_d_toe(monitor->toe); //!< Ephemeris reference time - - /*Clock correction parameters*/ - monitor_.set_d_toc(monitor->toc); //!< Clock correction data reference Time of Week - monitor_.set_af0_4(monitor->af0); //!< SV clock bias correction coefficient [s] - monitor_.set_af1_4(monitor->af1); //!< SV clock drift correction coefficient [s/s] - monitor_.set_af2_4(monitor->af2); //!< SV clock drift rate correction coefficient [s/s^2] - - /*GST*/ - // Not belong to ephemeris set (page 1 to 4) - monitor_.set_wn_5(monitor->WN); //!< Week number - monitor_.set_tow_5(monitor->tow); //!< Time of Week - monitor_.set_galileo_satclkdrift(monitor->satClkDrift); - monitor_.set_galileo_dtr(monitor->dtr); //!< relativistic clock correction term - - // SV status - monitor_.set_sisa_3(monitor->SISA); - monitor_.set_e5a_hs(monitor->E5a_HS); //!< E5a Signal Health Status - monitor_.set_e5b_hs_5(monitor->E5b_HS); //!< E5b Signal Health Status - monitor_.set_e1b_hs_5(monitor->E1B_HS); //!< E1B Signal Health Status - monitor_.set_e5a_dvs(monitor->E5a_DVS); //!< E5a Data Validity Status - monitor_.set_e5b_dvs_5(monitor->E5b_DVS); //!< E5b Data Validity Status - monitor_.set_e1b_dvs_5(monitor->E1B_DVS); //!< E1B Data Validity Status - - monitor_.set_bgd_e1e5a_5(monitor->BGD_E1E5a); //!< E1-E5a Broadcast Group Delay [s] - monitor_.set_bgd_e1e5b_5(monitor->BGD_E1E5b); //!< E1-E5b Broadcast Group Delay [s] + monitor_.set_iod_nav(monitor->IOD_nav); + monitor_.set_sisa(monitor->SISA); + monitor_.set_e5a_hs(monitor->E5a_HS); + monitor_.set_e5b_hs(monitor->E5b_HS); + monitor_.set_e1b_hs(monitor->E1B_HS); + monitor_.set_e5a_dvs(monitor->E5a_DVS); + monitor_.set_e5b_dvs(monitor->E5b_DVS); + monitor_.set_e1b_dvs(monitor->E1B_DVS); + monitor_.set_bgd_e1e5a(monitor->BGD_E1E5a); + monitor_.set_bgd_e1e5b(monitor->BGD_E1E5b); monitor_.SerializeToString(&data); return data; } - inline Galileo_Ephemeris readProtobuffer(const gnss_sdr::MonitorGalileoEphemeris& mon) const //!< Deserialization + inline Galileo_Ephemeris readProtobuffer(const gnss_sdr::GalileoEphemeris& mon) const //!< Deserialization { Galileo_Ephemeris monitor; - monitor.PRN = mon.i_satellite_prn(); + monitor.PRN = mon.prn(); + monitor.M_0 = mon.m_0(); + monitor.delta_n = mon.delta_n(); + monitor.ecc = mon.ecc(); + monitor.sqrtA = mon.sqrta(); + monitor.OMEGA_0 = mon.omega_0(); + monitor.i_0 = mon.i_0(); + monitor.omega = mon.omega(); + monitor.OMEGAdot = mon.omegadot(); + monitor.idot = mon.idot(); + monitor.Cuc = mon.cuc(); + monitor.Cus = mon.cus(); + monitor.Crc = mon.crc(); + monitor.Crs = mon.crs(); + monitor.Cic = mon.cic(); + monitor.Cis = mon.cis(); + monitor.toe = mon.toe(); + monitor.toc = mon.toc(); + monitor.af0 = mon.af0(); + monitor.af1 = mon.af1(); + monitor.af2 = mon.af2(); + monitor.satClkDrift = mon.satclkdrift(); + monitor.dtr = mon.dtr(); + monitor.WN = mon.wn(); + monitor.tow = mon.tow(); + // Galileo-specific parameters monitor.IOD_ephemeris = mon.iod_ephemeris(); - monitor.IOD_nav = mon.iod_nav_1(); - monitor.M_0 = mon.m0_1(); //!< Mean anomaly at reference time [semi-circles] - monitor.delta_n = mon.delta_n_3(); //!< Mean motion difference from computed value [semi-circles/sec] - monitor.ecc = mon.e_1(); //!< Eccentricity - monitor.sqrtA = mon.a_1(); //!< Square root of the semi-major axis [meters^1/2] - monitor.OMEGA_0 = mon.omega_0_2(); //!< Longitude of ascending node of orbital plane at weekly epoch [semi-circles] - monitor.i_0 = mon.i_0_2(); //!< Inclination angle at reference time [semi-circles] - monitor.omega = mon.omega_2(); //!< Argument of perigee [semi-circles] - monitor.OMEGAdot = mon.omega_dot_3(); //!< Rate of right ascension [semi-circles/sec] - monitor.idot = mon.idot_2(); //!< Rate of inclination angle [semi-circles/sec] - monitor.Cuc = mon.c_uc_3(); //!< Amplitude of the cosine harmonic correction term to the argument of latitude [radians] - monitor.Cus = mon.c_us_3(); //!< Amplitude of the sine harmonic correction term to the argument of latitude [radians] - monitor.Crc = mon.c_rc_3(); //!< Amplitude of the cosine harmonic correction term to the orbit radius [meters] - monitor.Crs = mon.c_rs_3(); //!< Amplitude of the sine harmonic correction term to the orbit radius [meters] - monitor.Cic = mon.c_ic_4(); //!< Amplitude of the cosine harmonic correction term to the angle of inclination [radians] - monitor.Cis = mon.c_is_4(); //!< Amplitude of the sine harmonic correction term to the angle of inclination [radians] - monitor.toe = mon.d_toe(); // Ephemeris reference time - - /*Clock correction parameters*/ - monitor.toc = mon.d_toc(); // Clock correction data reference Time of Week - monitor.af0 = mon.af0_4(); //!< SV clock bias correction coefficient [s] - monitor.af1 = mon.af1_4(); //!< SV clock drift correction coefficient [s/s] - monitor.af2 = mon.af2_4(); //!< SV clock drift rate correction coefficient [s/s^2] - - /*GST*/ - // Not belong to ephemeris set (page 1 to 4) - monitor.WN = mon.wn_5(); //!< Week number - monitor.tow = mon.tow_5(); //!< Time of Week - monitor.satClkDrift = mon.galileo_satclkdrift(); - monitor.dtr = mon.galileo_dtr(); //!< relativistic clock correction term - - // SV status - monitor.SISA = mon.sisa_3(); - monitor.E5a_HS = mon.e5a_hs(); //!< E5a Signal Health Status - monitor.E5b_HS = mon.e5b_hs_5(); //!< E5b Signal Health Status - monitor.E1B_HS = mon.e1b_hs_5(); //!< E1B Signal Health Status - monitor.E5a_DVS = mon.e5a_dvs(); //!< E5a Data Validity Status - monitor.E5b_DVS = mon.e5b_dvs_5(); //!< E5b Data Validity Status - monitor.E1B_DVS = mon.e1b_dvs_5(); //!< E1B Data Validity Status - - monitor.BGD_E1E5a = mon.bgd_e1e5a_5(); //!< E1-E5a Broadcast Group Delay [s] - monitor.BGD_E1E5b = mon.bgd_e1e5b_5(); //!< E1-E5b Broadcast Group Delay [s] + monitor.IOD_nav = mon.iod_nav(); + monitor.SISA = mon.sisa(); + monitor.E5a_HS = mon.e5a_hs(); + monitor.E5b_HS = mon.e5b_hs(); + monitor.E1B_HS = mon.e1b_hs(); + monitor.E5a_DVS = mon.e5a_dvs(); + monitor.E5b_DVS = mon.e5b_dvs(); + monitor.E1B_DVS = mon.e1b_dvs(); + monitor.BGD_E1E5a = mon.bgd_e1e5a(); + monitor.BGD_E1E5b = mon.bgd_e1e5b(); return monitor; } private: - gnss_sdr::MonitorGalileoEphemeris monitor_{}; + gnss_sdr::GalileoEphemeris monitor_{}; }; diff --git a/src/algorithms/PVT/libs/serdes_gps_eph.h b/src/algorithms/PVT/libs/serdes_gps_eph.h index 43e3c0f9c..d2326d183 100644 --- a/src/algorithms/PVT/libs/serdes_gps_eph.h +++ b/src/algorithms/PVT/libs/serdes_gps_eph.h @@ -19,7 +19,7 @@ #define GNSS_SDR_SERDES_GPS_EPH_H #include "gps_ephemeris.h" -#include "monitor_gps_ephemeris.pb.h" // file created by Protocol Buffers at compile time +#include "gps_ephemeris.pb.h" // file created by Protocol Buffers at compile time #include #include #include @@ -29,7 +29,6 @@ /** \addtogroup PVT_libs * \{ */ - /*! * \brief This class implements serialization and deserialization of * Gps_Ephemeris objects using Protocol Buffers. @@ -78,103 +77,106 @@ public: { monitor_.Clear(); std::string data; - monitor_.set_i_satellite_prn(monitor->PRN); //!< SV PRN NUMBER - monitor_.set_d_tow(monitor->tow); //!< time of gps week of the ephemeris set (taken from subframes tow) [s] - monitor_.set_d_crs(monitor->Crs); //!< amplitude of the sine harmonic correction term to the orbit radius [m] - monitor_.set_d_delta_n(monitor->delta_n); //!< mean motion difference from computed value [semi-circles/s] - monitor_.set_d_m_0(monitor->M_0); //!< mean anomaly at reference time [semi-circles] - monitor_.set_d_cuc(monitor->Cuc); //!< amplitude of the cosine harmonic correction term to the argument of latitude [rad] - monitor_.set_d_e_eccentricity(monitor->ecc); //!< eccentricity [dimensionless] - monitor_.set_d_cus(monitor->Cus); //!< amplitude of the sine harmonic correction term to the argument of latitude [rad] - monitor_.set_d_sqrt_a(monitor->sqrtA); //!< square root of the semi-major axis [sqrt(m)] - monitor_.set_d_toe(monitor->toe); //!< ephemeris data reference time of week (ref. 20.3.3.4.3 is-gps-200k) [s] - monitor_.set_d_toc(monitor->toc); //!< clock data reference time (ref. 20.3.3.3.3.1 is-gps-200k) [s] - monitor_.set_d_cic(monitor->Cic); //!< amplitude of the cosine harmonic correction term to the angle of inclination [rad] - monitor_.set_d_omega0(monitor->OMEGA_0); //!< longitude of ascending node of orbit plane at weekly epoch [semi-circles] - monitor_.set_d_cis(monitor->Cis); //!< amplitude of the sine harmonic correction term to the angle of inclination [rad] - monitor_.set_d_i_0(monitor->i_0); //!< inclination angle at reference time [semi-circles] - monitor_.set_d_crc(monitor->Crc); //!< amplitude of the cosine harmonic correction term to the orbit radius [m] - monitor_.set_d_omega(monitor->omega); //!< argument of perigee [semi-cicles] - monitor_.set_d_omega_dot(monitor->OMEGAdot); //!< rate of right ascension [semi-circles/s] - monitor_.set_d_idot(monitor->idot); //!< rate of inclination angle [semi-circles/s] - monitor_.set_i_code_on_l2(monitor->code_on_L2); //!< if 1, p code on in l2; if 2, c/a code on in l2; - monitor_.set_i_gps_week(monitor->WN); //!< gps week number, aka wn [week] - monitor_.set_b_l2_p_data_flag(monitor->L2_P_data_flag); //!< when true, indicates that the nav data stream was commanded off on the p-code of the l2 channel - monitor_.set_i_sv_accuracy(monitor->SV_accuracy); //!< user range accuracy (ura) index of the sv (reference paragraph 6.2.1) for the standard positioning service user (ref 20.3.3.3.1.3 is-gps-200k) - monitor_.set_i_sv_health(monitor->SV_health); - monitor_.set_d_tgd(monitor->TGD); //!< estimated group delay differential: l1-l2 correction term only for the benefit of "l1 p(y)" or "l2 p(y)" s users [s] - monitor_.set_d_iodc(monitor->IODC); //!< issue of data, clock - monitor_.set_d_iode_sf2(monitor->IODE_SF2); //!< issue of data, ephemeris (iode), subframe 2 - monitor_.set_d_iode_sf3(monitor->IODE_SF3); //!< issue of data, ephemeris(iode), subframe 3 - monitor_.set_i_aodo(monitor->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] - monitor_.set_b_fit_interval_flag(monitor->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. - monitor_.set_d_spare1(monitor->spare1); - monitor_.set_d_spare2(monitor->spare2); + monitor_.set_prn(monitor->PRN); + monitor_.set_m_0(monitor->M_0); + monitor_.set_delta_n(monitor->delta_n); + monitor_.set_ecc(monitor->ecc); + monitor_.set_sqrta(monitor->sqrtA); + monitor_.set_omega_0(monitor->OMEGA_0); + monitor_.set_i_0(monitor->i_0); + monitor_.set_omega(monitor->omega); + monitor_.set_omegadot(monitor->OMEGAdot); + monitor_.set_idot(monitor->idot); + monitor_.set_cuc(monitor->Cuc); + monitor_.set_cus(monitor->Cus); + monitor_.set_crc(monitor->Crc); + monitor_.set_crs(monitor->Crs); + monitor_.set_cic(monitor->Cic); + monitor_.set_cis(monitor->Cis); + monitor_.set_toe(monitor->toe); + monitor_.set_toc(monitor->toc); + monitor_.set_af0(monitor->af0); + monitor_.set_af1(monitor->af1); + monitor_.set_af2(monitor->af2); + monitor_.set_satclkdrift(monitor->satClkDrift); + monitor_.set_dtr(monitor->dtr); + monitor_.set_wn(monitor->WN); + monitor_.set_tow(monitor->tow); - monitor_.set_d_a_f0(monitor->af0); //!< coefficient 0 of code phase offset model [s] - monitor_.set_d_a_f1(monitor->af1); //!< coefficient 1 of code phase offset model [s/s] - monitor_.set_d_a_f2(monitor->af2); //!< coefficient 2 of code phase offset model [s/s^2] - - monitor_.set_b_integrity_status_flag(monitor->integrity_status_flag); - monitor_.set_b_alert_flag(monitor->alert_flag); //!< if true, indicates that the sv ura may be worse than indicated in d_sv_accuracy, use that sv at our own risk. - monitor_.set_b_antispoofing_flag(monitor->antispoofing_flag); //!< if true, the antispoofing mode is on in that sv + // GPS-specific parameters + monitor_.set_code_on_l2(monitor->code_on_L2); + monitor_.set_l2_p_data_flag(monitor->L2_P_data_flag); + monitor_.set_sv_accuracy(monitor->SV_accuracy); + monitor_.set_sv_health(monitor->SV_health); + monitor_.set_tgd(monitor->TGD); + monitor_.set_iodc(monitor->IODC); + monitor_.set_iode_sf2(monitor->IODE_SF2); + monitor_.set_iode_sf3(monitor->IODE_SF3); + monitor_.set_aodo(monitor->AODO); + monitor_.set_fit_interval_flag(monitor->fit_interval_flag); + monitor_.set_spare1(monitor->spare1); + monitor_.set_spare2(monitor->spare2); + monitor_.set_integrity_status_flag(monitor->integrity_status_flag); + monitor_.set_alert_flag(monitor->alert_flag); + monitor_.set_antispoofing_flag(monitor->antispoofing_flag); monitor_.SerializeToString(&data); return data; } - inline Gps_Ephemeris readProtobuffer(const gnss_sdr::MonitorGpsEphemeris& mon) const //!< Deserialization + inline Gps_Ephemeris readProtobuffer(const gnss_sdr::GpsEphemeris& mon) const //!< Deserialization { Gps_Ephemeris monitor; - monitor.PRN = mon.i_satellite_prn(); //!< SV PRN NUMBER - monitor.tow = mon.d_tow(); //!< time of gps week of the ephemeris set (taken from subframes tow) [s] - monitor.Crs = mon.d_crs(); //!< amplitude of the sine harmonic correction term to the orbit radius [m] - monitor.delta_n = mon.d_delta_n(); //!< mean motion difference from computed value [semi-circles/s] - monitor.M_0 = mon.d_m_0(); //!< mean anomaly at reference time [semi-circles] - monitor.Cuc = mon.d_cuc(); //!< amplitude of the cosine harmonic correction term to the argument of latitude [rad] - monitor.ecc = mon.d_e_eccentricity(); //!< eccentricity [dimensionless] - monitor.Cus = mon.d_cus(); //!< amplitude of the sine harmonic correction term to the argument of latitude [rad] - monitor.sqrtA = mon.d_sqrt_a(); //!< square root of the semi-major axis [sqrt(m)] - monitor.toe = mon.d_toe(); //!< ephemeris data reference time of week (ref. 20.3.3.4.3 is-gps-200k) [s] - monitor.toc = mon.d_toc(); //!< clock data reference time (ref. 20.3.3.3.3.1 is-gps-200k) [s] - monitor.Cic = mon.d_cic(); //!< amplitude of the cosine harmonic correction term to the angle of inclination [rad] - monitor.OMEGA_0 = mon.d_omega0(); //!< longitude of ascending node of orbit plane at weekly epoch [semi-circles] - monitor.Cis = mon.d_cis(); //!< amplitude of the sine harmonic correction term to the angle of inclination [rad] - monitor.i_0 = mon.d_i_0(); //!< inclination angle at reference time [semi-circles] - monitor.Crc = mon.d_crc(); //!< amplitude of the cosine harmonic correction term to the orbit radius [m] - monitor.omega = mon.d_omega(); //!< argument of perigee [semi-cicles] - monitor.OMEGAdot = mon.d_omega_dot(); //!< rate of right ascension [semi-circles/s] - monitor.idot = mon.d_idot(); //!< rate of inclination angle [semi-circles/s] - monitor.code_on_L2 = mon.i_code_on_l2(); //!< if 1, p code on in l2; if 2, c/a code on in l2; - monitor.WN = mon.i_gps_week(); //!< gps week number, aka wn [week] - monitor.L2_P_data_flag = mon.b_l2_p_data_flag(); //!< when true, indicates that the nav data stream was commanded off on the p-code of the l2 channel - monitor.SV_accuracy = mon.i_sv_accuracy(); //!< user range accuracy (ura) index of the sv (reference paragraph 6.2.1) for the standard positioning service user (ref 20.3.3.3.1.3 is-gps-200k) - monitor.SV_health = mon.i_sv_health(); - monitor.TGD = mon.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] - monitor.IODC = mon.d_iodc(); //!< issue of data, clock - monitor.IODE_SF2 = mon.d_iode_sf2(); //!< issue of data, ephemeris (iode), subframe 2 - monitor.IODE_SF3 = mon.d_iode_sf3(); //!< issue of data, ephemeris(iode), subframe 3 - monitor.AODO = mon.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] + monitor.PRN = mon.prn(); + monitor.M_0 = mon.m_0(); + monitor.delta_n = mon.delta_n(); + monitor.ecc = mon.ecc(); + monitor.sqrtA = mon.sqrta(); + monitor.OMEGA_0 = mon.omega_0(); + monitor.i_0 = mon.i_0(); + monitor.omega = mon.omega(); + monitor.OMEGAdot = mon.omegadot(); + monitor.idot = mon.idot(); + monitor.Cuc = mon.cuc(); + monitor.Cus = mon.cus(); + monitor.Crc = mon.crc(); + monitor.Crs = mon.crs(); + monitor.Cic = mon.cic(); + monitor.Cis = mon.cis(); + monitor.toe = mon.toe(); + monitor.toc = mon.toc(); + monitor.af0 = mon.af0(); + monitor.af1 = mon.af1(); + monitor.af2 = mon.af2(); + monitor.satClkDrift = mon.satclkdrift(); + monitor.dtr = mon.dtr(); + monitor.WN = mon.wn(); + monitor.tow = mon.tow(); - monitor.fit_interval_flag = mon.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. - monitor.spare1 = mon.d_spare1(); - monitor.spare2 = mon.d_spare2(); - - monitor.af0 = mon.d_a_f0(); //!< coefficient 0 of code phase offset model [s] - monitor.af1 = mon.d_a_f1(); //!< coefficient 1 of code phase offset model [s/s] - monitor.af2 = mon.d_a_f2(); //!< coefficient 2 of code phase offset model [s/s^2] - - monitor.integrity_status_flag = mon.b_integrity_status_flag(); - monitor.alert_flag = mon.b_alert_flag(); //!< if true, indicates that the sv ura may be worse than indicated in d_sv_accuracy, use that sv at our own risk. - monitor.antispoofing_flag = mon.b_antispoofing_flag(); //!< if true, the antispoofing mode is on in that sv + // GPS-specific parameters + monitor.code_on_L2 = mon.code_on_l2(); + monitor.L2_P_data_flag = mon.l2_p_data_flag(); + monitor.SV_accuracy = mon.sv_accuracy(); + monitor.SV_health = mon.sv_health(); + monitor.TGD = mon.tgd(); + monitor.IODC = mon.iodc(); + monitor.IODE_SF2 = mon.iode_sf2(); + monitor.IODE_SF3 = mon.iode_sf3(); + monitor.AODO = mon.aodo(); + monitor.fit_interval_flag = mon.fit_interval_flag(); + monitor.spare1 = mon.spare1(); + monitor.spare2 = mon.spare2(); + monitor.integrity_status_flag = mon.integrity_status_flag(); + monitor.alert_flag = mon.alert_flag(); + monitor.antispoofing_flag = mon.antispoofing_flag(); return monitor; } private: - gnss_sdr::MonitorGpsEphemeris monitor_{}; + gnss_sdr::GpsEphemeris monitor_{}; }; diff --git a/src/tests/unit-tests/signal-processing-blocks/pvt/serdes_monitor_pvt_test.cc b/src/tests/unit-tests/signal-processing-blocks/pvt/serdes_monitor_pvt_test.cc index 0a653cf97..caa1aad58 100644 --- a/src/tests/unit-tests/signal-processing-blocks/pvt/serdes_monitor_pvt_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/pvt/serdes_monitor_pvt_test.cc @@ -32,7 +32,7 @@ TEST(Serdes_Monitor_Pvt_Test, Simpletest) serdes.readProtobuffer(mon); - gnss_sdr::MonitorGalileoEphemeris ephgal; + gnss_sdr::GalileoEphemeris ephgal; Serdes_Galileo_Eph gal_serdes = Serdes_Galileo_Eph(); gal_serdes.readProtobuffer(ephgal);