1
0
mirror of https://github.com/gnss-sdr/gnss-sdr synced 2024-06-22 21:13:15 +00:00

Update .proto files for GPS and Galileo ephemeris data

This commit is contained in:
Carles Fernandez 2021-02-22 13:42:54 +01:00
parent 86d701b628
commit 146e1d7a63
No known key found for this signature in database
GPG Key ID: 4C583C52B0C3877D
8 changed files with 284 additions and 280 deletions

View File

@ -0,0 +1,53 @@
// SPDX-License-Identifier: BSD-3-Clause
// SPDX-FileCopyrightText: 2018-2021 Carles Fernandez-Prades <carles.fernandez@cttc.es>
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]
}

View File

@ -0,0 +1,57 @@
// SPDX-License-Identifier: BSD-3-Clause
// SPDX-FileCopyrightText: 2018-2021 Carles Fernandez-Prades <carles.fernandez@cttc.es>
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
}

View File

@ -1,55 +0,0 @@
// SPDX-License-Identifier: BSD-3-Clause
// SPDX-FileCopyrightText: 2018-2020 Carles Fernandez-Prades <carles.fernandez@cttc.es>
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
}

View File

@ -1,49 +0,0 @@
// SPDX-License-Identifier: BSD-3-Clause
// SPDX-FileCopyrightText: 2018-2020 Carles Fernandez-Prades <carles.fernandez@cttc.es>
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
}

View File

@ -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

View File

@ -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 <memory>
#include <string>
#include <utility>
@ -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_{};
};

View File

@ -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 <memory>
#include <string>
#include <utility>
@ -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_{};
};

View File

@ -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);