From f197ed2b059e7080fe3fb472e6ef01044717177b Mon Sep 17 00:00:00 2001 From: joanvallve <jvallve@iri.upc.edu> Date: Wed, 29 Jul 2020 16:04:06 +0200 Subject: [PATCH] more changes... --- src/ephemeris.c | 18 ++++++++--- src/sbas.c | 85 +++++++++++++++++++++++++++++++++++++------------ 2 files changed, 78 insertions(+), 25 deletions(-) diff --git a/src/ephemeris.c b/src/ephemeris.c index 19086d7..9b1fa03 100644 --- a/src/ephemeris.c +++ b/src/ephemeris.c @@ -413,12 +413,18 @@ static eph_t *seleph(gtime_t time, int sat, int iode, const nav_t *nav) } tmin=tmax+1.0; + //DEBUG if (iode != -1) - printf("- available iode in eph: "); + { + printf("- available iodes: "); + for (i=0;i<nav->n;i++) + if (nav->eph[i].sat==sat) + printf("%3d ",nav->eph[i].iode); + }//*/ + + for (i=0;i<nav->n;i++) { if (nav->eph[i].sat!=sat) continue; - if (iode != -1) - printf("%3d ",nav->eph[i].iode); if (iode>=0&&nav->eph[i].iode!=iode) continue; if (sys==SYS_GAL&&sel) { if (sel==1&&!(nav->eph[i].code&(1<<9))) continue; /* I/NAV */ @@ -558,7 +564,8 @@ static int satpos_sbas(gtime_t time, gtime_t teph, int sat, const nav_t *nav, int i; trace(4,"satpos_sbas: time=%s sat=%3d\n",time_str(time,3),sat); - printf("satpos_sbas: sat=%3d ",sat); + if (satsys(sat,NULL)!=SYS_GAL && satsys(sat,NULL)!=SYS_SBS) + printf("satpos_sbas: sat=%3d ",sat); /* search sbas satellite correciton */ for (i=0;i<nav->sbssat.nsat;i++) { @@ -567,7 +574,8 @@ static int satpos_sbas(gtime_t time, gtime_t teph, int sat, const nav_t *nav, } if (i>=nav->sbssat.nsat || sbs->lcorr.iode < 0) { trace(2,"no sbas correction for orbit: %s sat=%3d\n",time_str(time,0),sat); - printf("no sbas correction (i>=nav->sbssat.nsat || sbs->lcorr.iode < 0)\n"); + if (satsys(sat,NULL)!=SYS_GAL && satsys(sat,NULL)!=SYS_SBS) + printf("no sbas correction (i>=nav->sbssat.nsat || sbs->lcorr.iode < 0)\n"); if (ephpos(time,teph,sat,nav,-1,rs,dts,var,svh)) *svh=-2;// JV: error code for detecting available ephemeris without sbas correction else diff --git a/src/sbas.c b/src/sbas.c index e06504c..765432a 100644 --- a/src/sbas.c +++ b/src/sbas.c @@ -168,27 +168,34 @@ extern void print_sbassat(const sbssat_t *sbssat) /* decode type 1: prn masks --------------------------------------------------*/ static int decode_sbstype1(const sbsmsg_t *msg, sbssat_t *sbssat) { - int i,n,sat; + int i,i_new,i_old,new_n,n,sat; + sbssatp_t sbssat_zero = { 0 }; + sbssat_zero.lcorr.iode = -1; + sbssat_zero.fcorr.udre = 15; trace(4,"decode_sbstype1:\n"); //printf("\tdecode_sbstype1: \n"); // old_sat to store old data (to be used if changing IODP, prn mask) sbssatp_t old_sat[MAXSAT]; - int old_nsat = sbssat->nsat; + sbssatp_t new_sat[MAXSAT]; + int old_n = sbssat->nsat; // store and remove old sat (if changing IODP) - if (sbssat->iodp!=getbitu(msg->msg,224,2)) + //if (sbssat->iodp!=getbitu(msg->msg,224,2)) { - sbssatp_t sbssat_zero = { 0 }; - for (int i=0; i<MAXSAT;i++) + for (i=0; i<MAXSAT;i++) { + // store old_sat[i] = sbssat->sat[i]; + //printf("old_sat[%d].sat = %d\n", i, old_sat[i].sat); + // remove sbssat->sat[i] = sbssat_zero; - sbssat->sat[i].lcorr.iode = -1; + // initialize + new_sat[i] = sbssat_zero; } } - for (i=1,n=0;i<=210&&n<MAXSAT;i++) { + for (i=1,new_n=0;i<=210&&new_n<MAXSAT;i++) { if (getbitu(msg->msg,13+i,1)) { if (i<= 37) sat=satno(SYS_GPS,i); /* 0- 37: gps */ else if (i<= 61) sat=satno(SYS_GLO,i-37); /* 38- 61: glonass */ @@ -198,30 +205,68 @@ static int decode_sbstype1(const sbsmsg_t *msg, sbssat_t *sbssat) else if (i<=192) sat=satno(SYS_SBS,i+10); /* 183-192: qzss ref [2] */ else if (i<=202) sat=satno(SYS_QZS,i); /* 193-202: qzss ref [2] */ else sat=0; /* 203- : reserved */ - sbssat->sat[n++].sat=sat; + new_sat[new_n++].sat=sat; + //sbssat->sat[n++].sat=sat; //printf("\t\tsat: %d\n",sat); + //printf("new_sat[%d].sat = %d\n", new_n-1, new_sat[new_n-1].sat); } } - // copy from old data (if changing IODP) - if (sbssat->iodp!=getbitu(msg->msg,224,2)) + // DEBUG + if (sbssat->iodp==getbitu(msg->msg,224,2)) { - printf("IODP CHANGED!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n"); - sbssat_t sbssat_zero = { 0 }; - for (int i=0, i_old=0; i<n&&i_old<old_nsat;) + if (new_n != old_n) + printf("!!!!!!!!!!!!!!!!!!!!\n!!!!!!!!!!!!!!!!!!!!\n!!!!!!!!!!!!!!!!!!!!\nnew_n != old_n!"); + else + for (i=0; i<new_n;i++) + if (old_sat[i].sat != new_sat[i].sat) + printf("!!!!!!!!!!!!!!!!!!!!\n!!!!!!!!!!!!!!!!!!!!\n!!!!!!!!!!!!!!!!!!!!\ni=%d different sats!",i); + } + if (sbssat->iodp!=getbitu(msg->msg,224,2)) + printf(">>>>>>>>>>>>>>>>>>>>>>>\n>>>>>>>>>>>>>>>>>>>>>>>\n>>>>>>>>>>>>>>>>>>>>>>>\nIODP CHANGED\n>>>>>>>>>>>>>>>>>>>>>>>\n>>>>>>>>>>>>>>>>>>>>>>>\n>>>>>>>>>>>>>>>>>>>>>>>\n"); + // merge new and old data + //if (new_n != old_n || sbssat->iodp!=getbitu(msg->msg,224,2)) + //{ + for (n=0,i_new=0, i_old=0; n<MAXSAT;) { - if (old_sat[i_old].sat == sbssat->sat[i].sat) + // no more new nor old + if (i_new==new_n && i_old==old_n) + break; + // no more new + else if (i_new==new_n) { - sbssat->sat[i] = old_sat[i_old]; - i++; + sbssat->sat[n++] = old_sat[i_old]; i_old++; } - else if (old_sat[i_old].sat > sbssat->sat[i].sat) - i++; + // no more old + else if (i_old==old_n) + { + sbssat->sat[n++] = new_sat[i_new]; + i_new++; + } + // more new and old else - i_old++; + { + if (old_sat[i_old].sat == new_sat[i_new].sat) + { + sbssat->sat[n++] = old_sat[i_old]; + i_new++; + i_old++; + } + else if (old_sat[i_old].sat > new_sat[i_new].sat) + { + sbssat->sat[n++] = new_sat[i_new]; + i_new++; + } + else + { + sbssat->sat[n++] = old_sat[i_old]; + i_old++; + } + } + //printf("sat[%d].sat = %d\n", n-1, sbssat->sat[n-1].sat); } - } + //} sbssat->iodp=getbitu(msg->msg,224,2); sbssat->nsat=n; -- GitLab