From 3adee701fd4052ddf2de6f4970fa4519d519b316 Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Mon, 18 Nov 2013 01:37:23 +0000 Subject: [PATCH] Improving documentation and code formatting git-svn-id: https://svn.code.sf.net/p/gnss-sdr/code/trunk@447 64b25241-fba3-4117-9849-534c7e92360d --- .../galileo_navigation_message.cc | 1566 ++++++++--------- .../galileo_navigation_message.h | 437 +++-- 2 files changed, 948 insertions(+), 1055 deletions(-) diff --git a/src/core/system_parameters/galileo_navigation_message.cc b/src/core/system_parameters/galileo_navigation_message.cc index ad2c6163d..d55cdd6f8 100644 --- a/src/core/system_parameters/galileo_navigation_message.cc +++ b/src/core/system_parameters/galileo_navigation_message.cc @@ -1,6 +1,7 @@ /*! * \file Galileo_Navigation_Message.cc - * \brief Implementation of a Galileo NAV Data message decoder as described in Galileo ICD + * \brief Implementation of a Galileo I/NAV Data message + * as described in Galileo OS SIS ICD Issue 1.1 (Sept. 2010) * \author Mara Branzanti 2013. mara.branzanti(at)gmail.com * \author Javier Arribas, 2013. jarribas(at)cttc.es * @@ -35,7 +36,6 @@ #include #include #include - #include #include #include @@ -45,166 +45,162 @@ typedef boost::crc_optimal<24, 0x1864CFBu, 0x0, 0x0, false, false> CRC_Galileo_I void Galileo_Navigation_Message::reset() { - flag_even_word = 0; - Page_type_time_stamp = 0; + flag_even_word = 0; + Page_type_time_stamp = 0; - flag_CRC_test = false; - flag_all_ephemeris = false; // flag indicating that all words containing ephemeris have been received - flag_ephemeris_1 = false; // flag indicating that ephemeris 1/4 (word 1) have been received - flag_ephemeris_2 = false; // flag indicating that ephemeris 2/4 (word 2) have been received - flag_ephemeris_3 = false; // flag indicating that ephemeris 3/4 (word 3) have been received - flag_ephemeris_4 = false; // flag indicating that ephemeris 4/4 (word 4) have been received + flag_CRC_test = false; + flag_all_ephemeris = false; // flag indicating that all words containing ephemeris have been received + flag_ephemeris_1 = false; // flag indicating that ephemeris 1/4 (word 1) have been received + flag_ephemeris_2 = false; // flag indicating that ephemeris 2/4 (word 2) have been received + flag_ephemeris_3 = false; // flag indicating that ephemeris 3/4 (word 3) have been received + flag_ephemeris_4 = false; // flag indicating that ephemeris 4/4 (word 4) have been received - flag_iono_and_GST = false; // flag indicating that ionospheric parameters (word 5) have been received - flag_utc_model = false; // flag indicating that utc model parameters (word 6) have been received + flag_iono_and_GST = false; // flag indicating that ionospheric parameters (word 5) have been received + flag_utc_model = false; // flag indicating that utc model parameters (word 6) have been received - flag_all_almanac = false; // flag indicating that all almanac have been received - flag_almanac_1 = false; // flag indicating that almanac 1/4 (word 7) have been received - flag_almanac_2 = false; // flag indicating that almanac 2/4 (word 8) have been received - flag_almanac_3 = false; // flag indicating that almanac 3/4 (word 9) have been received - flag_almanac_4 = false; // flag indicating that almanac 4/4 (word 10) have been received + flag_all_almanac = false; // flag indicating that all almanac have been received + flag_almanac_1 = false; // flag indicating that almanac 1/4 (word 7) have been received + flag_almanac_2 = false; // flag indicating that almanac 2/4 (word 8) have been received + flag_almanac_3 = false; // flag indicating that almanac 3/4 (word 9) have been received + flag_almanac_4 = false; // flag indicating that almanac 4/4 (word 10) have been received - flag_TOW_5 = 0; - flag_TOW_set = false; + flag_TOW_5 = 0; + flag_TOW_set = false; - IOD_ephemeris = 0; - /*Word type 1: Ephemeris (1/4)*/ - IOD_nav_1 = 0; - t0e_1 = 0; - M0_1 = 0; - e_1 = 0; - A_1 = 0; + IOD_ephemeris = 0; + /*Word type 1: Ephemeris (1/4)*/ + IOD_nav_1 = 0; + t0e_1 = 0; + M0_1 = 0; + e_1 = 0; + A_1 = 0; - /*Word type 2: Ephemeris (2/4)*/ - IOD_nav_2 = 0; // IOD_nav page 2 - OMEGA_0_2 = 0; // Longitude of ascending node of orbital plane at weekly epoch [semi-circles] - i_0_2 = 0; // Inclination angle at reference time [semi-circles] - omega_2 = 0; // Argument of perigee [semi-circles] - iDot_2 = 0; // Rate of inclination angle [semi-circles/sec] + /*Word type 2: Ephemeris (2/4)*/ + IOD_nav_2 = 0; // IOD_nav page 2 + OMEGA_0_2 = 0; // Longitude of ascending node of orbital plane at weekly epoch [semi-circles] + i_0_2 = 0; // Inclination angle at reference time [semi-circles] + omega_2 = 0; // Argument of perigee [semi-circles] + iDot_2 = 0; // Rate of inclination angle [semi-circles/sec] - /*Word type 3: Ephemeris (3/4) and SISA*/ - IOD_nav_3 = 0; // - OMEGA_dot_3 = 0; // Rate of right ascension [semi-circles/sec] - delta_n_3 = 0; // Mean motion difference from computed value [semi-circles/sec] - C_uc_3 = 0; // Amplitude of the cosine harmonic correction term to the argument of latitude [radians] - C_us_3 = 0; // Amplitude of the sine harmonic correction term to the argument of latitude [radians] - C_rc_3 = 0; // Amplitude of the cosine harmonic correction term to the orbit radius [meters] - C_rs_3 = 0; // Amplitude of the sine harmonic correction term to the orbit radius [meters] - SISA_3 = 0; // + /*Word type 3: Ephemeris (3/4) and SISA*/ + IOD_nav_3 = 0; // + OMEGA_dot_3 = 0; // Rate of right ascension [semi-circles/sec] + delta_n_3 = 0; // Mean motion difference from computed value [semi-circles/sec] + C_uc_3 = 0; // Amplitude of the cosine harmonic correction term to the argument of latitude [radians] + C_us_3 = 0; // Amplitude of the sine harmonic correction term to the argument of latitude [radians] + C_rc_3 = 0; // Amplitude of the cosine harmonic correction term to the orbit radius [meters] + C_rs_3 = 0; // Amplitude of the sine harmonic correction term to the orbit radius [meters] + SISA_3 = 0; // - /*Word type 4: Ephemeris (4/4) and Clock correction parameters*/ - IOD_nav_4 = 0; // - SV_ID_PRN_4 = 0; // - C_ic_4 = 0; // Amplitude of the cosine harmonic correction term to the angle of inclination [radians] - C_is_4 = 0; // Amplitude of the sine harmonic correction term to the angle of inclination [radians] - /*Clock correction parameters*/ - t0c_4 = 0; // - af0_4 = 0; // - af1_4 = 0; // - af2_4 = 0; // - spare_4 = 0; + /*Word type 4: Ephemeris (4/4) and Clock correction parameters*/ + IOD_nav_4 = 0; // + SV_ID_PRN_4 = 0; // + C_ic_4 = 0; // Amplitude of the cosine harmonic correction term to the angle of inclination [radians] + C_is_4 = 0; // Amplitude of the sine harmonic correction term to the angle of inclination [radians] + /*Clock correction parameters*/ + t0c_4 = 0; // + af0_4 = 0; // + af1_4 = 0; // + af2_4 = 0; // + spare_4 = 0; - /*Word type 5: Ionospheric correction, BGD, signal health and data validity status and GST*/ - /*Ionospheric correction*/ - /*Az*/ - ai0_5 = 0; // - ai1_5 = 0; // - ai2_5 = 0; // - /*Ionospheric disturbance flag*/ - Region1_flag_5 = 0; //Region1_flag_5; - Region2_flag_5 = 0; // - Region3_flag_5 = 0; // - Region4_flag_5 = 0; // - Region5_flag_5 = 0; // - BGD_E1E5a_5 = 0; // - BGD_E1E5b_5 = 0; // - E5b_HS_5 = 0; // - E1B_HS_5 = 0; // - E5b_DVS_5 = 0; // - E1B_DVS_5 = 0; // - /*GST*/ - WN_5 = 0; - TOW_5 = 0; - spare_5 = 0; + /*Word type 5: Ionospheric correction, BGD, signal health and data validity status and GST*/ + /*Ionospheric correction*/ + /*Az*/ + ai0_5 = 0; // + ai1_5 = 0; // + ai2_5 = 0; // + /*Ionospheric disturbance flag*/ + Region1_flag_5 = 0; //Region1_flag_5; + Region2_flag_5 = 0; // + Region3_flag_5 = 0; // + Region4_flag_5 = 0; // + Region5_flag_5 = 0; // + BGD_E1E5a_5 = 0; // + BGD_E1E5b_5 = 0; // + E5b_HS_5 = 0; // + E1B_HS_5 = 0; // + E5b_DVS_5 = 0; // + E1B_DVS_5 = 0; // + /*GST*/ + WN_5 = 0; + TOW_5 = 0; + spare_5 = 0; - /*Word type 6: GST-UTC conversion parameters*/ - A0_6 = 0; - A1_6 = 0; - Delta_tLS_6 = 0; - t0t_6 = 0; - WNot_6 = 0; - WN_LSF_6 = 0; - DN_6 = 0; - Delta_tLSF_6 = 0; - TOW_6 = 0; + /*Word type 6: GST-UTC conversion parameters*/ + A0_6 = 0; + A1_6 = 0; + Delta_tLS_6 = 0; + t0t_6 = 0; + WNot_6 = 0; + WN_LSF_6 = 0; + DN_6 = 0; + Delta_tLSF_6 = 0; + TOW_6 = 0; - /*Word type 7: Almanac for SVID1 (1/2), almanac reference time and almanac reference week number*/ - IOD_a_7 = 0; - WN_a_7 = 0; - t0a_7 = 0; - SVID1_7 = 0; - DELTA_A_7 = 0; - e_7 = 0; - omega_7 = 0; - delta_i_7 = 0; - Omega0_7 = 0; - Omega_dot_7 = 0; - M0_7 = 0; + /*Word type 7: Almanac for SVID1 (1/2), almanac reference time and almanac reference week number*/ + IOD_a_7 = 0; + WN_a_7 = 0; + t0a_7 = 0; + SVID1_7 = 0; + DELTA_A_7 = 0; + e_7 = 0; + omega_7 = 0; + delta_i_7 = 0; + Omega0_7 = 0; + Omega_dot_7 = 0; + M0_7 = 0; - /*Word type 8: Almanac for SVID1 (2/2) and SVID2 (1/2)*/ - IOD_a_8 = 0; - af0_8 = 0; - af1_8 = 0; - E5b_HS_8 = 0; - E1B_HS_8 = 0; - SVID2_8 = 0; - DELTA_A_8 = 0; - e_8 = 0; - omega_8 = 0; - delta_i_8 = 0; - Omega0_8 = 0; - Omega_dot_8 = 0; + /*Word type 8: Almanac for SVID1 (2/2) and SVID2 (1/2)*/ + IOD_a_8 = 0; + af0_8 = 0; + af1_8 = 0; + E5b_HS_8 = 0; + E1B_HS_8 = 0; + SVID2_8 = 0; + DELTA_A_8 = 0; + e_8 = 0; + omega_8 = 0; + delta_i_8 = 0; + Omega0_8 = 0; + Omega_dot_8 = 0; - /*Word type 9: Almanac for SVID2 (2/2) and SVID3 (1/2)*/ + /*Word type 9: Almanac for SVID2 (2/2) and SVID3 (1/2)*/ + IOD_a_9 = 0; + WN_a_9 = 0; + t0a_9 = 0; + M0_9 = 0; + af0_9 = 0; + af1_9 = 0; + E5b_HS_9 = 0; + E1B_HS_9 = 0; + SVID3_9 = 0; + DELTA_A_9 = 0; + e_9 = 0; + omega_9 = 0; + delta_i_9 = 0; - IOD_a_9 = 0; - WN_a_9 = 0; - t0a_9 = 0; - M0_9 = 0; - af0_9 = 0; - af1_9 = 0; - E5b_HS_9 = 0; - E1B_HS_9 = 0; - SVID3_9 = 0; - DELTA_A_9 = 0; - e_9 = 0; - omega_9 = 0; - delta_i_9 = 0; - - /*Word type 10: Almanac for SVID3 (2/2) and GST-GPS conversion parameters*/ - - IOD_a_10 = 0; - Omega0_10 = 0; - Omega_dot_10 = 0; - M0_10 = 0; - af0_10 = 0; - af1_10 = 0; - E5b_HS_10 = 0; - E1B_HS_10 = 0; - //GST-GPS - A_0G_10 = 0; - A_1G_10 = 0; - t_0G_10 = 0; - WN_0G_10 = 0; - - /*Word type 0: I/NAV Spare Word*/ - - Time_0 = 0; - WN_0 = 0; - TOW_0 = 0; + /*Word type 10: Almanac for SVID3 (2/2) and GST-GPS conversion parameters*/ + IOD_a_10 = 0; + Omega0_10 = 0; + Omega_dot_10 = 0; + M0_10 = 0; + af0_10 = 0; + af1_10 = 0; + E5b_HS_10 = 0; + E1B_HS_10 = 0; + //GST-GPS + A_0G_10 = 0; + A_1G_10 = 0; + t_0G_10 = 0; + WN_0G_10 = 0; + /*Word type 0: I/NAV Spare Word*/ + Time_0 = 0; + WN_0 = 0; + TOW_0 = 0; } @@ -216,8 +212,7 @@ Galileo_Navigation_Message::Galileo_Navigation_Message() bool Galileo_Navigation_Message::CRC_test(std::bitset bits,boost::uint32_t checksum) { - - CRC_Galileo_INAV_type CRC_Galileo; + CRC_Galileo_INAV_type CRC_Galileo; boost::uint32_t crc_computed; // Galileo INAV frame for CRC is not an integer multiple of bytes @@ -232,25 +227,27 @@ bool Galileo_Navigation_Message::CRC_test(std::bitset b boost::to_block_range(frame_bits, std::back_inserter(bytes)); std::reverse(bytes.begin(),bytes.end()); - CRC_Galileo.process_bytes( bytes.data(), GALILEO_DATA_FRAME_BYTES ); - crc_computed=CRC_Galileo.checksum(); - if (checksum==crc_computed){ - return true; - }else{ - return false; - } - - + crc_computed = CRC_Galileo.checksum(); + if (checksum == crc_computed) + { + return true; + } + else + { + return false; + } } + + unsigned long int Galileo_Navigation_Message::read_navigation_unsigned(std::bitset bits, const std::vector > parameter) { unsigned long int value = 0; int num_of_slices = parameter.size(); - for (int i=0; i bits, const std::vector > parameter) { bool value; - if (bits[GALILEO_DATA_JK_BITS - parameter[0].first] == 1) { value = true; @@ -358,6 +355,7 @@ bool Galileo_Navigation_Message::read_navigation_bool(std::bitset TLM_word_for_CRC_bits(TLM_word_for_CRC); + std::bitset<24> checksum(CRC_data); - //std::cout<<"Complete word for CRC test: "< TLM_word_for_CRC_bits(TLM_word_for_CRC); - std::bitset<24> checksum(CRC_data); + //if (Tail_odd.compare(correct_tail) != 0) + // std::cout << "Tail odd is not correct!" << std::endl; + //else std::cout<<"Tail odd is correct!"< page_type_bits (page_number_bits); // from string to bitset + Page_type = (int)read_page_type_unsigned(page_type_bits, type); + Page_type_time_stamp = Page_type; + //std::cout << "Page number (first 6 bits of Data k converted to decimal) = " << Page_type << std::endl; + std::string Data_jk_ephemeris = Data_k + Data_j; + //std::cout<<"Data j k ephemeris" << endl << Data_jk_ephemeris << endl; - std::bitset page_type_bits (page_number_bits); // from string to bitset - Page_type = (int)read_page_type_unsigned(page_type_bits, type); - Page_type_time_stamp = Page_type; - //std::cout << "Page number (first 6 bits of Data k converted to decimal) = " << Page_type << std::endl; - std::string Data_jk_ephemeris = Data_k + Data_j; - //std::cout<<"Data j k ephemeris" << endl << Data_jk_ephemeris << endl; - - page_jk_decoder(Data_jk_ephemeris.c_str()); // Corresponding to ephemeris_decode.m in matlab code -/*this block is just to try some function, it must be eliminated - double t_GST; - if ((have_new_iono_and_GST() == true) and (flag_all_ephemeris==true)) - { - std::cout <<"GST and ephemeris parameters have been received, now it is possible to compute satellite position"<< std::endl; - t_GST = Galileo_System_Time(WN_5, TOW_5); - std::cout << "Galileo System Time [sec]: " << t_GST << std::endl; - satellitePosition(t_GST); - flag_all_ephemeris=false; - } - - double t_UTC; - if ((have_new_iono_and_GST() == true) and (have_new_utc_model() == true)) - { - t_UTC = GST_to_UTC_time(t_GST, WN_5); - std::cout << "UTC [sec]: " << t_UTC << std::endl; - } -*/ - }else{ - // CRC wrong.. discard frame - flag_CRC_test= false; - } - //********** end of CRC checksum control ***/ - } - - } /*end if (page_string.at(0)=='1') */ - - else{ - page_Even = page_string.substr (0,114); - //std::cout << "Page even in split page" << std::endl << page_Even << std::endl; - std::string tail_Even = page_string.substr (114,6); - //std::cout << "tail_even_string: " << tail_Even < data_jk_bits (data_jk_string); - //DLOG(INFO) << "Data_jk_bits (bitset) "<< endl << data_jk_bits << endl; page_number = (int)read_navigation_unsigned(data_jk_bits, PAGE_TYPE_bit); - DLOG(INFO) << "Page number = " << page_number << std::endl; + DLOG(INFO) << "Page number = " << page_number; switch (page_number) - { + { case 1: /*Word type 1: Ephemeris (1/4)*/ - IOD_nav_1=(int)read_navigation_unsigned(data_jk_bits, IOD_nav_1_bit); - DLOG(INFO)<<"IOD_nav_1= "<< IOD_nav_1 < // for boost::uint16_t #include #include - -// Galileo Navigation Message structures #include "galileo_ephemeris.h" #include "galileo_iono.h" #include "galileo_almanac.h" #include "galileo_utc_model.h" -#include "Galileo_E1.h" -#include "galileo_ephemeris.h" -#include "galileo_iono.h" -#include "galileo_utc_model.h" - - - -class Galileo_Navigation_Message { - +/*! + * \brief This class handles the Galileo I/NAV Data message, as described in the + * Galileo Open Service Signal in Space Interface Control Document (OS SIS ICD), Issue 1.1 (Sept 2010). + */ +class Galileo_Navigation_Message +{ private: - - - bool CRC_test(std::bitset bits,boost::uint32_t checksum); - bool read_navigation_bool(std::bitset bits, const std::vector > parameter); - //void print_galileo_word_bytes(unsigned int GPS_word); - unsigned long int read_navigation_unsigned(std::bitset bits, const std::vector< std::pair > parameter); - unsigned long int read_page_type_unsigned(std::bitset bits, const std::vector< std::pair > parameter); - signed long int read_navigation_signed(std::bitset bits, const std::vector > parameter); - - int x,y; - + bool CRC_test(std::bitset bits,boost::uint32_t checksum); + bool read_navigation_bool(std::bitset bits, const std::vector > parameter); + //void print_galileo_word_bytes(unsigned int GPS_word); + unsigned long int read_navigation_unsigned(std::bitset bits, const std::vector< std::pair > parameter); + unsigned long int read_page_type_unsigned(std::bitset bits, const std::vector< std::pair > parameter); + signed long int read_navigation_signed(std::bitset bits, const std::vector > parameter); + int x,y; public: - int Page_type_time_stamp; - int flag_even_word; - std::string page_Even; + int Page_type_time_stamp; + int flag_even_word; + std::string page_Even; bool flag_CRC_test; - bool flag_all_ephemeris; // flag indicating that all words containing ephemeris have been received - bool flag_ephemeris_1; // flag indicating that ephemeris 1/4 (word 1) have been received - bool flag_ephemeris_2; // flag indicating that ephemeris 2/4 (word 2) have been received - bool flag_ephemeris_3; // flag indicating that ephemeris 3/4 (word 3) have been received - bool flag_ephemeris_4; // flag indicating that ephemeris 4/4 (word 4) have been received + bool flag_all_ephemeris; //!< Flag indicating that all words containing ephemeris have been received + bool flag_ephemeris_1; //!< Flag indicating that ephemeris 1/4 (word 1) have been received + bool flag_ephemeris_2; //!< Flag indicating that ephemeris 2/4 (word 2) have been received + bool flag_ephemeris_3; //!< Flag indicating that ephemeris 3/4 (word 3) have been received + bool flag_ephemeris_4; //!< Flag indicating that ephemeris 4/4 (word 4) have been received - bool flag_iono_and_GST; // flag indicating that ionospheric and GST parameters (word 5) have been received - bool flag_TOW_5; - bool flag_TOW_6; - bool flag_TOW_set; // it is true when page 5 or page 6 arrives - bool flag_utc_model; // flag indicating that utc model parameters (word 6) have been received + bool flag_iono_and_GST; //!< Flag indicating that ionospheric and GST parameters (word 5) have been received + bool flag_TOW_5; + bool flag_TOW_6; + bool flag_TOW_set; //!< it is true when page 5 or page 6 arrives + bool flag_utc_model; //!< Flag indicating that utc model parameters (word 6) have been received - bool flag_all_almanac; // flag indicating that all almanac have been received - bool flag_almanac_1; // flag indicating that almanac 1/4 (word 7) have been received - bool flag_almanac_2; // flag indicating that almanac 2/4 (word 8) have been received - bool flag_almanac_3; // flag indicating that almanac 3/4 (word 9) have been received - bool flag_almanac_4; // flag indicating that almanac 4/4 (word 10) have been received + bool flag_all_almanac; //!< Flag indicating that all almanac have been received + bool flag_almanac_1; //!< Flag indicating that almanac 1/4 (word 7) have been received + bool flag_almanac_2; //!< Flag indicating that almanac 2/4 (word 8) have been received + bool flag_almanac_3; //!< Flag indicating that almanac 3/4 (word 9) have been received + bool flag_almanac_4; //!< Flag indicating that almanac 4/4 (word 10) have been received - int IOD_ephemeris; - /*Word type 1: Ephemeris (1/4)*/ - int IOD_nav_1; // IOD_nav page 1 - double t0e_1; // Ephemeris reference time [s] - double M0_1; // Mean anomaly at reference time [semi-circles] - double e_1; // Eccentricity - double A_1; // Square root of the semi-major axis [metres^1/2] + int IOD_ephemeris; - /*Word type 2: Ephemeris (2/4)*/ - int IOD_nav_2; // IOD_nav page 2 - double OMEGA_0_2; // Longitude of ascending node of orbital plane at weekly epoch [semi-circles] - double i_0_2; // Inclination angle at reference time [semi-circles] - double omega_2; // Argument of perigee [semi-circles] - double iDot_2; // Rate of inclination angle [semi-circles/sec] + /*Word type 1: Ephemeris (1/4)*/ + int IOD_nav_1; //!< IOD_nav page 1 + double t0e_1; //!< Ephemeris reference time [s] + double M0_1; //!< Mean anomaly at reference time [semi-circles] + double e_1; //!< Eccentricity + double A_1; //!< Square root of the semi-major axis [metres^1/2] - /*Word type 3: Ephemeris (3/4) and SISA*/ - int IOD_nav_3; // - double OMEGA_dot_3; // Rate of right ascension [semi-circles/sec] - double delta_n_3; // Mean motion difference from computed value [semi-circles/sec] - double C_uc_3; // Amplitude of the cosine harmonic correction term to the argument of latitude [radians] - double C_us_3; // Amplitude of the sine harmonic correction term to the argument of latitude [radians] - double C_rc_3; // Amplitude of the cosine harmonic correction term to the orbit radius [meters] - double C_rs_3; // Amplitude of the sine harmonic correction term to the orbit radius [meters] - double SISA_3; // + /*Word type 2: Ephemeris (2/4)*/ + int IOD_nav_2; //!< IOD_nav page 2 + double OMEGA_0_2; //!< Longitude of ascending node of orbital plane at weekly epoch [semi-circles] + double i_0_2; //!< Inclination angle at reference time [semi-circles] + double omega_2; //!< Argument of perigee [semi-circles] + double iDot_2; //!< Rate of inclination angle [semi-circles/sec] - /*Word type 4: Ephemeris (4/4) and Clock correction parameters*/ - int IOD_nav_4; // - int SV_ID_PRN_4; // - double C_ic_4; // Amplitude of the cosine harmonic correction term to the angle of inclination [radians] - double C_is_4; // Amplitude of the sine harmonic correction term to the angle of inclination [radians] - /*Clock correction parameters*/ - double t0c_4; //Clock correction data reference Time of Week [sec] - double af0_4; //SV clock bias correction coefficient [s] - double af1_4; //SV clock drift correction coefficient [s/s] - double af2_4; //SV clock drift rate correction coefficient [s/s^2] - double spare_4; + /*Word type 3: Ephemeris (3/4) and SISA*/ + int IOD_nav_3; // + double OMEGA_dot_3; //!< Rate of right ascension [semi-circles/sec] + double delta_n_3; //!< Mean motion difference from computed value [semi-circles/sec] + double C_uc_3; //!< Amplitude of the cosine harmonic correction term to the argument of latitude [radians] + double C_us_3; //!< Amplitude of the sine harmonic correction term to the argument of latitude [radians] + double C_rc_3; //!< Amplitude of the cosine harmonic correction term to the orbit radius [meters] + double C_rs_3; //!< Amplitude of the sine harmonic correction term to the orbit radius [meters] + double SISA_3; + /*Word type 4: Ephemeris (4/4) and Clock correction parameters*/ + int IOD_nav_4; // + int SV_ID_PRN_4; // + double C_ic_4; //!