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