2020#define ID_RAWSATEPH 61 /* raw satellite ephemeris */
2121
2222/* ANPP satellite system IDs (packets 60/61 sys field) */
23- #define ANPP_SYS_GPS 1
24- #define ANPP_SYS_GLO 2
25- #define ANPP_SYS_BDS 3
26- #define ANPP_SYS_GAL 4
27- #define ANPP_SYS_SBS 5
28- #define ANPP_SYS_QZS 6
23+ #define ANPP_SYS_UNK 0 // Unknown
24+ #define ANPP_SYS_GPS 1 // GPS
25+ #define ANPP_SYS_GLO 2 // GLONASS
26+ #define ANPP_SYS_BDS 3 // BeiDou
27+ #define ANPP_SYS_GAL 4 // Galileo
28+ #define ANPP_SYS_SBS 5 // SBAS
29+ #define ANPP_SYS_QZS 6 // QZSS
30+ // 7 // Reserved
31+ #define ANPP_SYS_OMN 8 // OmniStar
32+ // 9 // Reserved
33+ #define ANPP_SYS_NAV 10 // NavIC
2934
3035/* packet 61 payload lengths */
3136#define EPH_LEN_GPS 132 /* GPS ephemeris */
@@ -58,10 +63,8 @@ typedef struct {
5863/* init/free -----------------------------------------------------------------*/
5964extern int init_anpp (raw_t * raw )
6065{
61- anpp_t * anpp ;
62-
6366 if (raw -> format != STRFMT_ANPP ) return 0 ;
64- anpp = ( anpp_t * ) calloc (1 , sizeof (anpp_t ));
67+ anpp_t * anpp = calloc (1 , sizeof (anpp_t ));
6568 if (!anpp ) {
6669 trace (0 , "init_anpp: memory allocation error\n" );
6770 return 0 ;
@@ -72,10 +75,8 @@ extern int init_anpp(raw_t *raw)
7275
7376extern void free_anpp (raw_t * raw )
7477{
75- anpp_t * anpp ;
76-
7778 if (raw -> format != STRFMT_ANPP ) return ;
78- anpp = ( anpp_t * ) raw -> rcv_data ;
79+ anpp_t * anpp = raw -> rcv_data ;
7980 if (anpp ) {
8081 free (anpp );
8182 raw -> rcv_data = NULL ;
@@ -85,12 +86,10 @@ extern void free_anpp(raw_t *raw)
8586/* initialize one obs buffer slot --------------------------------------------*/
8687static void init_obsd_anpp (gtime_t time , int sat , obsd_t * data )
8788{
88- int i ;
89-
9089 data -> time = time ;
9190 data -> sat = (uint8_t )sat ;
9291
93- for (i = 0 ; i < NFREQ + NEXOBS ; i ++ ) {
92+ for (int i = 0 ; i < NFREQ + NEXOBS ; i ++ ) {
9493 data -> L [i ] = data -> P [i ] = 0.0 ;
9594 data -> D [i ] = data -> SNR [i ] = 0.0 ;
9695 data -> Lstd [i ] = data -> Pstd [i ] = 0.0 ;
@@ -102,21 +101,20 @@ static void init_obsd_anpp(gtime_t time, int sat, obsd_t *data)
102101/* flush observation data buffer ---------------------------------------------*/
103102static int flush_obuf_anpp (raw_t * raw )
104103{
105- int i , j , n = 0 ;
106-
107104 trace (3 , "flush_obuf_anpp: n=%d\n" , raw -> obuf .n );
108105
109- for (i = 0 ; i < raw -> obuf .n && i < MAXOBS ; i ++ ) {
106+ int n = 0 ;
107+ for (int i = 0 ; i < raw -> obuf .n && i < MAXOBS ; i ++ ) {
110108 if (!satsys (raw -> obuf .data [i ].sat , NULL )) continue ;
111109 if (raw -> obuf .data [i ].time .time == 0 ) continue ;
112110 raw -> obs .data [n ++ ] = raw -> obuf .data [i ];
113111 }
114112 raw -> obs .n = n ;
115113
116- for (i = 0 ; i < MAXOBS ; i ++ ) {
114+ for (int i = 0 ; i < MAXOBS ; i ++ ) {
117115 raw -> obuf .data [i ].time .time = 0 ;
118116 raw -> obuf .data [i ].time .sec = 0.0 ;
119- for (j = 0 ; j < NFREQ + NEXOBS ; j ++ ) {
117+ for (int j = 0 ; j < NFREQ + NEXOBS ; j ++ ) {
120118 raw -> obuf .data [i ].L [j ] = raw -> obuf .data [i ].P [j ] = 0.0 ;
121119 raw -> obuf .data [i ].D [j ] = raw -> obuf .data [i ].SNR [j ] = 0.0 ;
122120 raw -> obuf .data [i ].Lstd [j ] = raw -> obuf .data [i ].Pstd [j ] = 0.0 ;
@@ -131,12 +129,15 @@ static int flush_obuf_anpp(raw_t *raw)
131129static int anpp2sys (uint8_t anpp_sys )
132130{
133131 switch (anpp_sys ) {
132+ case ANPP_SYS_UNK : return SYS_NONE ;
134133 case ANPP_SYS_GPS : return SYS_GPS ;
135134 case ANPP_SYS_GLO : return SYS_GLO ;
136135 case ANPP_SYS_BDS : return SYS_CMP ;
137136 case ANPP_SYS_GAL : return SYS_GAL ;
138137 case ANPP_SYS_SBS : return SYS_SBS ;
139138 case ANPP_SYS_QZS : return SYS_QZS ;
139+ case ANPP_SYS_OMN : return SYS_SBS ;
140+ case ANPP_SYS_NAV : return SYS_IRN ;
140141 }
141142 return SYS_NONE ;
142143}
@@ -147,70 +148,91 @@ static uint8_t anpp2code(uint8_t anpp_sys, uint8_t freq_code)
147148 switch (anpp_sys ) {
148149 case ANPP_SYS_GPS :
149150 switch (freq_code ) {
150- case 0 : return CODE_L1C ; /* L1 C/A */
151- case 1 : return CODE_L2X ; /* L2C */
152- case 2 : return CODE_L5X ; /* L5 */
151+ case 1 : return CODE_L1C ; /* L1 C/A */
152+ case 2 : return CODE_L1C ; /* L1 C */
153+ case 3 : return CODE_L1P ; /* L1 P */
154+ case 4 : return CODE_L1M ; /* L1 M */
155+ case 5 : return CODE_L2C ; /* L2 C */
156+ case 6 : return CODE_L2P ; /* L2 P */
157+ case 7 : return CODE_L2M ; /* L2 M */
158+ case 8 : return CODE_L5X ; /* L5 */
153159 }
154160 break ;
155161 case ANPP_SYS_GLO :
156162 switch (freq_code ) {
157- case 0 : return CODE_L1C ; /* G1 C/A */
158- case 1 : return CODE_L2C ; /* G2 C/A */
163+ case 1 : return CODE_L1C ; /* G1 C/A */
164+ case 3 : return CODE_L1P ; /* G1 P */
165+ case 5 : return CODE_L2C ; /* G2 C/A */
166+ case 6 : return CODE_L2P ; /* G2 P */
167+ case 8 : return CODE_L3X ; /* G3 */
159168 }
160169 break ;
161- case ANPP_SYS_BDS :
170+ case ANPP_SYS_GAL :
162171 switch (freq_code ) {
163- case 0 : return CODE_L2I ; /* B1I */
164- case 1 : return CODE_L7I ; /* B2I */
165- case 2 : return CODE_L6I ; /* B3I */
172+ case 1 : return CODE_L1C ; /* E1 OS ?? */
173+ case 2 : return CODE_L1P ; /* E1 PRS */
174+ case 5 : return CODE_L6C ; /* E6 CS ?? */
175+ case 6 : return CODE_L6X ; /* E6 PRS ?? */
176+ case 8 : return CODE_L5X ; /* E5 a */
177+ case 9 : return CODE_L7X ; /* E5 b */
178+ case 10 : return CODE_L8X ; /* E5 a+b */
166179 }
167180 break ;
168- case ANPP_SYS_GAL :
181+ case ANPP_SYS_BDS :
169182 switch (freq_code ) {
170- case 0 : return CODE_L1X ; /* E1 B+C */
171- case 1 : return CODE_L5X ; /* E5a */
172- case 2 : return CODE_L7X ; /* E5b */
173- case 3 : return CODE_L6X ; /* E6 */
183+ case 1 : return CODE_L1N ; /* B1 */
184+ case 5 : return CODE_L7X ; /* B2 ?? */
185+ case 8 : return CODE_L6X ; /* B3 ?? */
174186 }
175187 break ;
176188 case ANPP_SYS_SBS :
177189 switch (freq_code ) {
178- case 0 : return CODE_L1C ; /* L1 */
179- case 1 : return CODE_L5I ; /* L5 */
190+ case 1 : return CODE_L1C ; /* L1 C/A */
191+ case 8 : return CODE_L5X ; /* L5 */
180192 }
181193 break ;
182194 case ANPP_SYS_QZS :
183195 switch (freq_code ) {
184- case 0 : return CODE_L1C ; /* L1 */
185- case 1 : return CODE_L2X ; /* L2C */
186- case 2 : return CODE_L5X ; /* L5 */
196+ case 1 : return CODE_L1C ; /* L1 C/A */
197+ case 2 : return CODE_L1C ; /* L2 C */
198+ case 3 : return CODE_L1Z ; /* L1 SAIF */
199+ case 5 : return CODE_L2X ; /* L2 C */
200+ case 6 : return CODE_L6X ; /* LEX */
201+ case 8 : return CODE_L5Z ; /* L5 ?? */
187202 }
188203 break ;
204+ case ANPP_SYS_OMN :
205+ switch (freq_code ) {
206+ case 0 : return CODE_L1C ; /* L1 C/A */
207+ }
208+ case ANPP_SYS_NAV :
209+ switch (freq_code ) {
210+ case 8 : return CODE_L5A ; /* L5 ?? */
211+ }
189212 }
190213 return CODE_NONE ;
191214}
192215
193216/* find or allocate-and-init obs buffer slot for satellite -------------------*/
194217static int obuf_slot (raw_t * raw , gtime_t time , int sat )
195218{
196- int i ;
197-
198- for (i = 0 ; i < raw -> obuf .n ; i ++ ) {
219+ for (int i = 0 ; i < raw -> obuf .n ; i ++ ) {
199220 if (raw -> obuf .data [i ].sat == sat ) return i ;
200221 }
201222 if (raw -> obuf .n >= MAXOBS ) {
202223 trace (2 , "obuf_slot: buffer full sat=%d\n" , sat );
203224 return -1 ;
204225 }
205- i = raw -> obuf .n ++ ;
206- init_obsd_anpp (time , sat , & raw -> obuf .data [i ]);
207- return i ;
226+
227+ int n = raw -> obuf .n ++ ;
228+ init_obsd_anpp (time , sat , & raw -> obuf .data [n ]);
229+ return n ;
208230}
209231
210232/* packet 20/21: cache epoch time --------------------------------------------*/
211233static int decode_systemstate (raw_t * raw )
212234{
213- anpp_t * anpp = ( anpp_t * ) raw -> rcv_data ;
235+ anpp_t * anpp = raw -> rcv_data ;
214236 uint8_t * p = raw -> buff + 5 ;
215237
216238 if (raw -> len < 5 + 100 ) {
@@ -239,30 +261,28 @@ static int decode_unixtime(raw_t *raw)
239261/* packet 60: raw satellite data (observations) ------------------------------*/
240262static int decode_rawsatdata (raw_t * raw )
241263{
264+ int ret = 0 ;
265+
242266 anpp_t * anpp = (anpp_t * )raw -> rcv_data ;
243267 uint8_t * p = raw -> buff + 5 ;
244268 uint8_t * end = raw -> buff + raw -> len ;
245- gtime_t time ;
246- uint32_t unix_time , nanoseconds ;
247- uint8_t receiver_number , packet_number , total_packets ;
248- uint8_t nsats , sys_id , freq_id , trks , nfreqs ;
249- int i , sat , sys , idx , n , ret = 0 , rcvr_sel = 0 ;
250- uint8_t code ;
251- char * q ;
252269
253270 if (raw -> len < 5 + 16 ) {
254271 trace (2 , "decode_rawsatdata: short packet len=%d\n" , raw -> len );
255272 return 0 ;
256273 }
257- unix_time = U4 (p );
258- nanoseconds = U4 (p + 4 );
259- receiver_number = U1 (p + 12 );
260- packet_number = U1 (p + 13 );
261- total_packets = U1 (p + 14 );
262- nsats = U1 (p + 15 );
274+
275+ uint32_t unix_time = U4 (p );
276+ uint32_t nanoseconds = U4 (p + 4 );
277+ uint8_t receiver_number = U1 (p + 12 );
278+ uint8_t packet_number = U1 (p + 13 );
279+ uint8_t total_packets = U1 (p + 14 );
280+ uint8_t nsats = U1 (p + 15 );
263281
264282 /* select which receiver_number to emit: parse -RCVR<n> from raw->opt
265283 (default 0) */
284+ char * q ;
285+ int rcvr_sel = 0 ;
266286 if ((q = strstr (raw -> opt , "-RCVR" )) != NULL ) sscanf (q + 5 , "%d" , & rcvr_sel );
267287
268288 /* skip fragments from antennae we are not interested in */
@@ -277,6 +297,7 @@ static int decode_rawsatdata(raw_t *raw)
277297 }
278298
279299 /* start a fresh epoch if no assembly is in progress */
300+ gtime_t time ;
280301 if (!anpp -> epoch_active ) {
281302 time .time = (time_t )unix_time ;
282303 time .sec = nanoseconds * 1e-9 ;
@@ -289,29 +310,29 @@ static int decode_rawsatdata(raw_t *raw)
289310
290311 p += 16 ;
291312
292- for (i = 0 ; i < nsats && p + 6 <= end ; i ++ ) {
293- sys_id = U1 (p );
294- sys = anpp2sys (sys_id );
295- sat = satno (sys , U1 (p + 1 ));
296- nfreqs = U1 (p + 5 );
313+ for (int i = 0 ; i < nsats && p + 6 <= end ; i ++ ) {
314+ uint8_t sys_id = U1 (p );
315+ int sys = anpp2sys (sys_id );
316+ int sat = satno (sys , U1 (p + 1 ));
317+ uint8_t nfreqs = U1 (p + 5 );
297318 p += 6 ;
298319
299320 if (sat == 0 ) {
300321 p += nfreqs * 26 ;
301322 continue ;
302323 }
303- n = obuf_slot (raw , raw -> time , sat );
324+ int n = obuf_slot (raw , raw -> time , sat );
304325 if (n < 0 ) {
305326 p += nfreqs * 26 ;
306327 continue ;
307328 }
308329
309330 for (; nfreqs > 0 && p + 26 <= end ; nfreqs -- , p += 26 ) {
310- freq_id = U1 (p );
311- trks = U1 (p + 1 );
312- code = anpp2code (sys_id , freq_id );
331+ uint8_t freq_id = U1 (p );
332+ uint8_t trks = U1 (p + 1 );
333+ uint8_t code = anpp2code (sys_id , freq_id );
313334 if (code == CODE_NONE ) continue ;
314- idx = code2idx (sys , code );
335+ int idx = code2idx (sys , code );
315336 if (idx < 0 || idx >= NFREQ + NEXOBS ) continue ;
316337
317338 if (trks & TRKS_CARRIER ) {
@@ -455,11 +476,9 @@ static int decode_rawsateph(raw_t *raw)
455476static uint16_t crc_ccitt (const uint8_t * buff , int len )
456477{
457478 uint16_t crc = 0xFFFF ;
458- int i , j ;
459-
460- for (i = 0 ; i < len ; i ++ ) {
479+ for (int i = 0 ; i < len ; i ++ ) {
461480 crc ^= (uint16_t )buff [i ] << 8 ;
462- for (j = 0 ; j < 8 ; j ++ ) {
481+ for (int j = 0 ; j < 8 ; j ++ ) {
463482 crc = (crc & 0x8000 ) ? (crc << 1 ) ^ 0x1021 : crc << 1 ;
464483 }
465484 }
@@ -515,11 +534,11 @@ extern int input_anpp(raw_t *raw, uint8_t data)
515534
516535extern int input_anppf (raw_t * raw , FILE * fp )
517536{
518- int i , data , ret ;
537+ int data , ret ;
519538
520539 trace (4 , "input_anppf:\n" );
521540
522- for (i = 0 ; i < 4096 ; i ++ ) {
541+ for (int i = 0 ; i < 4096 ; i ++ ) {
523542 if ((data = fgetc (fp )) == EOF ) return -2 ;
524543 if ((ret = input_anpp (raw , (uint8_t )data )) != 0 ) return ret ;
525544 }
0 commit comments