source: ntrip/trunk/BNC/src/RTCM3/ephEncoder.cpp@ 10904

Last change on this file since 10904 was 10903, checked in by stuerze, 8 days ago

minor changes

File size: 17.2 KB
Line 
1
2#include "ephEncoder.h"
3
4using namespace std;
5
6
7// build up RTCM3 for GPS
8////////////////////////////////////////////////////////////////////////////
9int t_ephEncoder::RTCM3(const t_ephGPS& eph, unsigned char *buffer) {
10
11 unsigned char *startbuffer = buffer;
12 buffer= buffer+3;
13 int size = 0;
14 int numbits = 0;
15 unsigned long long bitbuffer = 0;
16 int ura = indexFromAccuracy(eph._ura, eph.system());
17 int L5Flag = 0;
18 int SFlag = 0;
19 int fitIntervalFlag = 0;
20
21 if (eph.system() == t_eph::QZSS) {
22 GPSADDBITS(12, 1044)
23 GPSADDBITS(4, eph._prn.number())
24 GPSADDBITS(16, static_cast<int>(eph._TOC.gpssec())>>4)
25 GPSADDBITSFLOAT(8, eph._clock_driftrate, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<25))
26 GPSADDBITSFLOAT(16, eph._clock_drift, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<13))
27 GPSADDBITSFLOAT(22, eph._clock_bias, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<1))
28 GPSADDBITS(8, static_cast<int>(eph._IODE))
29 GPSADDBITSFLOAT(16, eph._Crs, 1.0/static_cast<double>(1<<5))
30 GPSADDBITSFLOAT(16, eph._Delta_n, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<13))
31 GPSADDBITSFLOAT(32, eph._M0, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<1))
32 GPSADDBITSFLOAT(16, eph._Cuc, 1.0/static_cast<double>(1<<29))
33 GPSADDBITSFLOAT(32, eph._e, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<3))
34 GPSADDBITSFLOAT(16, eph._Cus, 1.0/static_cast<double>(1<<29))
35 GPSADDBITSFLOAT(32, eph._sqrt_A, 1.0/static_cast<double>(1<<19))
36 GPSADDBITS(16, static_cast<int>(eph._TOEsec)>>4)
37 GPSADDBITSFLOAT(16, eph._Cic, 1.0/static_cast<double>(1<<29))
38 GPSADDBITSFLOAT(32, eph._OMEGA0, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<1))
39 GPSADDBITSFLOAT(16, eph._Cis, 1.0/static_cast<double>(1<<29))
40 GPSADDBITSFLOAT(32, eph._i0, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<1))
41 GPSADDBITSFLOAT(16, eph._Crc, 1.0/static_cast<double>(1<<5))
42 GPSADDBITSFLOAT(32, eph._omega, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<1))
43 GPSADDBITSFLOAT(24, eph._OMEGADOT, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<13))
44 GPSADDBITSFLOAT(14, eph._IDOT, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<13))
45 GPSADDBITS(2,eph._L2Codes)
46 GPSADDBITS(10, eph._TOC.gpsw())
47 GPSADDBITS(4, ura)
48 GPSADDBITS(6, eph._health)
49 GPSADDBITSFLOAT(8, eph._TGD, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<1))
50 GPSADDBITS(10, eph._IODC)
51 (eph._fitInterval == 2.0) ? fitIntervalFlag = 0 : fitIntervalFlag = 1;
52 GPSADDBITS(1, fitIntervalFlag)
53 GPSADDBITS(3, 0) /* padding */
54 } else if (eph.system() == t_eph::NavIC) {
55 GPSADDBITS(12, 1041)
56 GPSADDBITS(6, eph._prn.number())
57 GPSADDBITS(10, eph._TOC.gpsw())
58 GPSADDBITSFLOAT(22, eph._clock_bias, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<1))
59 GPSADDBITSFLOAT(16, eph._clock_drift, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<13))
60 GPSADDBITSFLOAT(8, eph._clock_driftrate, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<25))
61 GPSADDBITS(4, ura)
62 GPSADDBITS(16, static_cast<int>(eph._TOC.gpssec())>>4)
63 GPSADDBITSFLOAT(8, eph._TGD, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<1))
64 GPSADDBITSFLOAT(22, eph._Delta_n, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<11))
65 GPSADDBITS(8, static_cast<int>(eph._IODE)) // Issue Of Data Ephemeris and Clock
66 GPSADDBITS(10, 0) /* padding */
67 if (eph._health == 0.0) {
68 L5Flag = 0;
69 SFlag = 0;
70 } else if (eph._health == 1.0) {
71 L5Flag = 0;
72 SFlag = 1;
73 } else if (eph._health == 2.0) {
74 L5Flag = 1;
75 SFlag = 0;
76 } else if (eph._health == 3.0) {
77 L5Flag = 1;
78 SFlag = 1;
79 }
80 GPSADDBITS(1, L5Flag)
81 GPSADDBITS(1, SFlag)
82 GPSADDBITSFLOAT(15, eph._Cuc, 1.0/static_cast<double>(1<<28))
83 GPSADDBITSFLOAT(15, eph._Cus, 1.0/static_cast<double>(1<<28))
84 GPSADDBITSFLOAT(15, eph._Cic, 1.0/static_cast<double>(1<<28))
85 GPSADDBITSFLOAT(15, eph._Cis, 1.0/static_cast<double>(1<<28))
86 GPSADDBITSFLOAT(15, eph._Crc, 1.0/static_cast<double>(1<< 4))
87 GPSADDBITSFLOAT(15, eph._Crs, 1.0/static_cast<double>(1<< 4))
88 GPSADDBITSFLOAT(14, eph._IDOT, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<13))
89 GPSADDBITSFLOAT(32, eph._M0, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<1))
90 GPSADDBITS(16, static_cast<int>(eph._TOEsec)>>4)
91 GPSADDBITSFLOAT(32, eph._e, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<3))
92 GPSADDBITSFLOAT(32, eph._sqrt_A, 1.0/static_cast<double>(1<<19))
93 GPSADDBITSFLOAT(32, eph._OMEGA0, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<1))
94 GPSADDBITSFLOAT(32, eph._omega, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<1))
95 GPSADDBITSFLOAT(22, eph._OMEGADOT, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<11))
96 GPSADDBITSFLOAT(32, eph._i0, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<1))
97 GPSADDBITS(2, static_cast<int>(eph._s_bits_after_IDOT))
98 GPSADDBITS(2, static_cast<int>(eph._s_bits_after_i0))
99 GPSADDBITS(6, 0) /* padding */
100 } else {
101 GPSADDBITS(12, 1019)
102 GPSADDBITS(6,eph._prn.number())
103 GPSADDBITS(10, eph._TOC.gpsw())
104 GPSADDBITS(4, ura)
105 GPSADDBITS(2,eph._L2Codes)
106 GPSADDBITSFLOAT(14, eph._IDOT, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<13))
107 GPSADDBITS(8, static_cast<int>(eph._IODE))
108 GPSADDBITS(16, static_cast<int>(eph._TOC.gpssec())>>4)
109 GPSADDBITSFLOAT(8, eph._clock_driftrate, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<25))
110 GPSADDBITSFLOAT(16, eph._clock_drift, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<13))
111 GPSADDBITSFLOAT(22, eph._clock_bias, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<1))
112 GPSADDBITS(10, eph._IODC)
113 GPSADDBITSFLOAT(16, eph._Crs, 1.0/static_cast<double>(1<<5))
114 GPSADDBITSFLOAT(16, eph._Delta_n, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<13))
115 GPSADDBITSFLOAT(32, eph._M0, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<1))
116 GPSADDBITSFLOAT(16, eph._Cuc, 1.0/static_cast<double>(1<<29))
117 GPSADDBITSFLOAT(32, eph._e, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<3))
118 GPSADDBITSFLOAT(16, eph._Cus, 1.0/static_cast<double>(1<<29))
119 GPSADDBITSFLOAT(32, eph._sqrt_A, 1.0/static_cast<double>(1<<19))
120 GPSADDBITS(16, static_cast<int>(eph._TOEsec)>>4)
121 GPSADDBITSFLOAT(16, eph._Cic, 1.0/static_cast<double>(1<<29))
122 GPSADDBITSFLOAT(32, eph._OMEGA0, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<1))
123 GPSADDBITSFLOAT(16, eph._Cis, 1.0/static_cast<double>(1<<29))
124 GPSADDBITSFLOAT(32, eph._i0, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<1))
125 GPSADDBITSFLOAT(16, eph._Crc, 1.0/static_cast<double>(1<<5))
126 GPSADDBITSFLOAT(32, eph._omega, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<1))
127 GPSADDBITSFLOAT(24, eph._OMEGADOT, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<13))
128 GPSADDBITSFLOAT(8, eph._TGD, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<1))
129 GPSADDBITS(6, eph._health)
130 GPSADDBITS(1, eph._L2PFlag)
131 (eph._fitInterval == 4.0) ? fitIntervalFlag = 0 : fitIntervalFlag = 1;
132 GPSADDBITS(1, fitIntervalFlag)
133 }
134
135 startbuffer[0]=0xD3;
136 startbuffer[1]=(size >> 8);
137 startbuffer[2]=size;
138 unsigned long i = CRC24(size+3, startbuffer);
139 buffer[size++] = i >> 16;
140 buffer[size++] = i >> 8;
141 buffer[size++] = i;
142 size += 3;
143 return size;
144}
145
146// build up RTCM3 for GLONASS
147////////////////////////////////////////////////////////////////////////////
148int t_ephEncoder::RTCM3(const t_ephGlo& eph, unsigned char *buffer)
149{
150
151 int size = 0;
152 int numbits = 0;
153 long long bitbuffer = 0;
154 unsigned char *startbuffer = buffer;
155 buffer= buffer+3;
156
157 GLONASSADDBITS(12, 1020)
158 GLONASSADDBITS(6, eph._prn.number())
159 GLONASSADDBITS(5, 7+eph._frq_num)
160 GLONASSADDBITS(1, eph._almanac_health)
161 GLONASSADDBITS(1, eph._almanac_health_availablility_indicator)
162 GLONASSADDBITS(2, eph._P1)
163 int tki = static_cast<int>(eph._tki)+3*60*60;
164 if (tki >= 86400) {tki -= 86400;}
165 GLONASSADDBITS(5, static_cast<int>(tki)/(60*60))
166 GLONASSADDBITS(6, (static_cast<int>(tki)/60)%60)
167 GLONASSADDBITS(1, (static_cast<int>(tki)/30)%30)
168 GLONASSADDBITS(1, eph._health)
169 GLONASSADDBITS(1, eph._P2)
170 unsigned long long timeofday = (static_cast<int>(eph._tt.gpssec()+3*60*60-eph._gps_utc)%86400);
171 GLONASSADDBITS(7, timeofday/60/15)
172 GLONASSADDBITSFLOATM(24, eph._x_vel*1000, 1000.0/static_cast<double>(1<<20))
173 GLONASSADDBITSFLOATM(27, eph._x_pos*1000, 1000.0/static_cast<double>(1<<11))
174 GLONASSADDBITSFLOATM(5, eph._x_acc*1000, 1000.0/static_cast<double>(1<<30))
175 GLONASSADDBITSFLOATM(24, eph._y_vel*1000, 1000.0/static_cast<double>(1<<20))
176 GLONASSADDBITSFLOATM(27, eph._y_pos*1000, 1000.0/static_cast<double>(1<<11))
177 GLONASSADDBITSFLOATM(5, eph._y_acc*1000, 1000.0/static_cast<double>(1<<30))
178 GLONASSADDBITSFLOATM(24, eph._z_vel*1000, 1000.0/static_cast<double>(1<<20))
179 GLONASSADDBITSFLOATM(27,eph._z_pos*1000, 1000.0/static_cast<double>(1<<11))
180 GLONASSADDBITSFLOATM(5, eph._z_acc*1000, 1000.0/static_cast<double>(1<<30))
181 GLONASSADDBITS(1, eph._P3)
182 GLONASSADDBITSFLOATM(11, eph._gamma, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<10))
183 GLONASSADDBITS(2, eph._M_P) /* GLONASS-M P */
184 GLONASSADDBITS(1, eph._M_l3) /* GLONASS-M ln(3) */
185 GLONASSADDBITSFLOATM(22, eph._tau, 1.0/static_cast<double>(1<<30))
186 GLONASSADDBITSFLOATM(5, eph._M_delta_tau, 1.0/static_cast<double>(1<<30)) /* GLONASS-M delta tau */
187 GLONASSADDBITS(5, eph._E)
188 GLONASSADDBITS(1, eph._M_P4) /* GLONASS-M P4 */
189 GLONASSADDBITS(4, eph._M_FT) /* GLONASS-M FT */
190 GLONASSADDBITS(11, eph._M_NT) /* GLONASS-M NT */
191 GLONASSADDBITS(2, eph._M_M) /* GLONASS-M active? */
192 GLONASSADDBITS(1, eph._additional_data_availability) /* GLONASS additional data */
193 GLONASSADDBITS(11, eph._M_NA) /* GLONASS NA */
194 GLONASSADDBITSFLOATM(32, eph._tauC, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<1)) /* GLONASS tau C */
195 GLONASSADDBITS(5, eph._M_N4) /* GLONASS-M N4 */
196 GLONASSADDBITSFLOATM(22, eph._M_tau_GPS, 1.0/static_cast<double>(1<<30)) /* GLONASS-M tau GPS */
197 GLONASSADDBITS(1, eph._M_l5) /* GLONASS-M ln(5) */
198 GLONASSADDBITS(7, 0) /* Reserved */
199
200 startbuffer[0]=0xD3;
201 startbuffer[1]=(size >> 8);
202 startbuffer[2]=size;
203 unsigned long i = CRC24(size+3, startbuffer);
204 buffer[size++] = i >> 16;
205 buffer[size++] = i >> 8;
206 buffer[size++] = i;
207 size += 3;
208 return size;
209}
210
211// build up RTCM3 for Galileo
212////////////////////////////////////////////////////////////////////////////
213int t_ephEncoder::RTCM3(const t_ephGal& eph, unsigned char *buffer) {
214 int size = 0;
215 int numbits = 0;
216 long long bitbuffer = 0;
217 unsigned char *startbuffer = buffer;
218 buffer= buffer+3;
219
220 int SISA = indexFromAccuracy(eph._SISA, eph.system());
221
222 GALILEOADDBITS(12, eph._inav ? 1046 : 1045)
223 GALILEOADDBITS(6, eph._prn.number())
224 GALILEOADDBITS(12, eph._TOC.galw())
225 GALILEOADDBITS(10, eph._IODnav)
226 GALILEOADDBITS(8, SISA)
227 GALILEOADDBITSFLOAT(14, eph._IDOT, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<13))
228 GALILEOADDBITS(14, eph._TOC.gpssec()/60)
229 GALILEOADDBITSFLOAT(6, eph._clock_driftrate, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<29))
230 GALILEOADDBITSFLOAT(21, eph._clock_drift, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<16))
231 GALILEOADDBITSFLOAT(31, eph._clock_bias, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<4))
232 GALILEOADDBITSFLOAT(16, eph._Crs, 1.0/static_cast<double>(1<<5))
233 GALILEOADDBITSFLOAT(16, eph._Delta_n, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<13))
234 GALILEOADDBITSFLOAT(32, eph._M0, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<1))
235 GALILEOADDBITSFLOAT(16, eph._Cuc, 1.0/static_cast<double>(1<<29))
236 GALILEOADDBITSFLOAT(32, eph._e, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<3))
237 GALILEOADDBITSFLOAT(16, eph._Cus, 1.0/static_cast<double>(1<<29))
238 GALILEOADDBITSFLOAT(32, eph._sqrt_A, 1.0/static_cast<double>(1<<19))
239 GALILEOADDBITS(14, eph._TOEsec/60)
240 GALILEOADDBITSFLOAT(16, eph._Cic, 1.0/static_cast<double>(1<<29))
241 GALILEOADDBITSFLOAT(32, eph._OMEGA0, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<1))
242 GALILEOADDBITSFLOAT(16, eph._Cis, 1.0/static_cast<double>(1<<29))
243 GALILEOADDBITSFLOAT(32, eph._i0, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<1))
244 GALILEOADDBITSFLOAT(16, eph._Crc, 1.0/static_cast<double>(1<<5))
245 GALILEOADDBITSFLOAT(32, eph._omega, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<1))
246 GALILEOADDBITSFLOAT(24, eph._OMEGADOT, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<13))
247 GALILEOADDBITSFLOAT(10, eph._BGD_1_5A, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<2))
248 if(eph._inav) {
249 GALILEOADDBITSFLOAT(10, eph._BGD_1_5B, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<2))
250 GALILEOADDBITS(2, static_cast<int>(eph._E5b_HS))
251 GALILEOADDBITS(1, eph._E5b_DataInvalid ? 1 : 0)
252 GALILEOADDBITS(2, static_cast<int>(eph._E1B_HS))
253 GALILEOADDBITS(1, eph._E1B_DataInvalid ? 1 : 0)
254 } else {
255 GALILEOADDBITS(2, static_cast<int>(eph._E5a_HS))
256 GALILEOADDBITS(1, eph._E5a_DataInvalid ? 1 : 0)
257 }
258
259 GALILEOADDBITS((eph._inav ? 2 : 7), 0)
260
261 startbuffer[0]=0xD3;
262 startbuffer[1]=(size >> 8);
263 startbuffer[2]=size;
264 unsigned long i = CRC24(size+3, startbuffer);
265 buffer[size++] = i >> 16;
266 buffer[size++] = i >> 8;
267 buffer[size++] = i;
268 size += 3;
269 return size;
270}
271
272// build up RTCM3 for SBAS
273////////////////////////////////////////////////////////////////////////////
274int t_ephEncoder::RTCM3(const t_ephSBAS& eph, unsigned char* buffer) {
275 int size = 0;
276 int numbits = 0;
277 long long bitbuffer = 0;
278 unsigned char *startbuffer = buffer;
279 buffer= buffer+3;
280
281 int ura = indexFromAccuracy(eph._ura, eph.system());
282 SBASADDBITS(12, 1043)
283 SBASADDBITS(6, eph._prn.number()-20)
284 SBASADDBITS(8, eph._IODN)
285 SBASADDBITS(13, static_cast<int>(eph._TOC.daysec())>>4)
286 SBASADDBITS(4, ura)
287 SBASADDBITSFLOAT(30, eph._x_pos, 0.08)
288 SBASADDBITSFLOAT(30, eph._y_pos, 0.08)
289 SBASADDBITSFLOAT(25, eph._z_pos, 0.4)
290 SBASADDBITSFLOAT(17, eph._x_vel, 0.000625)
291 SBASADDBITSFLOAT(17, eph._y_vel, 0.000625)
292 SBASADDBITSFLOAT(18, eph._z_vel, 0.004)
293 SBASADDBITSFLOAT(10, eph._x_acc, 0.0000125)
294 SBASADDBITSFLOAT(10, eph._y_acc, 0.0000125)
295 SBASADDBITSFLOAT(10, eph._z_acc, 0.0000625)
296 SBASADDBITSFLOAT(12, eph._agf0, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<1))
297 SBASADDBITSFLOAT(8, eph._agf1, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<10))
298 SBASADDBITS(2,0);
299
300 startbuffer[0]=0xD3;
301 startbuffer[1]=(size >> 8);
302 startbuffer[2]=size;
303 unsigned long i = CRC24(size+3, startbuffer);
304 buffer[size++] = i >> 16;
305 buffer[size++] = i >> 8;
306 buffer[size++] = i;
307 size += 3;
308 return size;
309}
310
311// build up RTCM3 for BDS
312////////////////////////////////////////////////////////////////////////////
313int t_ephEncoder::RTCM3(const t_ephBDS& eph, unsigned char* buffer) {
314 int size = 0;
315 int numbits = 0;
316 long long bitbuffer = 0;
317 unsigned char *startbuffer = buffer;
318 buffer= buffer+3;
319
320 int URAI = indexFromAccuracy(eph._ura, eph.system());
321 BDSADDBITS(12, 1042)
322 BDSADDBITS(6, eph._prn.number())
323 BDSADDBITS(13, eph._TOC.bdsw())
324 BDSADDBITS(4, URAI);
325 BDSADDBITSFLOAT(14, eph._IDOT, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<13))
326 BDSADDBITS(5, eph._AODE)
327 BDSADDBITS(17, static_cast<int>(eph._TOC.bdssec())>>3)
328 BDSADDBITSFLOAT(11, eph._clock_driftrate, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<30)/static_cast<double>(1<<6))
329 BDSADDBITSFLOAT(22, eph._clock_drift, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<20))
330 BDSADDBITSFLOAT(24, eph._clock_bias, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<3))
331 BDSADDBITS(5, eph._AODC)
332 BDSADDBITSFLOAT(18, eph._Crs, 1.0/static_cast<double>(1<<6))
333 BDSADDBITSFLOAT(16, eph._Delta_n, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<13))
334 BDSADDBITSFLOAT(32, eph._M0, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<1))
335 BDSADDBITSFLOAT(18, eph._Cuc, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<1))
336 BDSADDBITSFLOAT(32, eph._e, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<3))
337 BDSADDBITSFLOAT(18, eph._Cus, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<1))
338 BDSADDBITSFLOAT(32, eph._sqrt_A, 1.0/static_cast<double>(1<<19))
339 BDSADDBITS(17, static_cast<int>(eph._TOE.bdssec())>>3)
340 BDSADDBITSFLOAT(18, eph._Cic, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<1))
341 BDSADDBITSFLOAT(32, eph._OMEGA0, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<1))
342 BDSADDBITSFLOAT(18, eph._Cis, 1.0/static_cast<double>(1<<30)/static_cast<double>(1<<1))
343 BDSADDBITSFLOAT(32, eph._i0, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<1))
344 BDSADDBITSFLOAT(18, eph._Crc, 1.0/static_cast<double>(1<<6))
345 BDSADDBITSFLOAT(32, eph._omega, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<1))
346 BDSADDBITSFLOAT(24, eph._OMEGADOT, M_PI/static_cast<double>(1<<30)/static_cast<double>(1<<13))
347 BDSADDBITSFLOAT(10, eph._TGD1, 0.0000000001)
348 BDSADDBITSFLOAT(10, eph._TGD2, 0.0000000001)
349 BDSADDBITS(1, eph._SatH1)
350 BDSADDBITS(1, 0) /* reserved bit, fill up 8 bits */
351
352 startbuffer[0]=0xD3;
353 startbuffer[1]=(size >> 8);
354 startbuffer[2]=size;
355 unsigned long i = CRC24(size+3, startbuffer);
356 buffer[size++] = i >> 16;
357 buffer[size++] = i >> 8;
358 buffer[size++] = i;
359 size += 3;
360 return size;
361}
362
Note: See TracBrowser for help on using the repository browser.