Skip to content

Commit 5e5ece0

Browse files
Merge pull request #870 from ourairquality/rtkrcv-stat-rtcm
rtkrcv stat: move rtcm_t alloc to the heap
2 parents a74137c + 0004835 commit 5e5ece0

1 file changed

Lines changed: 30 additions & 21 deletions

File tree

app/consapp/rtkrcv/rtkrcv.c

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -680,9 +680,8 @@ static void prstatus(vt_t *vt)
680680
};
681681
gtime_t eventime={0};
682682
const char *freq[]={"-","L1","L1+L2","L1+L2+E5b","L1+L2+E5b+L5","5","6","7"};
683-
rtcm_t rtcm[3];
684683
pthread_t thread;
685-
int i,j,n,cycle,state,rtkstat,nsat0,nsat1,prcout,rcvcount,tmcount,timevalid,nave;
684+
int j,cycle,state,rtkstat,nsat0,nsat1,prcout,rcvcount,tmcount,timevalid,nave;
686685
int cputime,nb[3]={0},nmsg[3][10]={{0}};
687686
char tstr[40],tmstr[40],s[1024],*p;
688687
double runtime,rt[3]={0},dop[4]={0},rr[3],bl1=0.0,bl2=0.0;
@@ -693,6 +692,12 @@ static void prstatus(vt_t *vt)
693692
rtk_t *rtk = (rtk_t *)malloc(sizeof(rtk_t));
694693
if (rtk == NULL) return;
695694

