GNSS-SDR  0.0.19
An Open Source GNSS Software Defined Receiver
Galileo_FNAV.h
Go to the documentation of this file.
1 /*!
2  * \file Galileo_FNAV.h
3  * \brief Galileo FNAV mesage constants
4  * \author Carles Fernandez, 2020. cfernandez(at)cttc.es
5  *
6  *
7  * -----------------------------------------------------------------------------
8  *
9  * GNSS-SDR is a Global Navigation Satellite System software-defined receiver.
10  * This file is part of GNSS-SDR.
11  *
12  * Copyright (C) 2010-2020 (see AUTHORS file for a list of contributors)
13  * SPDX-License-Identifier: GPL-3.0-or-later
14  *
15  * -----------------------------------------------------------------------------
16  */
17 
18 #ifndef GNSS_SDR_GALILEO_FNAV_H
19 #define GNSS_SDR_GALILEO_FNAV_H
20 
21 #include "MATH_CONSTANTS.h"
22 #include <cstdint>
23 #include <utility>
24 #include <vector>
25 
26 /** \addtogroup Core
27  * \{ */
28 /** \addtogroup System_Parameters
29  * \{ */
30 
31 
32 const std::vector<std::pair<int32_t, int32_t>> FNAV_PAGE_TYPE_BIT({{1, 6}});
33 
34 /* WORD 1 iono corrections. FNAV (Galileo E5a message)*/
35 const std::vector<std::pair<int32_t, int32_t>> FNAV_SV_ID_PRN_1_BIT({{7, 6}});
36 const std::vector<std::pair<int32_t, int32_t>> FNAV_IO_DNAV_1_BIT({{13, 10}});
37 const std::vector<std::pair<int32_t, int32_t>> FNAV_T0C_1_BIT({{23, 14}});
38 constexpr int32_t FNAV_T0C_1_LSB = 60;
39 const std::vector<std::pair<int32_t, int32_t>> FNAV_AF0_1_BIT({{37, 31}});
40 constexpr double FNAV_AF0_1_LSB = TWO_N34;
41 const std::vector<std::pair<int32_t, int32_t>> FNAV_AF1_1_BIT({{68, 21}});
42 constexpr double FNAV_AF1_1_LSB = TWO_N46;
43 const std::vector<std::pair<int32_t, int32_t>> FNAV_AF2_1_BIT({{89, 6}});
44 constexpr double FNAV_AF2_1_LSB = TWO_N59;
45 const std::vector<std::pair<int32_t, int32_t>> FNAV_SISA_1_BIT({{95, 8}});
46 const std::vector<std::pair<int32_t, int32_t>> FNAV_AI0_1_BIT({{103, 11}});
47 constexpr double FNAV_AI0_1_LSB = TWO_N2;
48 const std::vector<std::pair<int32_t, int32_t>> FNAV_AI1_1_BIT({{114, 11}});
49 constexpr double FNAV_AI1_1_LSB = TWO_N8;
50 const std::vector<std::pair<int32_t, int32_t>> FNAV_AI2_1_BIT({{125, 14}});
51 constexpr double FNAV_AI2_1_LSB = TWO_N15;
52 const std::vector<std::pair<int32_t, int32_t>> FNAV_REGION1_1_BIT({{139, 1}});
53 const std::vector<std::pair<int32_t, int32_t>> FNAV_REGION2_1_BIT({{140, 1}});
54 const std::vector<std::pair<int32_t, int32_t>> FNAV_REGION3_1_BIT({{141, 1}});
55 const std::vector<std::pair<int32_t, int32_t>> FNAV_REGION4_1_BIT({{142, 1}});
56 const std::vector<std::pair<int32_t, int32_t>> FNAV_REGION5_1_BIT({{143, 1}});
57 const std::vector<std::pair<int32_t, int32_t>> FNAV_BGD_1_BIT({{144, 10}});
58 constexpr double FNAV_BGD_1_LSB = TWO_N32;
59 const std::vector<std::pair<int32_t, int32_t>> FNAV_E5AHS_1_BIT({{154, 2}});
60 const std::vector<std::pair<int32_t, int32_t>> FNAV_WN_1_BIT({{156, 12}});
61 const std::vector<std::pair<int32_t, int32_t>> FNAV_TOW_1_BIT({{168, 20}});
62 const std::vector<std::pair<int32_t, int32_t>> FNAV_E5ADVS_1_BIT({{188, 1}});
63 
64 // WORD 2 Ephemeris (1/3)
65 const std::vector<std::pair<int32_t, int32_t>> FNAV_IO_DNAV_2_BIT({{7, 10}});
66 const std::vector<std::pair<int32_t, int32_t>> FNAV_M0_2_BIT({{17, 32}});
67 constexpr double FNAV_M0_2_LSB = PI_TWO_N31;
68 const std::vector<std::pair<int32_t, int32_t>> FNAV_OMEGADOT_2_BIT({{49, 24}});
69 constexpr double FNAV_OMEGADOT_2_LSB = PI_TWO_N43;
70 const std::vector<std::pair<int32_t, int32_t>> FNAV_E_2_BIT({{73, 32}});
71 constexpr double FNAV_E_2_LSB = TWO_N33;
72 const std::vector<std::pair<int32_t, int32_t>> FNAV_A12_2_BIT({{105, 32}});
73 constexpr double FNAV_A12_2_LSB = TWO_N19;
74 const std::vector<std::pair<int32_t, int32_t>> FNAV_OMEGA0_2_BIT({{137, 32}});
75 constexpr double FNAV_OMEGA0_2_LSB = PI_TWO_N31;
76 const std::vector<std::pair<int32_t, int32_t>> FNAV_IDOT_2_BIT({{169, 14}});
77 constexpr double FNAV_IDOT_2_LSB = PI_TWO_N43;
78 const std::vector<std::pair<int32_t, int32_t>> FNAV_WN_2_BIT({{183, 12}});
79 const std::vector<std::pair<int32_t, int32_t>> FNAV_TOW_2_BIT({{195, 20}});
80 
81 // WORD 3 Ephemeris (2/3)
82 const std::vector<std::pair<int32_t, int32_t>> FNAV_IO_DNAV_3_BIT({{7, 10}});
83 const std::vector<std::pair<int32_t, int32_t>> FNAV_I0_3_BIT({{17, 32}});
84 constexpr double FNAV_I0_3_LSB = PI_TWO_N31;
85 const std::vector<std::pair<int32_t, int32_t>> FNAV_W_3_BIT({{49, 32}});
86 constexpr double FNAV_W_3_LSB = PI_TWO_N31;
87 const std::vector<std::pair<int32_t, int32_t>> FNAV_DELTAN_3_BIT({{81, 16}});
88 constexpr double FNAV_DELTAN_3_LSB = PI_TWO_N43;
89 const std::vector<std::pair<int32_t, int32_t>> FNAV_CUC_3_BIT({{97, 16}});
90 constexpr double FNAV_CUC_3_LSB = TWO_N29;
91 const std::vector<std::pair<int32_t, int32_t>> FNAV_CUS_3_BIT({{113, 16}});
92 constexpr double FNAV_CUS_3_LSB = TWO_N29;
93 const std::vector<std::pair<int32_t, int32_t>> FNAV_CRC_3_BIT({{129, 16}});
94 constexpr double FNAV_CRC_3_LSB = TWO_N5;
95 const std::vector<std::pair<int32_t, int32_t>> FNAV_CRS_3_BIT({{145, 16}});
96 constexpr double FNAV_CRS_3_LSB = TWO_N5;
97 const std::vector<std::pair<int32_t, int32_t>> FNAV_T0E_3_BIT({{161, 14}});
98 constexpr int32_t FNAV_T0E_3_LSB = 60;
99 const std::vector<std::pair<int32_t, int32_t>> FNAV_WN_3_BIT({{175, 12}});
100 const std::vector<std::pair<int32_t, int32_t>> FNAV_TOW_3_BIT({{187, 20}});
101 
102 // WORD 4 Ephemeris (3/3)
103 const std::vector<std::pair<int32_t, int32_t>> FNAV_IO_DNAV_4_BIT({{7, 10}});
104 const std::vector<std::pair<int32_t, int32_t>> FNAV_CIC_4_BIT({{17, 16}});
105 constexpr double FNAV_CIC_4_LSB = TWO_N29;
106 const std::vector<std::pair<int32_t, int32_t>> FNAV_CIS_4_BIT({{33, 16}});
107 constexpr double FNAV_CIS_4_LSB = TWO_N29;
108 const std::vector<std::pair<int32_t, int32_t>> FNAV_A0_4_BIT({{49, 32}});
109 constexpr double FNAV_A0_4_LSB = TWO_N30;
110 const std::vector<std::pair<int32_t, int32_t>> FNAV_A1_4_BIT({{81, 24}});
111 constexpr double FNAV_A1_4_LSB = TWO_N50;
112 const std::vector<std::pair<int32_t, int32_t>> FNAV_DELTATLS_4_BIT({{105, 8}});
113 const std::vector<std::pair<int32_t, int32_t>> FNAV_T0T_4_BIT({{113, 8}});
114 constexpr int32_t FNAV_T0T_4_LSB = 3600;
115 const std::vector<std::pair<int32_t, int32_t>> FNAV_W_NOT_4_BIT({{121, 8}});
116 const std::vector<std::pair<int32_t, int32_t>> FNAV_W_NLSF_4_BIT({{129, 8}});
117 const std::vector<std::pair<int32_t, int32_t>> FNAV_DN_4_BIT({{137, 3}});
118 const std::vector<std::pair<int32_t, int32_t>> FNAV_DELTATLSF_4_BIT({{140, 8}});
119 const std::vector<std::pair<int32_t, int32_t>> FNAV_T0G_4_BIT({{148, 8}});
120 constexpr int32_t FNAV_T0G_4_LSB = 3600;
121 const std::vector<std::pair<int32_t, int32_t>> FNAV_A0G_4_BIT({{156, 16}});
122 constexpr double FNAV_A0G_4_LSB = TWO_N35;
123 const std::vector<std::pair<int32_t, int32_t>> FNAV_A1G_4_BIT({{172, 12}});
124 constexpr double FNAV_A1G_4_LSB = TWO_N51;
125 const std::vector<std::pair<int32_t, int32_t>> FNAV_W_N0G_4_BIT({{184, 6}});
126 const std::vector<std::pair<int32_t, int32_t>> FNAV_TOW_4_BIT({{190, 20}});
127 
128 // WORD 5 Almanac SVID1 SVID2(1/2)
129 const std::vector<std::pair<int32_t, int32_t>> FNAV_IO_DA_5_BIT({{7, 4}});
130 const std::vector<std::pair<int32_t, int32_t>> FNAV_W_NA_5_BIT({{11, 2}});
131 const std::vector<std::pair<int32_t, int32_t>> FNAV_T0A_5_BIT({{13, 10}});
132 constexpr int32_t FNAV_T0A_5_LSB = 600;
133 const std::vector<std::pair<int32_t, int32_t>> FNAV_SVI_D1_5_BIT({{23, 6}});
134 const std::vector<std::pair<int32_t, int32_t>> FNAV_DELTAA12_1_5_BIT({{29, 13}});
135 constexpr double FNAV_DELTAA12_5_LSB = TWO_N9;
136 const std::vector<std::pair<int32_t, int32_t>> FNAV_E_1_5_BIT({{42, 11}});
137 constexpr double FNAV_E_5_LSB = TWO_N16;
138 const std::vector<std::pair<int32_t, int32_t>> FNAV_W_1_5_BIT({{53, 16}});
139 constexpr double FNAV_W_5_LSB = TWO_N15;
140 const std::vector<std::pair<int32_t, int32_t>> FNAV_DELTAI_1_5_BIT({{69, 11}});
141 constexpr double FNAV_DELTAI_5_LSB = TWO_N14;
142 const std::vector<std::pair<int32_t, int32_t>> FNAV_OMEGA0_1_5_BIT({{80, 16}});
143 constexpr double FNAV_OMEGA0_5_LSB = TWO_N15;
144 const std::vector<std::pair<int32_t, int32_t>> FNAV_OMEGADOT_1_5_BIT({{96, 11}});
145 constexpr double FNAV_OMEGADOT_5_LSB = TWO_N33;
146 const std::vector<std::pair<int32_t, int32_t>> FNAV_M0_1_5_BIT({{107, 16}});
147 constexpr double FNAV_M0_5_LSB = TWO_N15;
148 const std::vector<std::pair<int32_t, int32_t>> FNAV_AF0_1_5_BIT({{123, 16}});
149 constexpr double FNAV_AF0_5_LSB = TWO_N19;
150 const std::vector<std::pair<int32_t, int32_t>> FNAV_AF1_1_5_BIT({{139, 13}});
151 constexpr double FNAV_AF1_5_LSB = TWO_N38;
152 const std::vector<std::pair<int32_t, int32_t>> FNAV_E5AHS_1_5_BIT({{152, 2}});
153 const std::vector<std::pair<int32_t, int32_t>> FNAV_SVI_D2_5_BIT({{154, 6}});
154 const std::vector<std::pair<int32_t, int32_t>> FNAV_DELTAA12_2_5_BIT({{160, 13}});
155 const std::vector<std::pair<int32_t, int32_t>> FNAV_E_2_5_BIT({{173, 11}});
156 const std::vector<std::pair<int32_t, int32_t>> FNAV_W_2_5_BIT({{184, 16}});
157 const std::vector<std::pair<int32_t, int32_t>> FNAV_DELTAI_2_5_BIT({{200, 11}});
158 // const std::vector<std::pair<int,int>> FNAV_Omega012_2_5_bit({{210,4}});
159 
160 // WORD 6 Almanac SVID2(1/2) SVID3
161 const std::vector<std::pair<int32_t, int32_t>> FNAV_IO_DA_6_BIT({{7, 4}});
162 // const std::vector<std::pair<int,int>> FNAV_Omega022_2_6_bit({{10,12}});
163 const std::vector<std::pair<int32_t, int32_t>> FNAV_OMEGADOT_2_6_BIT({{23, 11}});
164 const std::vector<std::pair<int32_t, int32_t>> FNAV_M0_2_6_BIT({{34, 16}});
165 const std::vector<std::pair<int32_t, int32_t>> FNAV_AF0_2_6_BIT({{50, 16}});
166 const std::vector<std::pair<int32_t, int32_t>> FNAV_AF1_2_6_BIT({{66, 13}});
167 const std::vector<std::pair<int32_t, int32_t>> FNAV_E5AHS_2_6_BIT({{79, 2}});
168 const std::vector<std::pair<int32_t, int32_t>> FNAV_SVI_D3_6_BIT({{81, 6}});
169 const std::vector<std::pair<int32_t, int32_t>> FNAV_DELTAA12_3_6_BIT({{87, 13}});
170 const std::vector<std::pair<int32_t, int32_t>> FNAV_E_3_6_BIT({{100, 11}});
171 const std::vector<std::pair<int32_t, int32_t>> FNAV_W_3_6_BIT({{111, 16}});
172 const std::vector<std::pair<int32_t, int32_t>> FNAV_DELTAI_3_6_BIT({{127, 11}});
173 const std::vector<std::pair<int32_t, int32_t>> FNAV_OMEGA0_3_6_BIT({{138, 16}});
174 const std::vector<std::pair<int32_t, int32_t>> FNAV_OMEGADOT_3_6_BIT({{154, 11}});
175 const std::vector<std::pair<int32_t, int32_t>> FNAV_M0_3_6_BIT({{165, 16}});
176 const std::vector<std::pair<int32_t, int32_t>> FNAV_AF0_3_6_BIT({{181, 16}});
177 const std::vector<std::pair<int32_t, int32_t>> FNAV_AF1_3_6_BIT({{197, 13}});
178 const std::vector<std::pair<int32_t, int32_t>> FNAV_E5AHS_3_6_BIT({{210, 2}});
179 
180 
181 /** \} */
182 /** \} */
183 #endif // GNSS_SDR_GALILEO_FNAV_H
constexpr double TWO_N59
2^-59
constexpr double TWO_N5
2^-5
constexpr double TWO_N8
2^-8
constexpr double TWO_N50
2^-50
constexpr double TWO_N16
2^-16
constexpr double TWO_N33
2^-33
constexpr double TWO_N32
2^-32
constexpr double TWO_N14
2^-14
constexpr double PI_TWO_N43
Pi*2^-43.
constexpr double TWO_N38
2^-38
constexpr double PI_TWO_N31
Pi*2^-31.
constexpr double TWO_N35
2^-35
Defines useful mathematical constants and their scaled versions.
constexpr double TWO_N30
2^-30
constexpr double TWO_N46
2^-46
constexpr double TWO_N51
2^-51
constexpr double TWO_N34
2^-34
constexpr double TWO_N9
2^-9
constexpr double TWO_N29
2^-29
constexpr double TWO_N19
2^-19
constexpr double TWO_N2
2^-2
constexpr double TWO_N15
2^-15