From 7e30daf7e5db551cc421ba9a5cdab6db37f50818 Mon Sep 17 00:00:00 2001 From: Zilog80 Date: Fri, 12 Apr 2019 15:09:59 +0200 Subject: [PATCH] rs92dft: SEM almanac GPS epoch, 2019-04-07: GPSepoch=2 --- demod/mod/rs92mod.c | 26 +++++++++++++++++++------- demod/rs92dm_dft.c | 25 ++++++++++++++++++------- 2 files changed, 37 insertions(+), 14 deletions(-) diff --git a/demod/mod/rs92mod.c b/demod/mod/rs92mod.c index 9c91298..6df8ef3 100644 --- a/demod/mod/rs92mod.c +++ b/demod/mod/rs92mod.c @@ -94,6 +94,7 @@ typedef struct { int almanac; int ephem; int exSat; // -1 + ui8_t WEEK1024epoch; // SEM almanac, GPS epoch (1: 1999-2019) ui8_t sat_status[12]; ui8_t prn[12]; // valide PRN 0,..,k-1 ui8_t prn32toggle; // 0x1 @@ -177,7 +178,7 @@ ui8_t xorbyte(int pos) { /* ------------------------------------------------------------------------------------ */ -#define GPS_WEEK1024 1 +//#define GPS_WEEK1024 1 // SEM almanac #define WEEKSEC 604800 /* @@ -547,7 +548,7 @@ static int calc_satpos_alm(gpx_t *gpx, double t, SAT_t *satp) { else if (t-alm[j].toa < -WEEKSEC/2) rollover = -1; else rollover = 0; week = alm[j].week - rollover; - /*if (j == 1)*/ gpx->week = week + GPS_WEEK1024*1024; + /*if (j == 1)*/ gpx->week = week + gpx->gps.WEEK1024epoch*1024; if (gpx->gps.opt_vel >= 2) { GPS_SatellitePositionVelocity_Ephem( @@ -1264,6 +1265,7 @@ int main(int argc, char *argv[]) { gpx.gps.dop_limit = 9.9; gpx.gps.d_err = 10000; gpx.gps.exSat = -1; + gpx.gps.WEEK1024epoch = 1; // SEM almanac, GPS epoch (1: 1999-2019) #ifdef CYGWIN @@ -1283,8 +1285,9 @@ int main(int argc, char *argv[]) { fprintf(stderr, " -v, -vx, -vv\n"); fprintf(stderr, " -r, --raw\n"); fprintf(stderr, " -i, --invert\n"); - fprintf(stderr, " -a, --almanac \n"); fprintf(stderr, " -e, --ephem \n"); + fprintf(stderr, " -a, --almanac \n"); + fprintf(stderr, " --gpsepoch (2019-04-07: n=2)\n"); fprintf(stderr, " -g1 (verbose GPS: 4 sats)\n"); fprintf(stderr, " -g2 (verbose GPS: all sats)\n"); fprintf(stderr, " -gg (vverbose GPS)\n"); @@ -1320,17 +1323,26 @@ int main(int argc, char *argv[]) { else if ( (strcmp(*argv, "-i") == 0) || (strcmp(*argv, "--invert") == 0) ) { gpx.option.inv = 1; } + else if ( (strcmp(*argv, "-e") == 0) || (strncmp(*argv, "--ephem", 7) == 0) ) { + ++argv; + if (*argv) fp_eph = fopen(*argv, "rb"); // bin-mode + else return -1; + if (fp_eph == NULL) fprintf(stderr, "[rinex] %s konnte nicht geoeffnet werden\n", *argv); + } else if ( (strcmp(*argv, "-a") == 0) || (strcmp(*argv, "--almanac") == 0) ) { ++argv; if (*argv) fp_alm = fopen(*argv, "r"); // txt-mode else return -1; if (fp_alm == NULL) fprintf(stderr, "[almanac] %s konnte nicht geoeffnet werden\n", *argv); } - else if ( (strcmp(*argv, "-e") == 0) || (strncmp(*argv, "--ephem", 7) == 0) ) { - ++argv; - if (*argv) fp_eph = fopen(*argv, "rb"); // bin-mode + else if ( strcmp(*argv, "--gpsepoch") == 0 ) { // SEM almanac, GPS week: 10 bit + ++argv; // GPS epoch (default: 1) + if (*argv) { // 2019-04-07: rollover 1 -> 2 + int gpsepoch = atoi(*argv); + if (gpsepoch < 0 || gpsepoch > 4) gpsepoch = 1; + gpx.gps.WEEK1024epoch = gpsepoch; + } else return -1; - if (fp_eph == NULL) fprintf(stderr, "[rinex] %s konnte nicht geoeffnet werden\n", *argv); } else if ( (strcmp(*argv, "--dop") == 0) ) { ++argv; diff --git a/demod/rs92dm_dft.c b/demod/rs92dm_dft.c index ac554dd..50905cc 100644 --- a/demod/rs92dm_dft.c +++ b/demod/rs92dm_dft.c @@ -162,8 +162,9 @@ ui8_t framebyte(int pos) { /* ------------------------------------------------------------------------------------ */ -#define GPS_WEEK1024 1 #define WEEKSEC 604800 +//#define GPS_WEEK1024 1 // GPS epoch +ui8_t GPS_WEEK1024epoch = 1; // GPS epoch /* * Convert GPS Week and Seconds to Modified Julian Day. @@ -541,7 +542,7 @@ int calc_satpos_alm(EPHEM_t alm[], double t, SAT_t *satp) { else if (t-alm[j].toa < -WEEKSEC/2) rollover = -1; else rollover = 0; week = alm[j].week - rollover; - /*if (j == 1)*/ gpx.week = week + GPS_WEEK1024*1024; + /*if (j == 1)*/ gpx.week = week + GPS_WEEK1024epoch*1024; if (option_vel >= 2) { GPS_SatellitePositionVelocity_Ephem( @@ -1310,8 +1311,9 @@ int main(int argc, char *argv[]) { fprintf(stderr, " -v, -vx, -vv\n"); fprintf(stderr, " -r, --raw\n"); fprintf(stderr, " -i, --invert\n"); - fprintf(stderr, " -a, --almanac \n"); fprintf(stderr, " -e, --ephem \n"); + fprintf(stderr, " -a, --almanac \n"); + fprintf(stderr, " --gpsepoch (2019-04-07: n=2)\n"); fprintf(stderr, " -g1 (verbose GPS: 4 sats)\n"); fprintf(stderr, " -g2 (verbose GPS: all sats)\n"); fprintf(stderr, " -gg (vverbose GPS)\n"); @@ -1351,17 +1353,26 @@ int main(int argc, char *argv[]) { else if ( (strcmp(*argv, "-i") == 0) || (strcmp(*argv, "--invert") == 0) ) { option_inv = 1; } + else if ( (strcmp(*argv, "-e") == 0) || (strncmp(*argv, "--ephem", 7) == 0) ) { + ++argv; + if (*argv) fp_eph = fopen(*argv, "rb"); // bin-mode + else return -1; + if (fp_eph == NULL) fprintf(stderr, "[rinex] %s konnte nicht geoeffnet werden\n", *argv); + } else if ( (strcmp(*argv, "-a") == 0) || (strcmp(*argv, "--almanac") == 0) ) { ++argv; if (*argv) fp_alm = fopen(*argv, "r"); // txt-mode else return -1; if (fp_alm == NULL) fprintf(stderr, "[almanac] %s konnte nicht geoeffnet werden\n", *argv); } - else if ( (strcmp(*argv, "-e") == 0) || (strncmp(*argv, "--ephem", 7) == 0) ) { - ++argv; - if (*argv) fp_eph = fopen(*argv, "rb"); // bin-mode + else if ( strcmp(*argv, "--gpsepoch") == 0 ) { // SEM almanac, GPS week: 10 bit + ++argv; // GPS epoch (default: 1) + if (*argv) { // 2019-04-07: rollover 1 -> 2 + int gpsepoch = atoi(*argv); + if (gpsepoch < 0 || gpsepoch > 4) gpsepoch = 1; + GPS_WEEK1024epoch = gpsepoch; + } else return -1; - if (fp_eph == NULL) fprintf(stderr, "[rinex] %s konnte nicht geoeffnet werden\n", *argv); } else if ( (strcmp(*argv, "--dop") == 0) ) { ++argv;