MP3-H1: JSON reset

pull/52/head
Zilog80 2021-03-04 11:04:18 +01:00
rodzic c590d6d995
commit 6599d10037
1 zmienionych plików z 44 dodań i 14 usunięć

Wyświetl plik

@ -33,6 +33,8 @@
// (b) set local compiler option, e.g.
// gcc -DVER_JSN_STR=\"0.0.2\" ...
#define TIMEOUT_JSN 60
typedef unsigned char ui8_t;
typedef unsigned int ui32_t;
@ -649,6 +651,15 @@ static int get_GPSkoord(gpx_t *gpx) {
return 0;
}
static int reset_time(gpx_t *gpx) {
gpx->gps_cnt = 0;
gpx->yr = 0;
gpx->week = 0;
return 0;
}
static int get_time(gpx_t *gpx) {
gpx->hrs = gpx->frame[pos_TIME];
@ -709,11 +720,19 @@ static int get_cfg(gpx_t *gpx) {
memcpy(&gpx->calC, &cfg32, 4);
break;
case 0xC: //sub2=0x0D: SN GLONASS/GPS ?
// if cfg32 != gpx->snC > 0: reset?
if (cfg32 != gpx->snC && gpx->snC > 0) {
//reset_cfg
gpx->snD = 0;
reset_time(gpx);
}
gpx->snC = cfg32; // 16 or 32 bit ?
break;
case 0xD: //sub2=0x0E: SN sensor boom ?
// if cfg32 != gpx->snD > 0: reset?
if (cfg32 != gpx->snD && gpx->snD > 0) {
//reset_cfg
gpx->snC = 0;
reset_time(gpx);
}
gpx->snD = cfg32; // 16 or 32 bit ?
break;
case 0xE: //sub2=0x0F: calib date ?
@ -803,19 +822,30 @@ static void print_gpx(gpx_t *gpx, int crcOK) {
// sonde SN change remains undetected until next SN update
if (gpx->week > 0 && gpx->gps_cnt > gpx->gps_cnt_prev && gpx->snC > 0 && gpx->snD > 0)
{
char *ver_jsn = NULL;
printf("{ \"type\": \"%s\"", "MRZ");
fprintf(stdout, ", \"frame\": %lu, ", (unsigned long)gpx->gps_cnt); // sec_gps0+0.5
printf("\"id\": \"MRZ-%d-%d\", \"datetime\": \"%04d-%02d-%02dT%02d:%02d:%02dZ\", \"lat\": %.5f, \"lon\": %.5f, \"alt\": %.5f, \"vel_h\": %.5f, \"heading\": %.5f, \"vel_v\": %.5f, \"sats\": %d",
gpx->snC, gpx->snD, gpx->yr, gpx->mth, gpx->day, gpx->hrs, gpx->min, gpx->sec, gpx->lat, gpx->lon, gpx->alt, gpx->vH, gpx->vD, gpx->vV, gpx->numSats);
if (gpx->jsn_freq > 0) {
printf(", \"freq\": %d", gpx->jsn_freq);
if (gpx->gps_cnt - gpx->gps_cnt_prev > TIMEOUT_JSN && gpx->gps_cnt_prev > gpx->sec_day_prev) {
// reset SN after TIMEOUT_JSN sec gap;
// if new signal replaces old one within timeout limit,
// new positions might still be transmitted with old SN
//reset_cfg
gpx->snC = 0;
gpx->snD = 0;
reset_time(gpx);
}
else {
char *ver_jsn = NULL;
printf("{ \"type\": \"%s\"", "MRZ");
printf(", \"frame\": %lu, ", (unsigned long)gpx->gps_cnt); // sec_gps0+0.5
printf("\"id\": \"MRZ-%d-%d\", \"datetime\": \"%04d-%02d-%02dT%02d:%02d:%02dZ\", \"lat\": %.5f, \"lon\": %.5f, \"alt\": %.5f, \"vel_h\": %.5f, \"heading\": %.5f, \"vel_v\": %.5f, \"sats\": %d",
gpx->snC, gpx->snD, gpx->yr, gpx->mth, gpx->day, gpx->hrs, gpx->min, gpx->sec, gpx->lat, gpx->lon, gpx->alt, gpx->vH, gpx->vD, gpx->vV, gpx->numSats);
if (gpx->jsn_freq > 0) {
printf(", \"freq\": %d", gpx->jsn_freq);
}
#ifdef VER_JSN_STR
ver_jsn = VER_JSN_STR;
#endif
if (ver_jsn && *ver_jsn != '\0') printf(", \"version\": \"%s\"", ver_jsn);
printf(" }\n");
}
#ifdef VER_JSN_STR
ver_jsn = VER_JSN_STR;
#endif
if (ver_jsn && *ver_jsn != '\0') fprintf(stdout, ", \"version\": \"%s\"", ver_jsn);
printf(" }\n");
}
}