Skip to content

Commit 258b23f

Browse files
committed
addressed review comments:
Fixed/added signal codes Added missing OmniStar and NavIC satellites/signals Simplified variable declarations Added to CMakeLists
1 parent a37a43a commit 258b23f

4 files changed

Lines changed: 101 additions & 77 deletions

File tree

src/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ endif()
2525
aux_source_directory(. DIR_SRCS_RTKLIB)
2626
set(DIR_SRCS_RTKLIB_RCV
2727
${DIR_SRCS_RTKLIB_RCV}
28+
rcv/adnav.c
2829
rcv/binex.c
2930
rcv/crescent.c
3031
rcv/javad.c

src/convrnx.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
* fix bug on screening time in screent_ttol()
4444
* fix bug on screening QZS L1S messages as SBAS
4545
* use integer types in stdint.h
46+
* 2026/05/19 1.16 support input format anpp
4647
*-----------------------------------------------------------------------------*/
4748
#include "rtklib.h"
4849

@@ -340,7 +341,10 @@ static int open_strfile(strfile_t *str, const char *file)
340341
static void close_strfile(strfile_t *str)
341342
{
342343
trace(3,"close_strfile:\n");
343-
if (str->fp) fclose(str->fp);
344+
if (str->fp) {
345+
fclose(str->fp);
346+
str->fp = NULL;
347+
}
344348
}
345349
/* set format and files in RINEX options comments ----------------------------*/
346350
static void setopt_file(int format, char **paths, int n, const int *mask,

src/rcv/adnav.c

Lines changed: 94 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,17 @@
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 -----------------------------------------------------------------*/
5964
extern 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

7376
extern 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 --------------------------------------------*/
8687
static 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 ---------------------------------------------*/
103102
static 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)
131129
static 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 -------------------*/
194217
static 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 --------------------------------------------*/
211233
static 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) ------------------------------*/
240262
static 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)
455476
static 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

516535
extern 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
}

src/rtklib.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,7 @@ extern "C" {
326326
#define CODE_L1B 11 /* obs code: E1B (GAL) */
327327
#define CODE_L1X 12 /* obs code: E1B+C,L1C(D+P),B1D+P (GAL,QZS,BDS) */
328328
#define CODE_L1Z 13 /* obs code: E1A+B+C,L1S (GAL,QZS) */
329-
#define CODE_L2C 14 /* obs code: L2C/A,G1C/A (GPS,GLO) */
329+
#define CODE_L2C 14 /* obs code: L2C/A,G2C/A (GPS,GLO) */
330330
#define CODE_L2D 15 /* obs code: L2 L1C/A-(P2-P1) (GPS) */
331331
#define CODE_L2S 16 /* obs code: L2C(M) (GPS,QZS) */
332332
#define CODE_L2L 17 /* obs code: L2C(L) (GPS,QZS) */

0 commit comments

Comments
 (0)