summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGary E. Miller <gem@rellim.com>2017-09-05 14:41:07 -0700
committerGary E. Miller <gem@rellim.com>2017-09-05 15:07:34 -0700
commit6f0b1e2df3a8b4cf4e3fce10dc37cdb020fbfcc1 (patch)
treee143678aa667976a27e682c720d39572cd1ecbeb
parent2e7249635b0d3644bab1e2d04ad83ce56b026073 (diff)
downloadgpsd-6f0b1e2df3a8b4cf4e3fce10dc37cdb020fbfcc1.tar.gz
Revert "Support UBX NAV-PVT"
This reverts commit 22a020ec1c2bc85eff681ecacc6d2bb79fdddc9c. This commit broke PPS on uBlox. PPS would flip from offset 0 to offset -1, and back, every few minutes. Also stray characters (^M) in the log files.
-rw-r--r--driver_ubx.c165
-rw-r--r--driver_ubx.h11
-rw-r--r--test/daemon/ublox-aek-4t.log.chk2
-rw-r--r--test/daemon/ublox-neo-m8n.logbin5054 -> 0 bytes
-rw-r--r--test/daemon/ublox-neo-m8n.log.chk120
5 files changed, 20 insertions, 278 deletions
diff --git a/driver_ubx.c b/driver_ubx.c
index 79674410..88be6c07 100644
--- a/driver_ubx.c
+++ b/driver_ubx.c
@@ -130,129 +130,19 @@ static gps_mask_t
ubx_msg_nav_pvt(struct gps_device_t *session, unsigned char *buf,
size_t data_len)
{
- uint8_t valid;
- uint8_t flags;
- uint8_t navmode;
- struct tm unpacked_date;
- double subseconds;
- double hacc, vacc, sacc;
- int *status = &session->gpsdata.status;
- int *mode = &session->newdata.mode;
+ unsigned int flags;
gps_mask_t mask = 0;
if (data_len != 92)
return 0;
- valid = (unsigned int)getub(buf, 11);
- navmode = (unsigned char)getub(buf, 20);
flags = (unsigned int)getub(buf, 21);
- switch (navmode)
- {
- case UBX_MODE_TMONLY:
- {
- if (*mode != MODE_NO_FIX) {
- *mode = MODE_NO_FIX;
- mask |= MODE_SET;
- }
- if (*status != STATUS_NO_FIX) {
- *status = STATUS_NO_FIX;
- mask |= STATUS_SET;
- }
- break;
- }
- case UBX_MODE_3D:
- case UBX_MODE_GPSDR:
- {
- if (*mode != MODE_3D) {
- *mode = MODE_3D;
- mask |= MODE_SET;
- }
- if ((flags & UBX_NAV_PVT_FLAG_DGPS) == UBX_NAV_PVT_FLAG_DGPS) {
- if (*status != STATUS_DGPS_FIX) {
- *status = STATUS_DGPS_FIX;
- mask |= STATUS_SET;
- }
- } else {
- if (*status != STATUS_FIX) {
- *status = STATUS_FIX;
- mask |= STATUS_SET;
- }
- }
- mask |= LATLON_SET | ALTITUDE_SET | SPEED_SET | TRACK_SET | CLEAR_IS
- | REPORT_IS;
- break;
- }
- case UBX_MODE_2D:
- case UBX_MODE_DR: /* consider this too as 2D */
- {
- if (*mode != MODE_2D) {
- *mode = MODE_2D;
- mask |= MODE_SET;
- };
- if (*status != STATUS_FIX) {
- *status = STATUS_FIX;
- mask |= STATUS_SET;
- }
- mask |= LATLON_SET | SPEED_SET;
- break;
- }
- default:
- {
- if (*mode != MODE_NO_FIX) {
- *mode = MODE_NO_FIX;
- mask |= MODE_SET;
- };
- if (*status != STATUS_NO_FIX) {
- *status = STATUS_NO_FIX;
- mask |= STATUS_SET;
- }
- break;
- }
- }
-
- if ((valid & UBX_NAV_PVT_VALID_DATE_TIME) == UBX_NAV_PVT_VALID_DATE_TIME) {
- unpacked_date.tm_year = (uint16_t)getleu16(buf, 4) - 1900;
- unpacked_date.tm_mon = (uint8_t)getub(buf, 6) - 1;
- unpacked_date.tm_mday = (uint8_t)getub(buf, 7);
- unpacked_date.tm_hour = (uint8_t)getub(buf, 8);
- unpacked_date.tm_min = (uint8_t)getub(buf, 9);
- unpacked_date.tm_sec = (uint8_t)getub(buf, 10);
- unpacked_date.tm_isdst = 0;
- unpacked_date.tm_wday = 0;
- unpacked_date.tm_yday = 0;
- subseconds = 1e-9 * (int32_t)getles32(buf, 16);
- session->newdata.time = \
- (timestamp_t)mkgmtime(&unpacked_date) + subseconds;
- mask |= TIME_SET | NTPTIME_IS;
- }
-
- session->newdata.longitude = 1e-7 * (int32_t)getles32(buf, 24);
- session->newdata.latitude = 1e-7 * (int32_t)getles32(buf, 28);
- session->newdata.altitude = 1e-3 * (int32_t)getles32(buf, 32);
- session->newdata.speed = 1e-3 * (int32_t)getles32(buf, 60);
- session->newdata.track = 1e-5 * (int32_t)getles32(buf, 64);
- hacc = (double)(getles32(buf, 40) / 1000.0);
- vacc = (double)(getles32(buf, 44) / 1000.0);
- sacc = (double)(getles32(buf, 48) / 1000.0);
- // Assuming hacc == epx == epy is the best we can do
- session->newdata.epx = session->newdata.epy = hacc;
- session->newdata.epv = vacc;
- session->newdata.eps = sacc;
- mask |= HERR_SET | VERR_SET | SPEEDERR_SET;
+ /* TODO: finish decoding UBX_MON_PVT
+ * no need until depreacaed UBX_MON_SOL is dead
+ */
gpsd_log(&session->context->errout, LOG_DATA,
- "NAV_PVT: flags=%02x time=%.2f lat=%.2f lon=%.2f alt=%.2f track=%.2f speed=%.2f climb=%.2f mode=%d status=%d used=%d\n",
- flags,
- session->newdata.time,
- session->newdata.latitude,
- session->newdata.longitude,
- session->newdata.altitude,
- session->newdata.track,
- session->newdata.speed,
- session->newdata.climb,
- session->newdata.mode,
- session->gpsdata.status,
- session->gpsdata.satellites_used);
+ "NAV-PVT: flags:%02x\n", flags);
return mask;
}
@@ -276,14 +166,10 @@ ubx_msg_nav_sol(struct gps_device_t *session, unsigned char *buf,
#define DATE_VALID (UBX_SOL_VALID_WEEK | UBX_SOL_VALID_TIME)
if ((flags & DATE_VALID) == DATE_VALID) {
unsigned short gw;
- unsigned int iTOW;
- int fTOW;
- iTOW = (unsigned int)getleu32(buf, 0);
- fTOW = (int)getles32(buf, 4);
+ unsigned int tow;
+ tow = (unsigned int)getleu32(buf, 0);
gw = (unsigned short)getles16(buf, 8);
- session->newdata.time = gpsd_gpstime_resolve(session, gw,
- (iTOW * 1e-3)
- + (fTOW * 1e-9));
+ session->newdata.time = gpsd_gpstime_resolve(session, gw, tow / 1000.0);
mask |= TIME_SET | NTPTIME_IS;
}
#undef DATE_VALID
@@ -406,36 +292,24 @@ static gps_mask_t
ubx_msg_nav_timegps(struct gps_device_t *session, unsigned char *buf,
size_t data_len)
{
- unsigned int gw, iTOW, flags;
- int fTOW;
- gps_mask_t mask = 0;
+ unsigned int gw, tow, flags;
if (data_len != 16)
return 0;
+ tow = (unsigned int)getleu32(buf, 0);
+ gw = (unsigned int)getles16(buf, 8);
flags = (unsigned int)getub(buf, 11);
- // Valid leap seconds
- if ((flags & UBX_TIMEGPS_VALID_LEAP_SECOND) == UBX_TIMEGPS_VALID_LEAP_SECOND)
+ if ((flags & 0x7) != 0)
session->context->leap_seconds = (int)getub(buf, 10);
- // Valid GPS time of week and week number
-#define VALID_TIME (UBX_TIMEGPS_VALID_TIME | UBX_TIMEGPS_VALID_WEEK)
- if ((flags & VALID_TIME) == VALID_TIME)
-#undef VALID_TIME
- {
- iTOW = (unsigned int)getleu32(buf, 0);
- fTOW = (int)getles32(buf, 4);
- gw = (unsigned int)getles16(buf, 8);
- session->newdata.time =
- gpsd_gpstime_resolve(session,
- (unsigned short int)gw,
- ((double)iTOW * 1e-3) + ((double)fTOW * 1e-9));
- mask |= (TIME_SET | NTPTIME_IS);
- }
+ session->newdata.time = gpsd_gpstime_resolve(session,
+ (unsigned short int)gw,
+ (double)tow / 1000.0);
gpsd_log(&session->context->errout, LOG_DATA,
- "TIMEGPS: time=%.2f mask={TIME}\n",
- session->newdata.time);
- return mask;
+ "TIMEGPS: time=%.2f leap=%d, mask={TIME}\n",
+ session->newdata.time, session->context->leap_seconds);
+ return TIME_SET | NTPTIME_IS;
}
/**
@@ -612,8 +486,7 @@ gps_mask_t ubx_parse(struct gps_device_t * session, unsigned char *buf,
break;
case UBX_NAV_PVT:
gpsd_log(&session->context->errout, LOG_PROG, "UBX_NAV_PVT\n");
- mask = ubx_msg_nav_pvt(session, &buf[UBX_PREFIX_LEN], data_len)
- | (CLEAR_IS | REPORT_IS);
+ mask = ubx_msg_nav_pvt(session, &buf[UBX_PREFIX_LEN], data_len);
break;
case UBX_NAV_POSUTM:
gpsd_log(&session->context->errout, LOG_DATA, "UBX_NAV_POSUTM\n");
diff --git a/driver_ubx.h b/driver_ubx.h
index 99ef9b98..c23efdf7 100644
--- a/driver_ubx.h
+++ b/driver_ubx.h
@@ -102,10 +102,6 @@ typedef enum {
#define UBX_SOL_VALID_WEEK 0x04
#define UBX_SOL_VALID_TIME 0x08
-#define UBX_TIMEGPS_VALID_TIME 0x01
-#define UBX_TIMEGPS_VALID_WEEK 0x02
-#define UBX_TIMEGPS_VALID_LEAP_SECOND 0x04
-
/* from UBX_NAV_SVINFO */
#define UBX_SAT_USED 0x01
#define UBX_SAT_DGPS 0x02
@@ -122,11 +118,4 @@ typedef enum {
#define UBX_SIG_CDCRLK2 6
#define UBX_SIG_NAVMSG 7
-#define UBX_NAV_PVT_VALID_DATE 0x01
-#define UBX_NAV_PVT_VALID_TIME 0x02
-#define UBX_NAV_PVT_VALID_DATE_TIME (UBX_NAV_PVT_VALID_DATE | UBX_NAV_PVT_VALID_TIME)
-
-#define UBX_NAV_PVT_FLAG_GPS_FIX_OK 0x01
-#define UBX_NAV_PVT_FLAG_DGPS 0x02
-
#endif /* _GPSD_UBX_H_ */
diff --git a/test/daemon/ublox-aek-4t.log.chk b/test/daemon/ublox-aek-4t.log.chk
index 31acd979..45680ea6 100644
--- a/test/daemon/ublox-aek-4t.log.chk
+++ b/test/daemon/ublox-aek-4t.log.chk
@@ -26,4 +26,4 @@ $GPZDA,231127.00,23,12,2007,00,00*65
$GPGGA,231126,2037.7569,N,08704.0845,W,2,07,1.67,75.75,M,-13.865,M,,*4C
$GPRMC,231126,A,2037.7569,N,08704.0845,W,0.0000,0.000,231207,,*36
$GPGSA,A,3,15,2,30,5,12,18,135,,,,,,2.6,1.7,2.0*0F
-{"class":"TPV","status":2,"mode":3,"time":"2007-12-23T23:11:26.999Z","ept":0.005,"lat":20.629281718,"lon":-87.068075424,"alt":75.754,"epx":2.973,"epy":6.138,"epv":11.443,"track":0.0000,"speed":0.000,"climb":0.000,"eps":0.17,"epc":22.88}
+{"class":"TPV","status":2,"mode":3,"time":"2007-12-23T23:11:26.999Z","ept":0.005,"lat":20.629281718,"lon":-87.068075424,"alt":75.754,"epx":2.973,"epy":6.138,"epv":11.443,"track":0.0000,"speed":0.000,"climb":0.000,"eps":0.17,"epc":22.89}
diff --git a/test/daemon/ublox-neo-m8n.log b/test/daemon/ublox-neo-m8n.log
deleted file mode 100644
index 28f7c121..00000000
--- a/test/daemon/ublox-neo-m8n.log
+++ /dev/null
Binary files differ
diff --git a/test/daemon/ublox-neo-m8n.log.chk b/test/daemon/ublox-neo-m8n.log.chk
deleted file mode 100644
index 8a1d3578..00000000
--- a/test/daemon/ublox-neo-m8n.log.chk
+++ /dev/null
@@ -1,120 +0,0 @@
-$GPZDA,085000.80,19,07,2017,00,00*68
-$GPGGA,085000,3454.3736,S,13836.4872,E,2,00,,25.42,M,,,*00
-$GPRMC,085000,A,3454.3736,S,13836.4872,E,0.0583,31.472,190717,,*08
-$GPGSA,A,3,,,,,,,,,,,,,,,*1C
-{"class":"TPV","status":2,"mode":3,"time":"2017-07-19T08:50:00.800Z","ept":0.005,"lat":-34.906226300,"lon":138.608119700,"alt":25.424,"epx":1.132,"epy":1.132,"epv":1.602,"track":31.4718,"speed":0.030,"eps":-0.01}
-$GPZDA,085001.00,19,07,2017,00,00*61
-$GPGGA,085000,3454.3736,S,13836.4872,E,2,00,,25.38,M,,,*0D
-$GPRMC,085000,A,3454.3736,S,13836.4872,E,0.0311,31.472,190717,,*05
-$GPGSA,A,3,,,,,,,,,,,,,,,*1C
-{"class":"TPV","status":2,"mode":3,"time":"2017-07-19T08:50:00.000Z","ept":0.005,"lat":-34.906226600,"lon":138.608119900,"alt":25.378,"epx":1.133,"epy":1.133,"epv":1.603,"track":31.4718,"speed":0.016,"climb":-0.230,"eps":0.02,"epc":16.02}
-$GPZDA,085001.20,19,07,2017,00,00*63
-$GPGGA,085001,3454.3736,S,13836.4872,E,2,00,,25.31,M,,,*05
-$GPRMC,085001,A,3454.3736,S,13836.4872,E,0.0311,31.472,190717,,*04
-$GPGSA,A,3,,,,,,,,,,,,,,,*1C
-{"class":"TPV","status":2,"mode":3,"time":"2017-07-19T08:50:01.200Z","ept":0.005,"lat":-34.906226900,"lon":138.608119900,"alt":25.306,"epx":1.138,"epy":1.138,"epv":1.610,"track":31.4718,"speed":0.016,"climb":-0.360,"eps":-0.01,"epc":16.06}
-$GPZDA,085001.40,19,07,2017,00,00*65
-$GPGGA,085001,3454.3736,S,13836.4872,E,2,00,,25.26,M,,,*03
-$GPRMC,085001,A,3454.3736,S,13836.4872,E,0.0583,31.472,190717,,*09
-$GPGSA,A,3,,,,,,,,,,,,,,,*1C
-{"class":"TPV","status":2,"mode":3,"time":"2017-07-19T08:50:01.400Z","ept":0.005,"lat":-34.906227100,"lon":138.608120200,"alt":25.258,"epx":1.142,"epy":1.142,"epv":1.616,"track":31.4718,"speed":0.030,"climb":-0.240,"eps":0.02,"epc":16.13}
-$GPZDA,085001.60,19,07,2017,00,00*67
-$GPGGA,085001,3454.3736,S,13836.4872,E,2,00,,25.19,M,,,*0F
-$GPRMC,085001,A,3454.3736,S,13836.4872,E,0.0408,31.472,190717,,*0B
-$GPGSA,A,3,,,,,,,,,,,,,,,*1C
-{"class":"TPV","status":2,"mode":3,"time":"2017-07-19T08:50:01.600Z","ept":0.005,"lat":-34.906227500,"lon":138.608120300,"alt":25.194,"epx":1.144,"epy":1.144,"epv":1.619,"track":31.4718,"speed":0.021,"climb":-0.320,"eps":-0.02,"epc":16.17}
-$GPZDA,085001.80,19,07,2017,00,00*69
-$GPGGA,085001,3454.3737,S,13836.4872,E,2,00,,25.14,M,,,*03
-$GPRMC,085001,A,3454.3737,S,13836.4872,E,0.0253,31.472,190717,,*02
-$GPGSA,A,3,,,,,,,,,,,,,,,*1C
-{"class":"TPV","status":2,"mode":3,"time":"2017-07-19T08:50:01.800Z","ept":0.005,"lat":-34.906227800,"lon":138.608120300,"alt":25.136,"epx":1.144,"epy":1.144,"epv":1.619,"track":31.4718,"speed":0.013,"climb":-0.290,"eps":0.01,"epc":16.19}
-$GPZDA,085002.00,19,07,2017,00,00*62
-$GPGGA,085001,3454.3737,S,13836.4872,E,2,00,,25.07,M,,,*01
-$GPRMC,085001,A,3454.3737,S,13836.4872,E,0.0739,31.472,190717,,*0B
-$GPGSA,A,3,,,,,,,,,,,,,,,*1C
-{"class":"TPV","status":2,"mode":3,"time":"2017-07-19T08:50:01.000Z","ept":0.005,"lat":-34.906228100,"lon":138.608120400,"alt":25.073,"epx":1.145,"epy":1.145,"epv":1.620,"track":31.4718,"speed":0.038,"climb":-0.315,"eps":0.03,"epc":16.19}
-$GPZDA,085002.20,19,07,2017,00,00*60
-$GPGGA,085002,3454.3737,S,13836.4872,E,2,00,,25.01,M,,,*04
-$GPRMC,085002,A,3454.3737,S,13836.4872,E,0.0058,31.472,190717,,*08
-$GPGSA,A,3,,,,,,,,,,,,,,,*1C
-{"class":"TPV","status":2,"mode":3,"time":"2017-07-19T08:50:02.200Z","ept":0.005,"lat":-34.906228400,"lon":138.608120500,"alt":25.008,"epx":1.143,"epy":1.143,"epv":1.617,"track":31.4718,"speed":0.003,"climb":-0.325,"eps":-0.00,"epc":16.18}
-$GPZDA,085002.40,19,07,2017,00,00*66
-$GPGGA,085002,3454.3737,S,13836.4872,E,2,00,,24.95,M,,,*08
-$GPRMC,085002,A,3454.3737,S,13836.4872,E,0.0428,31.472,190717,,*0B
-$GPGSA,A,3,,,,,,,,,,,,,,,*1C
-{"class":"TPV","status":2,"mode":3,"time":"2017-07-19T08:50:02.400Z","ept":0.005,"lat":-34.906228700,"lon":138.608120500,"alt":24.952,"epx":1.133,"epy":1.133,"epv":1.603,"track":31.4718,"speed":0.022,"climb":-0.280,"eps":0.02,"epc":16.10}
-$GPZDA,085002.60,19,07,2017,00,00*64
-$GPGGA,085002,3454.3737,S,13836.4872,E,2,00,,24.89,M,,,*05
-$GPRMC,085002,A,3454.3737,S,13836.4872,E,0.0233,31.472,190717,,*07
-$GPGSA,A,3,,,,,,,,,,,,,,,*1C
-{"class":"TPV","status":2,"mode":3,"time":"2017-07-19T08:50:02.600Z","ept":0.005,"lat":-34.906229100,"lon":138.608120700,"alt":24.892,"epx":1.136,"epy":1.136,"epv":1.608,"track":31.4718,"speed":0.012,"climb":-0.300,"eps":-0.01,"epc":16.05}
-$GPZDA,085002.80,19,07,2017,00,00*6A
-$GPGGA,085002,3454.3738,S,13836.4872,E,2,00,,24.83,M,,,*00
-$GPRMC,085002,A,3454.3738,S,13836.4872,E,0.0564,31.472,190717,,*0D
-$GPGSA,A,3,,,,,,,,,,,,,,,*1C
-{"class":"TPV","status":2,"mode":3,"time":"2017-07-19T08:50:02.800Z","ept":0.005,"lat":-34.906229400,"lon":138.608120700,"alt":24.831,"epx":1.148,"epy":1.148,"epv":1.625,"track":31.4718,"speed":0.029,"climb":-0.305,"eps":0.03,"epc":16.16}
-$GPZDA,085003.00,19,07,2017,00,00*63
-$GPGGA,085002,3454.3738,S,13836.4873,E,2,00,,24.76,M,,,*0B
-$GPRMC,085002,A,3454.3738,S,13836.4873,E,0.0505,31.472,190717,,*0B
-$GPGSA,A,3,,,,,,,,,,,,,,,*1C
-{"class":"TPV","status":2,"mode":3,"time":"2017-07-19T08:50:02.000Z","ept":0.005,"lat":-34.906229800,"lon":138.608120900,"alt":24.760,"epx":1.146,"epy":1.146,"epv":1.622,"track":31.4718,"speed":0.026,"climb":-0.355,"eps":-0.02,"epc":16.23}
-$GPZDA,085003.20,19,07,2017,00,00*61
-$GPGGA,085003,3454.3738,S,13836.4873,E,2,00,,24.70,M,,,*0C
-$GPRMC,085003,A,3454.3738,S,13836.4873,E,0.0350,31.472,190717,,*0C
-$GPGSA,A,3,,,,,,,,,,,,,,,*1C
-{"class":"TPV","status":2,"mode":3,"time":"2017-07-19T08:50:03.200Z","ept":0.005,"lat":-34.906230200,"lon":138.608120900,"alt":24.695,"epx":1.142,"epy":1.142,"epv":1.616,"track":31.4718,"speed":0.018,"climb":-0.325,"eps":0.01,"epc":16.19}
-$GPZDA,085003.40,19,07,2017,00,00*67
-$GPGGA,085003,3454.3738,S,13836.4873,E,2,00,,24.62,M,,,*0F
-$GPRMC,085003,A,3454.3738,S,13836.4873,E,0.0214,31.472,190717,,*0D
-$GPGSA,A,3,,,,,,,,,,,,,,,*1C
-{"class":"TPV","status":2,"mode":3,"time":"2017-07-19T08:50:03.400Z","ept":0.005,"lat":-34.906230500,"lon":138.608121000,"alt":24.617,"epx":1.138,"epy":1.138,"epv":1.609,"track":31.4718,"speed":0.011,"climb":-0.390,"eps":0.01,"epc":16.12}
-$GPZDA,085003.60,19,07,2017,00,00*65
-$GPGGA,085003,3454.3739,S,13836.4873,E,2,00,,24.56,M,,,*09
-$GPRMC,085003,A,3454.3739,S,13836.4873,E,0.0253,31.472,190717,,*0F
-$GPGSA,A,3,,,,,,,,,,,,,,,*1C
-{"class":"TPV","status":2,"mode":3,"time":"2017-07-19T08:50:03.600Z","ept":0.005,"lat":-34.906230900,"lon":138.608121000,"alt":24.561,"epx":1.119,"epy":1.119,"epv":1.582,"track":31.4718,"speed":0.013,"climb":-0.280,"eps":-0.01,"epc":15.95}
-$GPZDA,085003.80,19,07,2017,00,00*6B
-$GPGGA,085003,3454.3739,S,13836.4873,E,2,00,,24.49,M,,,*07
-$GPRMC,085003,A,3454.3739,S,13836.4873,E,0.0408,31.472,190717,,*07
-$GPGSA,A,3,,,,,,,,,,,,,,,*1C
-{"class":"TPV","status":2,"mode":3,"time":"2017-07-19T08:50:03.800Z","ept":0.005,"lat":-34.906231300,"lon":138.608120900,"alt":24.486,"epx":1.098,"epy":1.098,"epv":1.552,"track":31.4718,"speed":0.021,"climb":-0.375,"eps":0.02,"epc":15.67}
-$GPZDA,085004.00,19,07,2017,00,00*64
-$GPGGA,085003,3454.3739,S,13836.4872,E,2,00,,24.39,M,,,*01
-$GPRMC,085003,A,3454.3739,S,13836.4872,E,0.0233,31.472,190717,,*08
-$GPGSA,A,3,,,,,,,,,,,,,,,*1C
-{"class":"TPV","status":2,"mode":3,"time":"2017-07-19T08:50:03.000Z","ept":0.005,"lat":-34.906231700,"lon":138.608120600,"alt":24.390,"epx":1.090,"epy":1.090,"epv":1.538,"track":31.4718,"speed":0.012,"climb":-0.480,"eps":-0.00,"epc":15.45}
-$GPZDA,085004.20,19,07,2017,00,00*66
-$GPGGA,085004,3454.3739,S,13836.4872,E,2,00,,24.31,M,,,*0E
-$GPRMC,085004,A,3454.3739,S,13836.4872,E,0.0330,31.472,190717,,*0D
-$GPGSA,A,3,,,,,,,,,,,,,,,*1C
-{"class":"TPV","status":2,"mode":3,"time":"2017-07-19T08:50:04.200Z","ept":0.005,"lat":-34.906232200,"lon":138.608120300,"alt":24.309,"epx":1.074,"epy":1.074,"epv":1.516,"track":31.4718,"speed":0.017,"climb":-0.405,"eps":-0.01,"epc":15.27}
-$GPZDA,085004.40,19,07,2017,00,00*60
-$GPGGA,085004,3454.3740,S,13836.4872,E,2,00,,24.23,M,,,*03
-$GPRMC,085004,A,3454.3740,S,13836.4872,E,0.0194,31.472,190717,,*0F
-$GPGSA,A,3,,,,,,,,,,,,,,,*1C
-{"class":"TPV","status":2,"mode":3,"time":"2017-07-19T08:50:04.400Z","ept":0.005,"lat":-34.906232600,"lon":138.608120000,"alt":24.225,"epx":1.054,"epy":1.054,"epv":1.487,"track":31.4718,"speed":0.010,"climb":-0.420,"eps":-0.01,"epc":15.01}
-$GPZDA,085004.60,19,07,2017,00,00*62
-$GPGGA,085004,3454.3740,S,13836.4872,E,2,00,,24.15,M,,,*06
-$GPRMC,085004,A,3454.3740,S,13836.4872,E,0.0505,31.472,190717,,*03
-$GPGSA,A,3,,,,,,,,,,,,,,,*1C
-{"class":"TPV","status":2,"mode":3,"time":"2017-07-19T08:50:04.600Z","ept":0.005,"lat":-34.906233100,"lon":138.608119600,"alt":24.154,"epx":1.031,"epy":1.031,"epv":1.455,"track":31.4718,"speed":0.026,"climb":-0.355,"eps":0.03,"epc":14.71}
-$GPZDA,085004.80,19,07,2017,00,00*6C
-$GPGGA,085004,3454.3740,S,13836.4872,E,2,00,,24.06,M,,,*04
-$GPRMC,085004,A,3454.3740,S,13836.4872,E,0.0700,31.472,190717,,*04
-$GPGSA,A,3,,,,,,,,,,,,,,,*1C
-{"class":"TPV","status":2,"mode":3,"time":"2017-07-19T08:50:04.800Z","ept":0.005,"lat":-34.906233600,"lon":138.608119300,"alt":24.063,"epx":1.012,"epy":1.012,"epv":1.428,"track":31.4718,"speed":0.036,"climb":-0.455,"eps":-0.04,"epc":14.41}
-$GPZDA,085005.00,19,07,2017,00,00*65
-$GPGGA,085004,3454.3740,S,13836.4871,E,2,00,,23.98,M,,,*07
-$GPRMC,085004,A,3454.3740,S,13836.4871,E,0.0408,31.472,190717,,*0C
-$GPGSA,A,3,,,,,,,,,,,,,,,*1C
-{"class":"TPV","status":2,"mode":3,"time":"2017-07-19T08:50:04.000Z","ept":0.005,"lat":-34.906233900,"lon":138.608118900,"alt":23.975,"epx":0.997,"epy":0.997,"epv":1.405,"track":31.4718,"speed":0.021,"climb":-0.440,"eps":0.02,"epc":14.16}
-$GPZDA,085005.20,19,07,2017,00,00*67
-$GPGGA,085005,3454.3741,S,13836.4871,E,2,00,,23.88,M,,,*06
-$GPRMC,085005,A,3454.3741,S,13836.4871,E,0.0156,31.472,190717,,*02
-$GPGSA,A,3,,,,,,,,,,,,,,,*1C
-{"class":"TPV","status":2,"mode":3,"time":"2017-07-19T08:50:05.200Z","ept":0.005,"lat":-34.906234400,"lon":138.608118500,"alt":23.884,"epx":0.986,"epy":0.986,"epv":1.388,"track":31.4718,"speed":0.008,"climb":-0.455,"eps":0.01,"epc":13.96}
-$GPZDA,085005.40,19,07,2017,00,00*61
-$GPGGA,085005,3454.3741,S,13836.4871,E,2,00,,23.77,M,,,*06
-$GPRMC,085005,A,3454.3741,S,13836.4871,E,0.0330,31.472,190717,,*00
-$GPGSA,A,3,,,,,,,,,,,,,,,*1C
-{"class":"TPV","status":2,"mode":3,"time":"2017-07-19T08:50:05.400Z","ept":0.005,"lat":-34.906234900,"lon":138.608118100,"alt":23.769,"epx":0.981,"epy":0.981,"epv":1.379,"track":31.4718,"speed":0.017,"climb":-0.575,"eps":-0.01,"epc":13.83}