Skip to content

Commit 01ca384

Browse files
Merge pull request #643 from ourairquality/rtcm3-fix2
rtcm3: fix flushing of observation data
2 parents d600b0d + 7125b14 commit 01ca384

File tree

1 file changed

+15
-17
lines changed

1 file changed

+15
-17
lines changed

src/rtcm3.c

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,8 @@ static int decode_head1001(rtcm_t *rtcm, int *sync)
271271
char *msg,tstr[40];
272272
int i=24,staid,nsat,type;
273273

274+
if (rtcm->obsflag) rtcm->obs.n = rtcm->obsflag = 0;
275+
274276
type=getbitu(rtcm->buff,i,12); i+=12;
275277

276278
if (i+52<=rtcm->len*8) {
@@ -313,7 +315,7 @@ static int decode_type1002(rtcm_t *rtcm)
313315

314316
if ((nsat=decode_head1001(rtcm,&sync))<0) return -1;
315317

316-
for (j=0;j<nsat&&rtcm->obs.n<MAXOBS&&i+74<=rtcm->len*8;j++) {
318+
for (j=0;j<nsat&&i+74<=rtcm->len*8;j++) {
317319
prn =getbitu(rtcm->buff,i, 6); i+= 6;
318320
code =getbitu(rtcm->buff,i, 1); i+= 1;
319321
pr1 =getbitu(rtcm->buff,i,24); i+=24;
@@ -332,9 +334,7 @@ static int decode_type1002(rtcm_t *rtcm)
332334
continue;
333335
}
334336
tt=timediff(rtcm->obs.data[0].time,rtcm->time);
335-
if (rtcm->obsflag||fabs(tt)>1E-9) {
336-
rtcm->obs.n=rtcm->obsflag=0;
337-
}
337+
if (fabs(tt)>1E-9) rtcm->obs.n=rtcm->obsflag=0;
338338
if ((index=obsindex(&rtcm->obs,rtcm->time,sat))<0) continue;
339339
pr1=pr1*0.02+amb*PRUNIT_GPS;
340340
rtcm->obs.data[index].P[0]=pr1;
@@ -367,7 +367,7 @@ static int decode_type1004(rtcm_t *rtcm)
367367

368368
if ((nsat=decode_head1001(rtcm,&sync))<0) return -1;
369369

370-
for (j=0;j<nsat&&rtcm->obs.n<MAXOBS&&i+125<=rtcm->len*8;j++) {
370+
for (j=0;j<nsat&&i+125<=rtcm->len*8;j++) {
371371
prn =getbitu(rtcm->buff,i, 6); i+= 6;
372372
code1=getbitu(rtcm->buff,i, 1); i+= 1;
373373
pr1 =getbitu(rtcm->buff,i,24); i+=24;
@@ -391,9 +391,7 @@ static int decode_type1004(rtcm_t *rtcm)
391391
continue;
392392
}
393393
tt=timediff(rtcm->obs.data[0].time,rtcm->time);
394-
if (rtcm->obsflag||fabs(tt)>1E-9) {
395-
rtcm->obs.n=rtcm->obsflag=0;
396-
}
394+
if (fabs(tt)>1E-9) rtcm->obs.n=rtcm->obsflag=0;
397395
if ((index=obsindex(&rtcm->obs,rtcm->time,sat))<0) continue;
398396
pr1=pr1*0.02+amb*PRUNIT_GPS;
399397
rtcm->obs.data[index].P[0]=pr1;
@@ -579,6 +577,8 @@ static int decode_head1009(rtcm_t *rtcm, int *sync)
579577
char *msg,tstr[40];
580578
int i=24,staid,nsat,type;
581579

580+
if (rtcm->obsflag) rtcm->obs.n = rtcm->obsflag = 0;
581+
582582
type=getbitu(rtcm->buff,i,12); i+=12;
583583

584584
if (i+49<=rtcm->len*8) {
@@ -621,7 +621,7 @@ static int decode_type1010(rtcm_t *rtcm)
621621

622622
if ((nsat=decode_head1009(rtcm,&sync))<0) return -1;
623623

624-
for (j=0;j<nsat&&rtcm->obs.n<MAXOBS&&i+79<=rtcm->len*8;j++) {
624+
for (j=0;j<nsat&&i+79<=rtcm->len*8;j++) {
625625
prn =getbitu(rtcm->buff,i, 6); i+= 6;
626626
code =getbitu(rtcm->buff,i, 1); i+= 1;
627627
fcn =getbitu(rtcm->buff,i, 5); i+= 5; /* fcn+7 */
@@ -638,9 +638,7 @@ static int decode_type1010(rtcm_t *rtcm)
638638
rtcm->nav.glo_fcn[prn-1]=fcn-7+8; /* fcn+8 */
639639
}
640640
tt=timediff(rtcm->obs.data[0].time,rtcm->time);
641-
if (rtcm->obsflag||fabs(tt)>1E-9) {
642-
rtcm->obs.n=rtcm->obsflag=0;
643-
}
641+
if (fabs(tt)>1E-9) rtcm->obs.n=rtcm->obsflag=0;
644642
if ((index=obsindex(&rtcm->obs,rtcm->time,sat))<0) continue;
645643
pr1=pr1*0.02+amb*PRUNIT_GLO;
646644
rtcm->obs.data[index].P[0]=pr1;
@@ -673,7 +671,7 @@ static int decode_type1012(rtcm_t *rtcm)
673671

674672
if ((nsat=decode_head1009(rtcm,&sync))<0) return -1;
675673

676-
for (j=0;j<nsat&&rtcm->obs.n<MAXOBS&&i+130<=rtcm->len*8;j++) {
674+
for (j=0;j<nsat&&i+130<=rtcm->len*8;j++) {
677675
prn =getbitu(rtcm->buff,i, 6); i+= 6;
678676
code1=getbitu(rtcm->buff,i, 1); i+= 1;
679677
fcn =getbitu(rtcm->buff,i, 5); i+= 5; /* fcn+7 */
@@ -695,9 +693,7 @@ static int decode_type1012(rtcm_t *rtcm)
695693
rtcm->nav.glo_fcn[prn-1]=fcn-7+8; /* fcn+8 */
696694
}
697695
tt=timediff(rtcm->obs.data[0].time,rtcm->time);
698-
if (rtcm->obsflag||fabs(tt)>1E-9) {
699-
rtcm->obs.n=rtcm->obsflag=0;
700-
}
696+
if (fabs(tt)>1E-9) rtcm->obs.n=rtcm->obsflag=0;
701697
if ((index=obsindex(&rtcm->obs,rtcm->time,sat))<0) continue;
702698
pr1=pr1*0.02+amb*PRUNIT_GLO;
703699
rtcm->obs.data[index].P[0]=pr1;
@@ -1433,7 +1429,7 @@ static int decode_type1042(rtcm_t *rtcm)
14331429
eph.ttr=rtcm->time;
14341430
eph.A=sqrtA*sqrtA;
14351431
if (!strstr(rtcm->opt,"-EPHALL")) {
1436-
if (timediff(eph.toe,rtcm->nav.eph[sat-1].toe)==0.0&&
1432+
if (fabs(timediff(eph.toe,rtcm->nav.eph[sat-1].toe)) < 1.0 &&
14371433
eph.iode==rtcm->nav.eph[sat-1].iode&&
14381434
eph.iodc==rtcm->nav.eph[sat-1].iodc) return 0; /* unchanged */
14391435
}
@@ -2117,6 +2113,8 @@ static int decode_msm_head(rtcm_t *rtcm, int sys, int *sync, int *iod,
21172113
char *msg,tstr[40];
21182114
int i=24,j,dow,mask,staid,type,ncell=0;
21192115

2116+
if (rtcm->obsflag) rtcm->obs.n = rtcm->obsflag = 0;
2117+
21202118
type=getbitu(rtcm->buff,i,12); i+=12;
21212119

21222120
*h=h0;

0 commit comments

Comments
 (0)