From 928c234b0ebec37f302d5c1e4b0c0f03b6e58d2d Mon Sep 17 00:00:00 2001 From: Jason Reiss Date: Mon, 21 Nov 2022 11:37:12 -0600 Subject: gps: fix calculation of cnt in the past, PPS may be updated after packet is received and stamped --- libloragw/tst/test_loragw_gps.c | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) (limited to 'libloragw/tst') diff --git a/libloragw/tst/test_loragw_gps.c b/libloragw/tst/test_loragw_gps.c index c535878..6d41a0d 100644 --- a/libloragw/tst/test_loragw_gps.c +++ b/libloragw/tst/test_loragw_gps.c @@ -112,16 +112,36 @@ static void gps_process_sync(void) { x = ppm_tstamp + 500000; printf(" * Test of timestamp counter <-> GPS value conversion *\n"); printf(" Test value: %u\n", x); - lgw_cnt2gps(ppm_ref, x, &y); + i = lgw_cnt2gps(ppm_ref, x, &y); printf(" Conversion to GPS: %lld.%09ld\n", (long long)y.tv_sec, y.tv_nsec); - lgw_gps2cnt(ppm_ref, y, &z); + i = lgw_gps2cnt(ppm_ref, y, &z); printf(" Converted back: %u ==> %dµs\n", z, (int32_t)(z-x)); printf(" * Test of timestamp counter <-> UTC value conversion *\n"); printf(" Test value: %u\n", x); - lgw_cnt2utc(ppm_ref, x, &y); + i = lgw_cnt2utc(ppm_ref, x, &y); printf(" Conversion to UTC: %lld.%09ld\n", (long long)y.tv_sec, y.tv_nsec); - lgw_utc2cnt(ppm_ref, y, &z); + i = lgw_utc2cnt(ppm_ref, y, &z); printf(" Converted back: %u ==> %dµs\n", z, (int32_t)(z-x)); + + x = ppm_tstamp - 500000; + printf(" * Test of timestamp counter <-> past GPS value conversion *\n"); + printf(" Test value: %u\n", x); + i = lgw_cnt2gps(ppm_ref, x, &y); + printf(" Conversion to GPS: %lld.%09ld\n", (long long)y.tv_sec, y.tv_nsec); + i = lgw_gps2cnt(ppm_ref, y, &z); + if (i != LGW_GPS_ERROR) + printf(" ** FAILED **: Converted past time back: %u ==> %dµs\n", z, (int32_t)(z-x)); + else + printf(" ** PASS **: Could not convert to CNT, GPS time has passed\n"); + printf(" * Test of timestamp counter <-> past UTC value conversion *\n"); + printf(" Test value: %u\n", x); + i = lgw_cnt2utc(ppm_ref, x, &y); + printf(" Conversion to UTC: %lld.%09ld\n", (long long)y.tv_sec, y.tv_nsec); + i = lgw_utc2cnt(ppm_ref, y, &z); + if (i != LGW_GPS_ERROR) + printf(" ** FAILED **: Converted past time back: %u ==> %dµs\n", z, (int32_t)(z-x)); + else + printf(" ** PASS **: Could not convert to CNT, UTC time has passed\n"); } static void gps_process_coords(void) { -- cgit v1.2.3