695+
rtcm_t *rtcm[3] = { NULL, NULL, NULL };
696+
for (int i = 0; i < 3; i++) {
697+
rtcm[i] = (rtcm_t *)malloc(sizeof(rtcm_t));
698+
if (rtcm[i] == NULL) goto done;
699+
}
700+
696701
rtksvrlock(&svr);
697702
*rtk=svr.rtk;
698703
thread=svr.thread;
@@ -706,24 +711,25 @@ static void prstatus(vt_t *vt)
706711
cputime=svr.cputime;
707712
prcout=svr.prcout;
708713
nave=svr.nave;
709-
for (i=0;i<3;i++) nb[i]=svr.nb[i];
710-
for (i=0;i<3;i++) for (j=0;j<10;j++) {
714+
for (int i=0;i<3;i++) nb[i]=svr.nb[i];
715+
for (int i=0;i<3;i++) for (j=0;j<10;j++) {
711716
nmsg[i][j]=svr.nmsg[i][j];
712717
}
713718
if (svr.state) {
714719
runtime=(double)(tickget()-svr.tick)/1000.0;
715720
rt[0]=floor(runtime/3600.0); runtime-=rt[0]*3600.0;
716721
rt[1]=floor(runtime/60.0); rt[2]=runtime-rt[1]*60.0;
717722
}
718-
for (i=0;i<3;i++) rtcm[i]=svr.rtcm[i];
723+
for (int i=0;i<3;i++) *rtcm[i]=svr.rtcm[i];
719724
if (svr.raw[0].obs.data != NULL) {
720725
timevalid = svr.raw[0].obs.data[0].timevalid;
721726
eventime = svr.raw[0].obs.data[0].eventime;
722727
}
723728
time2str(eventime,tmstr,9);
724729
rtksvrunlock(&svr);
725-
726-
for (i=n=0;i<MAXSAT;i++) {
730+
731+
int n = 0;
732+
for (int i=0;i<MAXSAT;i++) {
727733
if (rtk->opt.mode == PMODE_SINGLE) {
728734
if (!rtk->ssat[i].vs) continue;
729735
} else {
@@ -749,31 +755,31 @@ static void prstatus(vt_t *vt)
749755
vt_printf(vt,"%-28s: %d\n","cpu time for a cycle (ms)",cputime);
750756
vt_printf(vt,"%-28s: %d\n","missing obs data count",prcout);
751757
vt_printf(vt,"%-28s: %d,%d\n","bytes in input buffer",nb[0],nb[1]);
752-
for (i=0;i<3;i++) {
758+
for (int i=0;i<3;i++) {
753759
sprintf(s,"# of input data %s",type[i]);
754760
vt_printf(vt,"%-28s: obs(%d),nav(%d),gnav(%d),ion(%d),sbs(%d),pos(%d),dgps(%d),ssr(%d),err(%d)\n",
755761
s,nmsg[i][0],nmsg[i][1],nmsg[i][6],nmsg[i][2],nmsg[i][3],
756762
nmsg[i][4],nmsg[i][5],nmsg[i][7],nmsg[i][9]);
757763
}
758-
for (i=0;i<3;i++) {
764+
for (int i=0;i<3;i++) {
759765
p=s; *p='\0';
760766
for (j=1;j<100;j++) {
761-
if (rtcm[i].nmsg2[j]==0) continue;
762-
p+=sprintf(p,"%s%d(%d)",p>s?",":"",j,rtcm[i].nmsg2[j]);
767+
if (rtcm[i]->nmsg2[j]==0) continue;
768+
p+=sprintf(p,"%s%d(%d)",p>s?",":"",j,rtcm[i]->nmsg2[j]);
763769
}
764-
if (rtcm[i].nmsg2[0]>0) {
765-
sprintf(p,"%sother2(%d)",p>s?",":"",rtcm[i].nmsg2[0]);
770+
if (rtcm[i]->nmsg2[0]>0) {
771+
sprintf(p,"%sother2(%d)",p>s?",":"",rtcm[i]->nmsg2[0]);
766772
}
767773
for (j=1;j<300;j++) {
768-
if (rtcm[i].nmsg3[j]==0) continue;
769-
p+=sprintf(p,"%s%d(%d)",p>s?",":"",j+1000,rtcm[i].nmsg3[j]);
774+
if (rtcm[i]->nmsg3[j]==0) continue;
775+
p+=sprintf(p,"%s%d(%d)",p>s?",":"",j+1000,rtcm[i]->nmsg3[j]);
770776
}
771777
for (j=300;j<399;j++) {
772-
if (rtcm[i].nmsg3[j]==0) continue;
773-
p+=sprintf(p,"%s%d(%d)",p>s?",":"",j+3770,rtcm[i].nmsg3[j]);
778+
if (rtcm[i]->nmsg3[j]==0) continue;
779+
p+=sprintf(p,"%s%d(%d)",p>s?",":"",j+3770,rtcm[i]->nmsg3[j]);
774780
}
775-
if (rtcm[i].nmsg3[0]>0) {
776-
sprintf(p,"%sother3(%d)",p>s?",":"",rtcm[i].nmsg3[0]);
781+
if (rtcm[i]->nmsg3[0]>0) {
782+
sprintf(p,"%sother3(%d)",p>s?",":"",rtcm[i]->nmsg3[0]);
777783
}
778784
vt_printf(vt,"%-15s %-9s: %s\n","# of rtcm messages",type[i],s);
779785
}
@@ -822,19 +828,22 @@ static void prstatus(vt_t *vt)
822828
vt_printf(vt,"%-28s: %.3f,%.3f,%.3f\n","vel enu (m/s) base",
823829
vel[0],vel[1],vel[2]);
824830
if (rtk->opt.mode>0&&rtk->x&&norm(rtk->x,3)>0.0) {
825-
for (i=0;i<3;i++) rr[i]=rtk->x[i]-rtk->rb[i];
831+
for (int i=0;i<3;i++) rr[i]=rtk->x[i]-rtk->rb[i];
826832
bl1=norm(rr,3);
827833
}
828834
if (rtk->opt.mode>0&&rtk->xa&&norm(rtk->xa,3)>0.0) {
829-
for (i=0;i<3;i++) rr[i]=rtk->xa[i]-rtk->rb[i];
835+
for (int i=0;i<3;i++) rr[i]=rtk->xa[i]-rtk->rb[i];
830836
bl2=norm(rr,3);
831837
}
832838
vt_printf(vt,"%-28s: %.3f\n","baseline length float (m)",bl1);
833839
vt_printf(vt,"%-28s: %.3f\n","baseline length fixed (m)",bl2);
834840
vt_printf(vt,"%-28s: %s\n","last time mark",tmcount ? tmstr : "-");
835841
vt_printf(vt,"%-28s: %d\n","receiver time mark count",rcvcount);
836842
vt_printf(vt,"%-28s: %d\n","rtklib time mark count",tmcount);
843+
844+
done:
837845
free(rtk);
846+
for (int i = 0; i < 3; i++) free(rtcm[i]);
838847
}
839848
/* print satellite -----------------------------------------------------------*/
840849
static void prsatellite(vt_t *vt, int nf)

0 commit comments

Comments
 (0)