gpsd-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gpsd-dev] [PATCH 4/4] [isync] Autodetect and configure Spectratime iSyn


From: Michael Brown
Subject: [gpsd-dev] [PATCH 4/4] [isync] Autodetect and configure Spectratime iSync device
Date: Wed, 3 Feb 2016 22:40:26 +0000

The Spectratime iSync devices comprise a u-blox 6 attached to a
separate iSync microcontroller which drives a rubidium oscillator.
The oscillator status messages may appear in the middle of the
underlying GPS messages; these are handled via the "stashed partial
message" support.

This patch modifies the u-blox driver's parse_input() method to
delegate NMEA messages to generic_parse_input() rather than
nmea_parse().  This is done to allow the iSync trigger string to be
detected after reactivation despite the "stickiness" of the u-blox
driver.

The initial delay time in gpsfake is extended from 1.0 seconds to 1.4
seconds to allow for the additional two 200ms delays introduced by the
calls to gpsd_set_speed() in isync_detect().

The iSync driver legitimately uses both a probe_detect() method and a
trigger string.  The guard against such drivers is therefore removed
from test_packet.c.

The regression test data includes one artificially induced packet
collision (where an oscillator status message appears in the middle of
a GPS message), since this corner case is difficult to trigger
deliberately in normal operation.

Signed-off-by: Michael Brown <address@hidden>
---
 SConstruct                |   1 +
 driver_ubx.c              |   8 +-
 drivers.c                 | 170 ++++++++++++++++++++++++++++++++++++++++++
 gpsfake                   |   2 +-
 test/daemon/isync.log     | 149 +++++++++++++++++++++++++++++++++++++
 test/daemon/isync.log.chk | 183 ++++++++++++++++++++++++++++++++++++++++++++++
 test_packet.c             |   5 --
 7 files changed, 507 insertions(+), 11 deletions(-)
 create mode 100644 test/daemon/isync.log
 create mode 100644 test/daemon/isync.log.chk

diff --git a/SConstruct b/SConstruct
index bf1f0b8..de3ed89 100644
--- a/SConstruct
+++ b/SConstruct
@@ -120,6 +120,7 @@ boolopts = (
     ("gpsclock",      True,  "GPSClock support"),
     ("ntrip",         True,  "NTRIP support"),
     ("oceanserver",   True,  "OceanServer support"),
+    ("isync",         True,  "Spectratime iSync LNRClok/GRCLOK support"),
     ("rtcm104v2",     True,  "rtcm104v2 support"),
     ("rtcm104v3",     True,  "rtcm104v3 support"),
     ("passthrough",   True,  "build support for passing through JSON"),
diff --git a/driver_ubx.c b/driver_ubx.c
index 41ff709..d1d29f8 100644
--- a/driver_ubx.c
+++ b/driver_ubx.c
@@ -633,12 +633,8 @@ static gps_mask_t parse_input(struct gps_device_t *session)
     if (session->lexer.type == UBX_PACKET) {
        return ubx_parse(session, session->lexer.outbuffer,
                         session->lexer.outbuflen);
-#ifdef NMEA0183_ENABLE
-    } else if (session->lexer.type == NMEA_PACKET) {
-       return nmea_parse((char *)session->lexer.outbuffer, session);
-#endif /* NMEA0183_ENABLE */
     } else
-       return 0;
+       return generic_parse_input(session);
 }
 
 bool ubx_write(struct gps_device_t * session,
@@ -730,6 +726,8 @@ static void ubx_event_hook(struct gps_device_t *session, 
event_t event)
         */
        if (session->mode == O_OPTIMIZE) {
            ubx_mode(session, MODE_BINARY);
+       } else {
+           ubx_mode(session, MODE_NMEA);
        }
 #endif /* RECONFIGURE_ENABLE */
     } else if (event == event_deactivate) {
diff --git a/drivers.c b/drivers.c
index 0ce47e8..5d62706 100644
--- a/drivers.c
+++ b/drivers.c
@@ -1152,6 +1152,173 @@ const struct gps_type_t driver_mtk3301 = {
 /* *INDENT-ON* */
 #endif /* MTK3301_ENABLE */
 
+#ifdef ISYNC_ENABLE
+/**************************************************************************
+ *
+ * Spectratime LNRCLOK / GRCLOK iSync GPS-disciplined rubidium oscillators
+ *
+ * These devices comprise a u-blox 6 attached to a separate iSync
+ * microcontroller which drives the rubidium oscillator.  The iSync
+ * microcontroller can be configured to pass through the underlying
+ * GPS communication channel, while still using the GPS PPSREF signal
+ * to discipline the rubidium oscillator.
+ *
+ * The iSync can also generate its own periodic status packets in NMEA
+ * format.  These describe the state of the oscillator (including
+ * whether or not the oscillator PPSOUT is synced to the GPS PPSREF).
+ * These packets are transmitted in the middle of the underlying GPS
+ * packets, forcing us to handle interrupted NMEA packets.
+ *
+ * The default state of the device is to generate no periodic output.
+ * We send a probe string to initiate beating of the iSync-proprietary
+ * $PTNTS,B message, which is then detected as a NMEA trigger.
+ *
+ **************************************************************************/
+
+static ssize_t isync_write(struct gps_device_t *session, const char *data)
+
+{
+    return gpsd_write(session, data, strlen(data));
+}
+
+static bool isync_detect(struct gps_device_t *session)
+{
+    speed_t old_baudrate;
+    char old_parity;
+    unsigned int old_stopbits;
+
+    /* Set 9600 8N1 */
+    old_baudrate = session->gpsdata.dev.baudrate;
+    old_parity = session->gpsdata.dev.parity;
+    old_stopbits = session->gpsdata.dev.stopbits;
+    gpsd_set_speed(session, 9600, 'N', 1);
+
+    /* Cancel pass-through mode and initiate beating of $PTNTS,B
+     * message, which can subsequently be detected as a trigger.
+     */
+    (void)isync_write(session, "@@@@\r\nMAW0C0B\r\n");
+
+    /* return serial port to original settings */
+    gpsd_set_speed(session, old_baudrate, old_parity, old_stopbits);
+
+    return false;
+}
+
+static void isync_event_hook(struct gps_device_t *session, event_t event)
+{
+    if (session->context->readonly)
+       return;
+
+    if (event == event_driver_switch) {
+       session->lexer.counter = 0;
+    }
+
+    if (event == event_configure) {
+       switch (session->lexer.counter) {
+       case 1:
+           /* Configure timing and frequency flags:
+            *  - Thermal compensation active
+            *  - PPSREF active
+            *  - PPSOUT active
+            */
+           (void)isync_write(session, "MAW040B\r\n");
+           /* Configure tracking flags:
+            *  - Save frequency every 24 hours
+            *  - Align PPSOUT to PPSINT
+            *  - Track PPSREF
+            */
+           (void)isync_write(session, "MAW0513\r\n");
+           /* Configure tracking start flags:
+            *  - Tracking restart allowed
+            *  - Align to PPSREF
+            */
+           (void)isync_write(session, "MAW0606\r\n");
+           /* Configure tracking window:
+            *  - 4us
+            */
+           (void)isync_write(session, "MAW1304\r\n");
+           /* Configure alarm window:
+            *  - 4us
+            */
+           (void)isync_write(session, "MAW1404\r\n");
+           break;
+       case 2:
+           /* Configure pulse every d second:
+            *  - pulse every second
+            */
+           (void)isync_write(session, "MAW1701\r\n");
+           /* Configure pulse origin:
+            *  - zero offset
+            */
+           (void)isync_write(session, "MAW1800\r\n");
+           /* Configure pulse width:
+            *  - 600ms
+            */
+           (void)isync_write(session, "MAW1223C34600\r\n");
+           break;
+       case 3:
+           /* Configure GPS resource utilization:
+            *  - do not consider GPS messages
+            */
+           (void)isync_write(session, "MAW2200\r\n");
+           /* Restart sync */
+           (void)isync_write(session, "SY1\r\n");
+           /* Restart tracking */
+           (void)isync_write(session, "TR1\r\n");
+           break;
+       case 4:
+           /* Cancel BTx messages (if any) */
+           (void)isync_write(session, "BT0\r\n");
+           /* Configure messages coming out every second:
+            *  - Oscillator status ($PTNTA) at 750ms
+            */
+           (void)isync_write(session, "MAW0B00\r\n");
+           (void)isync_write(session, "MAW0C0A\r\n");
+           break;
+       case 5:
+           /* Enable GPS passthrough and force u-blox driver to
+            * select NMEA mode.
+            */
+           session->mode = 0;
+           session->drivers_identified = 0;
+           (void)isync_write(session, "@@@@GPS\r\n");
+           break;
+       case 6:
+           /* Trigger detection of underlying u-blox (if necessary) */
+           (void)ubx_write(session, 0x06, 0x00, NULL, 0);
+           break;
+       }
+    }
+}
+
+/* *INDENT-OFF* */
+const struct gps_type_t driver_isync = {
+    .type_name      = "iSync",         /* full name of type */
+    .packet_type    = NMEA_PACKET,     /* associated lexer packet type */
+    .flags          = DRIVER_STICKY,   /* remember this */
+    .trigger       = "$PTNTS,B,",      /* iSync status message */
+    .channels       = 50,              /* copied from driver_ubx */
+    .probe_detect   = isync_detect,    /* how to detect at startup time */
+    .get_packet     = generic_get,     /* how to get a packet */
+    .parse_packet   = generic_parse_input,     /* how to interpret a packet */
+    .init_query     = NULL,            /* non-perturbing initial query */
+    .event_hook     = isync_event_hook,        /* lifetime event handler */
+#ifdef RECONFIGURE_ENABLE
+    .speed_switcher = NULL,            /* no speed switcher */
+    .mode_switcher  = NULL,            /* no mode switcher */
+    .rate_switcher  = NULL,            /* no sample-rate switcher */
+    .min_cycle      = 1,               /* not relevant, no rate switch */
+#endif /* RECONFIGURE_ENABLE */
+#ifdef CONTROLSEND_ENABLE
+    .control_send   = nmea_write,      /* how to send control strings */
+#endif /* CONTROLSEND_ENABLE */
+#ifdef TIMEHINT_ENABLE
+    .time_offset     = NULL,           /* no method for NTP fudge factor */
+#endif /* TIMEHINT_ENABLE */
+};
+/* *INDENT-ON* */
+#endif /* ISYNC_ENABLE */
+
 #ifdef AIVDM_ENABLE
 /**************************************************************************
  *
@@ -1626,6 +1793,9 @@ static const struct gps_type_t *gpsd_driver_array[] = {
 #ifdef TSIP_ENABLE
     &driver_tsip,
 #endif /* TSIP_ENABLE */
+#ifdef ISYNC_ENABLE
+    &driver_isync,
+#endif /* ISYNC_ENABLE */
 #ifdef UBLOX_ENABLE
     &driver_ubx,
 #endif /* UBLOX_ENABLE */
diff --git a/gpsfake b/gpsfake
index ae095c6..ba3a513 100755
--- a/gpsfake
+++ b/gpsfake
@@ -222,7 +222,7 @@ if __name__ == '__main__':
                 # sentences to arrive before the watch takes effect.
                 # This needs to increase if leading sentences in
                 # test loads aren't being processed.
-                time.sleep(1)
+                time.sleep(1.4)
             test.run()
         except socket.error, msg:
             sys.stderr.write("gpsfake: socket error %s.\n" % msg)
diff --git a/test/daemon/isync.log b/test/daemon/isync.log
new file mode 100644
index 0000000..1cf8a69
--- /dev/null
+++ b/test/daemon/isync.log
@@ -0,0 +1,149 @@
+# Name: iSync
+# Description: Spectratime iSync GPS-disciplined rubidium oscillator
+# Submitter: Michael Brown <address@hidden>
+# Date: 2016-02-03
+# Location: Chicago, IL, USA
+#
+# Notes: Manipulated to include artificial packet collisions (where
+#       the iSync microcontroller injects a packet into the middle of
+#       a packet from the underlying u-Blox.  Such packets are
+#       observed in practice, albeit rarely.
+#
+$GPRMC,131519.00,A,4153.85990,N,08738.63638,W,0.048,,030216,,,D*61
+$GPVTG,,T,,M,0.048,N,0.089,K,D*2B
+$GPGGA,131519.00,4153.85990,N,08738.63638,W,2,12,0.95,218.1,M,-33.8,M,,0000*61
+$GPGSA,A,3,20,29,13,15,21,05,18,02,51,26,16,30,1.62,0.95,1.31*0E
+$PTNTA,20160203131536,2,T4,000000066,+108,3,0,3*18
+$GPGSV,4,1,15,02,11,115,37,05,34,060,48,07,00,023,,13,56,090,49*70
+$GPGSV,4,2,15,15,55,170,50,16,07,317,32,18,28,257,45,20,78,348,48*74
+$GPGSV,4,3,15,21,39,304,46,26,07,291,37,29,57,214,50,30,07,050,41*74
+$GPGSV,4,4,15,46,38,194,45,48,24,236,44,51,38,208,43*46
+$GPGST,131519.00,11,,,,0.70,0.49,1.1*53
+$GPZDA,131519.00,03,02,2016,00,00*6C
+$GPGBS,131519.00,0.7,0.5,1.1,02,,30.9,12.6*40
+$GPRMC,131520.00,A,4153.85991,N,08738.63642,W,0.049,,030216,,,D*66
+$GPVTG,,T,,M,0.049,N,0.090,K,D*22
+$GPGGA,131520.00,4153.85991,N,08738.63642,W,2,12,0.93,218.1,M,-33.8,M,,0000*61
+$GPGSA,A,3,20,29,13,15,21,05,18,02,51,26,16,30,1.57,0.93,1.26*08
+$GPGSV,4,1,15,02,11,115,36,05,34,060,48,07,00,023,,13,56,090,49*71
+$PTNTA,20160203131537,2,T4,000000066,+099,3,0,3*10
+$GPGSV,4,3,15,21,40,304,46,26,07,291,37,29,57,214,50,30,07,050,41*7A
+$GPGSV,4,4,15,46,38,194,45,48,24,236,44,51,38,208,43*46
+$GPGST,131520.00,18,,,,0.70,0.49,1.1*50
+$GPZDA,131520.00,03,02,2016,00,00*66
+$GPGBS,131520.00,0.7,0.5,1.1,02,,30.0,14.8*4B
+$GPRMC,131521.00,A,4153.85988,N,08738.63646,W,0.048,,030216,,,D*6A
+$GPVTG,,T,,M,0.048,N,0.090,K,D*23
+$GPGGA,131521.00,4153.85988,N,08738.63646,W,2,12,0.77,218.0,M,-33.8,M,,0000*67
+$GPGSA,A,3,20,29,13,15,21,05,18,02,51,26,16,30,1.28,0.77,1.02*0C
+$PTNTA,20160203131538,2,T4,000000000,+093,3,0,3*15
+$GPGSV,4,1,15,02,11,115,36,05,34,060,48,07,00,023,,13,56,090,49*71
+$GPGSV,4,2,15,15,55,170,50,16,07,317,32,18,28,257,44,20,78,348,48*75
+$GPGSV,4,3,15,21,40,304,46,26,07,291,37,29,57,214,50,30,07,050,41*7A
+$GPGSV,4,4,15,46,38,194,45,48,24,236,44,51,38,208,43*46
+$GPGST,131521.00,21,,,,0.70,0.49,1.1*5B
+$GPZDA,131521.00,03,02,2016,00,00*67
+$GPGBS,131521.00,0.7,0.5,1.1,,,,*46
+$GPRMC,131522.00,A,4153.85986,N,08738.63651,W,0.049,,030216,,,D*60
+$GPVTG,,T,,M,0.049,N,0.090,K,D*22
+$GPGGA,131522.00,4153.85986,N,08738.63651,W,2,12,0.77,217.9,M,-33.8,M,,0000*6A
+$GPGSA,A,3,20,29,13,15,21,05,18,02,51,26,16,30,1.28,0.77,1.02*0C
+#
+# Artificially induced packet collision (see above)
+#
+$GPGSV,4,1,15,02,11,115,36,0$PTNTA,20160203131539,2,T4,000000066,+107,3,0,3*18
+5,34,060,48,07,00,023,,13,56,090,49*71
+$GPGSV,4,2,15,15,55,170,50,16,07,317,32,18,28,257,44,20,78,348,48*75
+$GPGSV,4,3,15,21,40,304,46,26,07,291,37,29,57,214,50,30,07,050,41*7A
+$GPGSV,4,4,15,46,38,194,45,48,24,236,44,51,38,208,43*46
+$GPGST,131522.00,18,,,,0.69,0.49,1.1*5A
+$GPZDA,131522.00,03,02,2016,00,00*64
+$GPGBS,131522.00,0.7,0.5,1.1,,,,*45
+$GPRMC,131523.00,A,4153.85985,N,08738.63657,W,0.050,,030216,,,D*6C
+$GPVTG,,T,,M,0.050,N,0.092,K,D*28
+$GPGGA,131523.00,4153.85985,N,08738.63657,W,2,12,0.77,217.9,M,-33.8,M,,0000*6E
+$GPGSA,A,3,20,29,13,15,21,05,18,02,51,26,16,30,1.28,0.77,1.02*0C
+$PTNTA,20160203131540,2,T4,000000066,+099,3,0,3*10
+$GPGSV,4,2,15,15,55,170,50,16,07,317,32,18,28,257,44,20,78,348,48*75
+$GPGSV,4,3,15,21,40,304,46,26,07,291,36,29,57,214,50,30,07,050,42*78
+$GPGSV,4,4,15,46,38,194,45,48,24,236,44,51,38,208,43*46
+$GPGST,131523.00,15,,,,0.69,0.48,1.1*57
+$GPZDA,131523.00,03,02,2016,00,00*65
+$GPGBS,131523.00,0.7,0.5,1.1,,,,*44
+$GPRMC,131524.00,A,4153.85985,N,08738.63662,W,0.051,,030216,,,D*6C
+$GPVTG,,T,,M,0.051,N,0.094,K,D*2F
+$GPGGA,131524.00,4153.85985,N,08738.63662,W,2,12,0.79,217.9,M,-33.8,M,,0000*61
+$GPGSA,A,3,20,29,13,15,21,05,18,02,51,26,16,30,1.34,0.79,1.08*05
+$PTNTA,20160203131541,2,T4,000000000,+093,3,0,3*1B
+$GPGSV,4,2,15,15,55,170,50,16,07,317,31,18,28,257,43,20,78,348,48*71
+$GPGSV,4,3,15,21,40,304,46,26,07,291,36,29,57,214,50,30,07,050,41*7B
+$GPGSV,4,4,15,46,38,194,45,48,24,236,44,51,38,208,43*46
+$GPGST,131524.00,13,,,,0.69,0.48,1.1*56
+$GPZDA,131524.00,03,02,2016,00,00*62
+$GPGBS,131524.00,0.7,0.5,1.1,26,,29.2,15.3*49
+$GPRMC,131525.00,A,4153.85985,N,08738.63665,W,0.051,,030216,,,D*6A
+$GPVTG,,T,,M,0.051,N,0.094,K,D*2F
+$GPGGA,131525.00,4153.85985,N,08738.63665,W,2,12,0.77,218.0,M,-33.8,M,,0000*6F
+$GPGSA,A,3,20,29,13,15,21,05,18,02,51,26,16,30,1.28,0.77,1.02*0C
+$PTNTA,20160203131542,2,T4,000000066,+108,3,0,3*1B
+$GPGSV,4,1,15,02,11,115,35,05,34,060,48,07,00,023,,13,56,090,49*72
+$GPGSV,4,2,15,15,55,170,50,16,07,317,31,18,28,257,43,20,78,348,48*71
+$GPGSV,4,3,15,21,40,304,46,26,07,290,36,29,57,214,50,30,07,050,41*7A
+$GPGSV,4,4,15,46,38,194,45,48,24,236,44,51,38,208,43*46
+$GPGST,131525.00,19,,,,0.69,0.48,1.1*5D
+$GPZDA,131525.00,03,02,2016,00,00*63
+$GPGBS,131525.00,0.7,0.5,1.1,,,,*42
+$GPRMC,131526.00,A,4153.85985,N,08738.63665,W,0.050,,030216,,,D*68
+$GPVTG,,T,,M,0.050,N,0.092,K,D*28
+$GPGGA,131526.00,4153.85985,N,08738.63665,W,2,12,0.93,218.1,M,-33.8,M,,0000*67
+$GPGSA,A,3,20,29,13,15,21,05,18,02,51,26,16,30,1.57,0.93,1.26*08
+$GPGSV,4,1,15,02,11,115,35,05,34,060,48,07,00,023,,13,56,090,49*72
+$PTNTA,20160203131543,2,T4,000000066,+100,3,0,3*12
+$GPGSV,4,3,15,21,40,304,46,26,07,290,35,29,57,214,50,30,07,050,41*79
+$GPGSV,4,4,15,46,38,194,45,48,24,236,44,51,38,208,43*46
+$GPGST,131526.00,17,,,,0.69,0.48,1.1*50
+$GPZDA,131526.00,03,02,2016,00,00*60
+$GPGBS,131526.00,0.7,0.5,1.1,02,,28.6,17.3*4A
+$GPRMC,131527.00,A,4153.85984,N,08738.63667,W,0.049,,030216,,,D*62
+$GPVTG,,T,,M,0.049,N,0.091,K,D*23
+$GPGGA,131527.00,4153.85984,N,08738.63667,W,2,12,0.77,218.2,M,-33.8,M,,0000*6C
+$GPGSA,A,3,20,29,13,15,21,05,18,02,51,26,16,30,1.28,0.77,1.02*0C
+$PTNTA,20160203131544,2,T4,000000000,+093,3,0,3*1E
+$GPGSV,4,2,15,15,55,170,50,16,07,317,31,18,28,257,43,20,78,348,48*71
+$GPGSV,4,3,15,21,40,304,46,26,07,290,34,29,57,214,50,30,07,050,41*78
+$GPGSV,4,4,15,46,38,194,45,48,24,236,44,51,38,208,43*46
+$GPGST,131527.00,21,,,,0.69,0.48,1.0*55
+$GPZDA,131527.00,03,02,2016,00,00*61
+$GPGBS,131527.00,0.7,0.5,1.0,,,,*41
+$GPRMC,131528.00,A,4153.85984,N,08738.63668,W,0.048,,030216,,,D*63
+$GPVTG,,T,,M,0.048,N,0.089,K,D*2B
+$GPGGA,131528.00,4153.85984,N,08738.63668,W,2,12,0.77,218.3,M,-33.8,M,,0000*6D
+$GPGSA,A,3,20,29,13,15,21,05,18,02,51,26,16,30,1.28,0.77,1.02*0C
+$PTNTA,20160203131545,2,T4,000000066,+108,3,0,3*1C
+$GPGSV,4,2,15,15,55,170,50,16,07,317,30,18,28,257,43,20,78,348,48*70
+$GPGSV,4,3,15,21,40,304,46,26,07,290,34,29,57,213,50,30,07,050,41*7F
+$GPGSV,4,4,15,46,38,194,45,48,24,236,44,51,38,208,43*46
+$GPGST,131528.00,18,,,,0.69,0.48,1.0*50
+$GPZDA,131528.00,03,02,2016,00,00*6E
+$GPGBS,131528.00,0.7,0.5,1.0,,,,*4E
+$GPRMC,131529.00,A,4153.85984,N,08738.63669,W,0.048,,030216,,,D*63
+$GPVTG,,T,,M,0.048,N,0.088,K,D*2A
+$GPGGA,131529.00,4153.85984,N,08738.63669,W,2,12,0.79,218.4,M,-33.8,M,,0000*64
+$GPGSA,A,3,20,29,13,15,21,05,18,02,51,26,16,30,1.34,0.79,1.08*05
+$GPGSV,4,1,15,02,11,115,35,05,34,060,48,07,00,023,,13,56,090,50*7A
+$PTNTA,20160203131546,2,T4,000000066,+099,3,0,3*16
+$GPGSV,4,2,15,15,55,170,50,16,07,317,30,18,28,257,43,20,78,348,48*70
+$GPGSV,4,3,15,21,40,304,46,26,07,290,34,29,57,213,50,30,07,050,41*7F
+$GPGSV,4,4,15,46,38,194,45,48,24,236,44,51,38,208,43*46
+$GPGST,131529.00,16,,,,0.69,0.47,1.0*50
+$GPZDA,131529.00,03,02,2016,00,00*6F
+$GPGBS,131529.00,0.7,0.5,1.0,26,,37.2,20.5*4A
+$GPRMC,131530.00,A,4153.85984,N,08738.63670,W,0.038,,030216,,,D*64
+$GPVTG,,T,,M,0.038,N,0.070,K,D*2A
+$GPGGA,131530.00,4153.85984,N,08738.63670,W,2,12,0.73,218.5,M,-33.8,M,,0000*6F
+$GPGSA,A,3,20,29,13,15,46,21,05,18,02,51,26,16,1.25,0.73,1.02*04
+$GPGSV,4,1,15,02,11,115,35,05,34,060,48,07,00,023,,13,56,090,50*7A
+$PTNTA,20160203131547,2,T4,000000000,+092,3,0,3*1C
+$GPGSV,4,2,15,15,55,170,50,16,07,317,30,18,28,257,43,20,78,348,48*70
+$GPGSV,4,3,15,21,40,304,46,26,07,290,32,29,57,213,50,30,07,050,41*79
+$GPGSV,4,4,15,46,38,194,45,48,24,236,44,51,38,208,43*46
diff --git a/test/daemon/isync.log.chk b/test/daemon/isync.log.chk
new file mode 100644
index 0000000..129d6c8
--- /dev/null
+++ b/test/daemon/isync.log.chk
@@ -0,0 +1,183 @@
+$GPRMC,131519.00,A,4153.85990,N,08738.63638,W,0.048,,030216,,,D*61
+{"class":"TPV","mode":2,"time":"2016-02-03T13:15:19.000Z","ept":0.005,"lat":41.897665000,"lon":-87.643939667,"track":0.0000,"speed":0.025}
+$GPVTG,,T,,M,0.048,N,0.089,K,D*2B
+$GPGGA,131519.00,4153.85990,N,08738.63638,W,2,12,0.95,218.1,M,-33.8,M,,0000*61
+{"class":"TPV","mode":3,"time":"2016-02-03T13:15:19.000Z","ept":0.005,"lat":41.897665000,"lon":-87.643939667,"alt":218.100,"track":0.0000,"speed":0.025}
+$GPGSA,A,3,20,29,13,15,21,05,18,02,51,26,16,30,1.62,0.95,1.31*0E
+{"class":"TPV","mode":3,"time":"2016-02-03T13:15:19.000Z","ept":0.005,"lat":41.897665000,"lon":-87.643939667,"alt":218.100,"epv":7.533,"track":0.0000,"speed":0.025,"climb":0.000}
+$PTNTA,20160203131536,2,T4,000000066,+108,3,0,3*18
+{"class":"OSC","running":true,"reference":true,"disciplined":true,"delta":108}
+$GPGSV,4,1,15,02,11,115,37,05,34,060,48,07,00,023,,13,56,090,49*70
+$GPGSV,4,2,15,15,55,170,50,16,07,317,32,18,28,257,45,20,78,348,48*74
+$GPGSV,4,3,15,21,39,304,46,26,07,291,37,29,57,214,50,30,07,050,41*74
+$GPGSV,4,4,15,46,38,194,45,48,24,236,44,51,38,208,43*46
+{"class":"SKY","xdop":0.46,"ydop":0.78,"vdop":1.31,"tdop":0.67,"hdop":0.95,"gdop":1.56,"pdop":1.62,"satellites":[{"PRN":2,"el":11,"az":115,"ss":37,"used":true},{"PRN":5,"el":34,"az":60,"ss":48,"used":true},{"PRN":7,"el":0,"az":23,"ss":0,"used":false},{"PRN":13,"el":56,"az":90,"ss":49,"used":true},{"PRN":15,"el":55,"az":170,"ss":50,"used":true},{"PRN":16,"el":7,"az":317,"ss":32,"used":true},{"PRN":18,"el":28,"az":257,"ss":45,"used":true},{"PRN":20,"el":78,"az":348,"ss":48,"used":true},{"PRN":21,"el":39,"az":304,"ss":46,"used":true},{"PRN":26,"el":7,"az":291,"ss":37,"used":true},{"PRN":29,"el":57,"az":214,"ss":50,"used":true},{"PRN":30,"el":7,"az":50,"ss":41,"used":true},{"PRN":133,"el":38,"az":194,"ss":45,"used":false},{"PRN":135,"el":24,"az":236,"ss":44,"used":false},{"PRN":138,"el":38,"az":208,"ss":43,"used":true}]}
+$GPGST,131519.00,11,,,,0.70,0.49,1.1*53
+{"class":"GST","time":"1970-01-02T12:31:59.000Z","rms":11.000,"lat":0.700,"lon":0.490,"alt":1.100}
+$GPZDA,131519.00,03,02,2016,00,00*6C
+$GPGBS,131519.00,0.7,0.5,1.1,02,,30.9,12.6*40
+$GPRMC,131520.00,A,4153.85991,N,08738.63642,W,0.049,,030216,,,D*66
+$GPVTG,,T,,M,0.049,N,0.090,K,D*22
+$GPGGA,131520.00,4153.85991,N,08738.63642,W,2,12,0.93,218.1,M,-33.8,M,,0000*61
+$GPGSA,A,3,20,29,13,15,21,05,18,02,51,26,16,30,1.57,0.93,1.26*08
+$GPGSV,4,1,15,02,11,115,36,05,34,060,48,07,00,023,,13,56,090,49*71
+$PTNTA,20160203131537,2,T4,000000066,+099,3,0,3*10
+{"class":"OSC","running":true,"reference":true,"disciplined":true,"delta":99}
+$GPGSV,4,3,15,21,40,304,46,26,07,291,37,29,57,214,50,30,07,050,41*7A
+$GPGSV,4,4,15,46,38,194,45,48,24,236,44,51,38,208,43*46
+{"class":"SKY","xdop":0.46,"ydop":0.78,"vdop":1.26,"tdop":0.67,"hdop":0.93,"gdop":1.56,"pdop":1.57,"satellites":[{"PRN":2,"el":11,"az":115,"ss":36,"used":true},{"PRN":5,"el":34,"az":60,"ss":48,"used":true},{"PRN":7,"el":0,"az":23,"ss":0,"used":false},{"PRN":13,"el":56,"az":90,"ss":49,"used":true},{"PRN":21,"el":40,"az":304,"ss":46,"used":true},{"PRN":26,"el":7,"az":291,"ss":37,"used":true},{"PRN":29,"el":57,"az":214,"ss":50,"used":true},{"PRN":30,"el":7,"az":50,"ss":41,"used":true},{"PRN":133,"el":38,"az":194,"ss":45,"used":false},{"PRN":135,"el":24,"az":236,"ss":44,"used":false},{"PRN":138,"el":38,"az":208,"ss":43,"used":true}]}
+$GPGST,131520.00,18,,,,0.70,0.49,1.1*50
+{"class":"GST","time":"1970-01-02T12:32:00.000Z","rms":18.000,"lat":0.700,"lon":0.490,"alt":1.100}
+$GPZDA,131520.00,03,02,2016,00,00*66
+$GPGBS,131520.00,0.7,0.5,1.1,02,,30.0,14.8*4B
+{"class":"TPV","mode":3,"time":"2016-02-03T13:15:20.000Z","ept":0.005,"lat":41.897665167,"lon":-87.643940333,"alt":218.100,"epx":0.500,"epy":0.700,"epv":1.100,"track":0.0000,"speed":0.025,"climb":0.000,"eps":3.64}
+$GPRMC,131521.00,A,4153.85988,N,08738.63646,W,0.048,,030216,,,D*6A
+$GPVTG,,T,,M,0.048,N,0.090,K,D*23
+$GPGGA,131521.00,4153.85988,N,08738.63646,W,2,12,0.77,218.0,M,-33.8,M,,0000*67
+$GPGSA,A,3,20,29,13,15,21,05,18,02,51,26,16,30,1.28,0.77,1.02*0C
+$PTNTA,20160203131538,2,T4,000000000,+093,3,0,3*15
+{"class":"OSC","running":true,"reference":true,"disciplined":true,"delta":93}
+$GPGSV,4,1,15,02,11,115,36,05,34,060,48,07,00,023,,13,56,090,49*71
+$GPGSV,4,2,15,15,55,170,50,16,07,317,32,18,28,257,44,20,78,348,48*75
+$GPGSV,4,3,15,21,40,304,46,26,07,291,37,29,57,214,50,30,07,050,41*7A
+$GPGSV,4,4,15,46,38,194,45,48,24,236,44,51,38,208,43*46
+{"class":"SKY","xdop":0.46,"ydop":0.78,"vdop":1.02,"tdop":0.67,"hdop":0.77,"gdop":1.56,"pdop":1.28,"satellites":[{"PRN":2,"el":11,"az":115,"ss":36,"used":true},{"PRN":5,"el":34,"az":60,"ss":48,"used":true},{"PRN":7,"el":0,"az":23,"ss":0,"used":false},{"PRN":13,"el":56,"az":90,"ss":49,"used":true},{"PRN":15,"el":55,"az":170,"ss":50,"used":true},{"PRN":16,"el":7,"az":317,"ss":32,"used":true},{"PRN":18,"el":28,"az":257,"ss":44,"used":true},{"PRN":20,"el":78,"az":348,"ss":48,"used":true},{"PRN":21,"el":40,"az":304,"ss":46,"used":true},{"PRN":26,"el":7,"az":291,"ss":37,"used":true},{"PRN":29,"el":57,"az":214,"ss":50,"used":true},{"PRN":30,"el":7,"az":50,"ss":41,"used":true},{"PRN":133,"el":38,"az":194,"ss":45,"used":false},{"PRN":135,"el":24,"az":236,"ss":44,"used":false},{"PRN":138,"el":38,"az":208,"ss":43,"used":true}]}
+$GPGST,131521.00,21,,,,0.70,0.49,1.1*5B
+{"class":"GST","time":"1970-01-02T12:32:01.000Z","rms":21.000,"lat":0.700,"lon":0.490,"alt":1.100}
+$GPZDA,131521.00,03,02,2016,00,00*67
+$GPGBS,131521.00,0.7,0.5,1.1,,,,*46
+{"class":"TPV","mode":3,"time":"2016-02-03T13:15:21.000Z","ept":0.005,"lat":41.897664667,"lon":-87.643941000,"alt":218.000,"epx":0.500,"epy":0.700,"epv":1.100,"track":0.0000,"speed":0.025,"climb":0.000,"eps":3.64}
+$GPRMC,131522.00,A,4153.85986,N,08738.63651,W,0.049,,030216,,,D*60
+$GPVTG,,T,,M,0.049,N,0.090,K,D*22
+$GPGGA,131522.00,4153.85986,N,08738.63651,W,2,12,0.77,217.9,M,-33.8,M,,0000*6A
+$GPGSA,A,3,20,29,13,15,21,05,18,02,51,26,16,30,1.28,0.77,1.02*0C
+$PTNTA,20160203131539,2,T4,000000066,+107,3,0,3*18
+{"class":"OSC","running":true,"reference":true,"disciplined":true,"delta":107}
+$GPGSV,4,1,15,02,11,115,36,05,34,060,48,07,00,023,,13,56,090,49*71
+$GPGSV,4,2,15,15,55,170,50,16,07,317,32,18,28,257,44,20,78,348,48*75
+$GPGSV,4,3,15,21,40,304,46,26,07,291,37,29,57,214,50,30,07,050,41*7A
+$GPGSV,4,4,15,46,38,194,45,48,24,236,44,51,38,208,43*46
+{"class":"SKY","xdop":0.46,"ydop":0.78,"vdop":1.02,"tdop":0.67,"hdop":0.77,"gdop":1.56,"pdop":1.28,"satellites":[{"PRN":2,"el":11,"az":115,"ss":36,"used":true},{"PRN":5,"el":34,"az":60,"ss":48,"used":true},{"PRN":7,"el":0,"az":23,"ss":0,"used":false},{"PRN":13,"el":56,"az":90,"ss":49,"used":true},{"PRN":15,"el":55,"az":170,"ss":50,"used":true},{"PRN":16,"el":7,"az":317,"ss":32,"used":true},{"PRN":18,"el":28,"az":257,"ss":44,"used":true},{"PRN":20,"el":78,"az":348,"ss":48,"used":true},{"PRN":21,"el":40,"az":304,"ss":46,"used":true},{"PRN":26,"el":7,"az":291,"ss":37,"used":true},{"PRN":29,"el":57,"az":214,"ss":50,"used":true},{"PRN":30,"el":7,"az":50,"ss":41,"used":true},{"PRN":133,"el":38,"az":194,"ss":45,"used":false},{"PRN":135,"el":24,"az":236,"ss":44,"used":false},{"PRN":138,"el":38,"az":208,"ss":43,"used":true}]}
+$GPGST,131522.00,18,,,,0.69,0.49,1.1*5A
+{"class":"GST","time":"1970-01-02T12:32:02.000Z","rms":18.000,"lat":0.690,"lon":0.490,"alt":1.100}
+$GPZDA,131522.00,03,02,2016,00,00*64
+$GPGBS,131522.00,0.7,0.5,1.1,,,,*45
+{"class":"TPV","mode":3,"time":"2016-02-03T13:15:22.000Z","ept":0.005,"lat":41.897664333,"lon":-87.643941833,"alt":217.900,"epx":0.500,"epy":0.700,"epv":1.100,"track":0.0000,"speed":0.025,"climb":0.000,"eps":3.64}
+$GPRMC,131523.00,A,4153.85985,N,08738.63657,W,0.050,,030216,,,D*6C
+$GPVTG,,T,,M,0.050,N,0.092,K,D*28
+$GPGGA,131523.00,4153.85985,N,08738.63657,W,2,12,0.77,217.9,M,-33.8,M,,0000*6E
+$GPGSA,A,3,20,29,13,15,21,05,18,02,51,26,16,30,1.28,0.77,1.02*0C
+$PTNTA,20160203131540,2,T4,000000066,+099,3,0,3*10
+{"class":"OSC","running":true,"reference":true,"disciplined":true,"delta":99}
+$GPGSV,4,2,15,15,55,170,50,16,07,317,32,18,28,257,44,20,78,348,48*75
+$GPGSV,4,3,15,21,40,304,46,26,07,291,36,29,57,214,50,30,07,050,42*78
+$GPGSV,4,4,15,46,38,194,45,48,24,236,44,51,38,208,43*46
+{"class":"SKY","xdop":0.46,"ydop":0.78,"vdop":1.02,"tdop":0.67,"hdop":0.77,"gdop":1.56,"pdop":1.28,"satellites":[{"PRN":2,"el":11,"az":115,"ss":36,"used":true},{"PRN":5,"el":34,"az":60,"ss":48,"used":true},{"PRN":7,"el":0,"az":23,"ss":0,"used":false},{"PRN":13,"el":56,"az":90,"ss":49,"used":true},{"PRN":15,"el":55,"az":170,"ss":50,"used":true},{"PRN":16,"el":7,"az":317,"ss":32,"used":true},{"PRN":18,"el":28,"az":257,"ss":44,"used":true},{"PRN":20,"el":78,"az":348,"ss":48,"used":true},{"PRN":21,"el":40,"az":304,"ss":46,"used":true},{"PRN":26,"el":7,"az":291,"ss":37,"used":true},{"PRN":29,"el":57,"az":214,"ss":50,"used":true},{"PRN":30,"el":7,"az":50,"ss":41,"used":true},{"PRN":133,"el":38,"az":194,"ss":45,"used":false},{"PRN":135,"el":24,"az":236,"ss":44,"used":false},{"PRN":138,"el":38,"az":208,"ss":43,"used":true},{"PRN":15,"el":55,"az":170,"ss":50,"used":true},{"PRN":16,"el":7,"az":317,"ss":32,"used":true},{"PRN":18,"el":28,"az":257,"ss":44,"used":true},{"PRN":20,"el":78,"
 
az":348,"ss":48,"used":true},{"PRN":21,"el":40,"az":304,"ss":46,"used":true},{"PRN":26,"el":7,"az":291,"ss":36,"used":true},{"PRN":29,"el":57,"az":214,"ss":50,"used":true},{"PRN":30,"el":7,"az":50,"ss":42,"used":true},{"PRN":133,"el":38,"az":194,"ss":45,"used":false},{"PRN":135,"el":24,"az":236,"ss":44,"used":false},{"PRN":138,"el":38,"az":208,"ss":43,"used":true}]}
+$GPGST,131523.00,15,,,,0.69,0.48,1.1*57
+{"class":"GST","time":"1970-01-02T12:32:03.000Z","rms":15.000,"lat":0.690,"lon":0.480,"alt":1.100}
+$GPZDA,131523.00,03,02,2016,00,00*65
+$GPGBS,131523.00,0.7,0.5,1.1,,,,*44
+{"class":"TPV","mode":3,"time":"2016-02-03T13:15:23.000Z","ept":0.005,"lat":41.897664167,"lon":-87.643942833,"alt":217.900,"epx":0.500,"epy":0.700,"epv":1.100,"track":0.0000,"speed":0.026,"climb":0.000,"eps":3.64}
+$GPRMC,131524.00,A,4153.85985,N,08738.63662,W,0.051,,030216,,,D*6C
+$GPVTG,,T,,M,0.051,N,0.094,K,D*2F
+$GPGGA,131524.00,4153.85985,N,08738.63662,W,2,12,0.79,217.9,M,-33.8,M,,0000*61
+$GPGSA,A,3,20,29,13,15,21,05,18,02,51,26,16,30,1.34,0.79,1.08*05
+$PTNTA,20160203131541,2,T4,000000000,+093,3,0,3*1B
+{"class":"OSC","running":true,"reference":true,"disciplined":true,"delta":93}
+$GPGSV,4,2,15,15,55,170,50,16,07,317,31,18,28,257,43,20,78,348,48*71
+$GPGSV,4,3,15,21,40,304,46,26,07,291,36,29,57,214,50,30,07,050,41*7B
+$GPGSV,4,4,15,46,38,194,45,48,24,236,44,51,38,208,43*46
+{"class":"SKY","xdop":0.46,"ydop":0.78,"vdop":1.08,"tdop":0.67,"hdop":0.79,"gdop":1.56,"pdop":1.34,"satellites":[{"PRN":2,"el":11,"az":115,"ss":36,"used":true},{"PRN":5,"el":34,"az":60,"ss":48,"used":true},{"PRN":7,"el":0,"az":23,"ss":0,"used":false},{"PRN":13,"el":56,"az":90,"ss":49,"used":true},{"PRN":15,"el":55,"az":170,"ss":50,"used":true},{"PRN":16,"el":7,"az":317,"ss":32,"used":true},{"PRN":18,"el":28,"az":257,"ss":44,"used":true},{"PRN":20,"el":78,"az":348,"ss":48,"used":true},{"PRN":21,"el":40,"az":304,"ss":46,"used":true},{"PRN":26,"el":7,"az":291,"ss":37,"used":true},{"PRN":29,"el":57,"az":214,"ss":50,"used":true},{"PRN":30,"el":7,"az":50,"ss":41,"used":true},{"PRN":133,"el":38,"az":194,"ss":45,"used":false},{"PRN":135,"el":24,"az":236,"ss":44,"used":false},{"PRN":138,"el":38,"az":208,"ss":43,"used":true},{"PRN":15,"el":55,"az":170,"ss":50,"used":true},{"PRN":16,"el":7,"az":317,"ss":32,"used":true},{"PRN":18,"el":28,"az":257,"ss":44,"used":true},{"PRN":20,"el":78,"
 
az":348,"ss":48,"used":true},{"PRN":21,"el":40,"az":304,"ss":46,"used":true},{"PRN":26,"el":7,"az":291,"ss":36,"used":true},{"PRN":29,"el":57,"az":214,"ss":50,"used":true},{"PRN":30,"el":7,"az":50,"ss":42,"used":true},{"PRN":133,"el":38,"az":194,"ss":45,"used":false},{"PRN":135,"el":24,"az":236,"ss":44,"used":false},{"PRN":138,"el":38,"az":208,"ss":43,"used":true},{"PRN":15,"el":55,"az":170,"ss":50,"used":true},{"PRN":16,"el":7,"az":317,"ss":31,"used":true},{"PRN":18,"el":28,"az":257,"ss":43,"used":true},{"PRN":20,"el":78,"az":348,"ss":48,"used":true},{"PRN":21,"el":40,"az":304,"ss":46,"used":true},{"PRN":26,"el":7,"az":291,"ss":36,"used":true},{"PRN":29,"el":57,"az":214,"ss":50,"used":true},{"PRN":30,"el":7,"az":50,"ss":41,"used":true},{"PRN":133,"el":38,"az":194,"ss":45,"used":false},{"PRN":135,"el":24,"az":236,"ss":44,"used":false},{"PRN":138,"el":38,"az":208,"ss":43,"used":true}]}
+$GPGST,131524.00,13,,,,0.69,0.48,1.1*56
+{"class":"GST","time":"1970-01-02T12:32:04.000Z","rms":13.000,"lat":0.690,"lon":0.480,"alt":1.100}
+$GPZDA,131524.00,03,02,2016,00,00*62
+$GPGBS,131524.00,0.7,0.5,1.1,26,,29.2,15.3*49
+{"class":"TPV","mode":3,"time":"2016-02-03T13:15:24.000Z","ept":0.005,"lat":41.897664167,"lon":-87.643943667,"alt":217.900,"epx":0.500,"epy":0.700,"epv":1.100,"track":0.0000,"speed":0.026,"climb":0.000,"eps":3.64}
+$GPRMC,131525.00,A,4153.85985,N,08738.63665,W,0.051,,030216,,,D*6A
+$GPVTG,,T,,M,0.051,N,0.094,K,D*2F
+$GPGGA,131525.00,4153.85985,N,08738.63665,W,2,12,0.77,218.0,M,-33.8,M,,0000*6F
+$GPGSA,A,3,20,29,13,15,21,05,18,02,51,26,16,30,1.28,0.77,1.02*0C
+$PTNTA,20160203131542,2,T4,000000066,+108,3,0,3*1B
+{"class":"OSC","running":true,"reference":true,"disciplined":true,"delta":108}
+$GPGSV,4,1,15,02,11,115,35,05,34,060,48,07,00,023,,13,56,090,49*72
+$GPGSV,4,2,15,15,55,170,50,16,07,317,31,18,28,257,43,20,78,348,48*71
+$GPGSV,4,3,15,21,40,304,46,26,07,290,36,29,57,214,50,30,07,050,41*7A
+$GPGSV,4,4,15,46,38,194,45,48,24,236,44,51,38,208,43*46
+{"class":"SKY","xdop":0.46,"ydop":0.78,"vdop":1.02,"tdop":0.67,"hdop":0.77,"gdop":1.56,"pdop":1.28,"satellites":[{"PRN":2,"el":11,"az":115,"ss":35,"used":true},{"PRN":5,"el":34,"az":60,"ss":48,"used":true},{"PRN":7,"el":0,"az":23,"ss":0,"used":false},{"PRN":13,"el":56,"az":90,"ss":49,"used":true},{"PRN":15,"el":55,"az":170,"ss":50,"used":true},{"PRN":16,"el":7,"az":317,"ss":31,"used":true},{"PRN":18,"el":28,"az":257,"ss":43,"used":true},{"PRN":20,"el":78,"az":348,"ss":48,"used":true},{"PRN":21,"el":40,"az":304,"ss":46,"used":true},{"PRN":26,"el":7,"az":290,"ss":36,"used":true},{"PRN":29,"el":57,"az":214,"ss":50,"used":true},{"PRN":30,"el":7,"az":50,"ss":41,"used":true},{"PRN":133,"el":38,"az":194,"ss":45,"used":false},{"PRN":135,"el":24,"az":236,"ss":44,"used":false},{"PRN":138,"el":38,"az":208,"ss":43,"used":true}]}
+$GPGST,131525.00,19,,,,0.69,0.48,1.1*5D
+{"class":"GST","time":"1970-01-02T12:32:05.000Z","rms":19.000,"lat":0.690,"lon":0.480,"alt":1.100}
+$GPZDA,131525.00,03,02,2016,00,00*63
+$GPGBS,131525.00,0.7,0.5,1.1,,,,*42
+{"class":"TPV","mode":3,"time":"2016-02-03T13:15:25.000Z","ept":0.005,"lat":41.897664167,"lon":-87.643944167,"alt":218.000,"epx":0.500,"epy":0.700,"epv":1.100,"track":0.0000,"speed":0.026,"climb":0.000,"eps":3.64}
+$GPRMC,131526.00,A,4153.85985,N,08738.63665,W,0.050,,030216,,,D*68
+$GPVTG,,T,,M,0.050,N,0.092,K,D*28
+$GPGGA,131526.00,4153.85985,N,08738.63665,W,2,12,0.93,218.1,M,-33.8,M,,0000*67
+$GPGSA,A,3,20,29,13,15,21,05,18,02,51,26,16,30,1.57,0.93,1.26*08
+$GPGSV,4,1,15,02,11,115,35,05,34,060,48,07,00,023,,13,56,090,49*72
+$PTNTA,20160203131543,2,T4,000000066,+100,3,0,3*12
+{"class":"OSC","running":true,"reference":true,"disciplined":true,"delta":100}
+$GPGSV,4,3,15,21,40,304,46,26,07,290,35,29,57,214,50,30,07,050,41*79
+$GPGSV,4,4,15,46,38,194,45,48,24,236,44,51,38,208,43*46
+{"class":"SKY","xdop":0.46,"ydop":0.78,"vdop":1.26,"tdop":0.67,"hdop":0.93,"gdop":1.56,"pdop":1.57,"satellites":[{"PRN":2,"el":11,"az":115,"ss":35,"used":true},{"PRN":5,"el":34,"az":60,"ss":48,"used":true},{"PRN":7,"el":0,"az":23,"ss":0,"used":false},{"PRN":13,"el":56,"az":90,"ss":49,"used":true},{"PRN":21,"el":40,"az":304,"ss":46,"used":true},{"PRN":26,"el":7,"az":290,"ss":35,"used":true},{"PRN":29,"el":57,"az":214,"ss":50,"used":true},{"PRN":30,"el":7,"az":50,"ss":41,"used":true},{"PRN":133,"el":38,"az":194,"ss":45,"used":false},{"PRN":135,"el":24,"az":236,"ss":44,"used":false},{"PRN":138,"el":38,"az":208,"ss":43,"used":true}]}
+$GPGST,131526.00,17,,,,0.69,0.48,1.1*50
+{"class":"GST","time":"1970-01-02T12:32:06.000Z","rms":17.000,"lat":0.690,"lon":0.480,"alt":1.100}
+$GPZDA,131526.00,03,02,2016,00,00*60
+$GPGBS,131526.00,0.7,0.5,1.1,02,,28.6,17.3*4A
+{"class":"TPV","mode":3,"time":"2016-02-03T13:15:26.000Z","ept":0.005,"lat":41.897664167,"lon":-87.643944167,"alt":218.100,"epx":0.500,"epy":0.700,"epv":1.100,"track":0.0000,"speed":0.026,"climb":0.000,"eps":3.64}
+$GPRMC,131527.00,A,4153.85984,N,08738.63667,W,0.049,,030216,,,D*62
+$GPVTG,,T,,M,0.049,N,0.091,K,D*23
+$GPGGA,131527.00,4153.85984,N,08738.63667,W,2,12,0.77,218.2,M,-33.8,M,,0000*6C
+$GPGSA,A,3,20,29,13,15,21,05,18,02,51,26,16,30,1.28,0.77,1.02*0C
+$PTNTA,20160203131544,2,T4,000000000,+093,3,0,3*1E
+{"class":"OSC","running":true,"reference":true,"disciplined":true,"delta":93}
+$GPGSV,4,2,15,15,55,170,50,16,07,317,31,18,28,257,43,20,78,348,48*71
+$GPGSV,4,3,15,21,40,304,46,26,07,290,34,29,57,214,50,30,07,050,41*78
+$GPGSV,4,4,15,46,38,194,45,48,24,236,44,51,38,208,43*46
+{"class":"SKY","xdop":0.46,"ydop":0.78,"vdop":1.02,"tdop":0.67,"hdop":0.77,"gdop":1.56,"pdop":1.28,"satellites":[{"PRN":2,"el":11,"az":115,"ss":35,"used":true},{"PRN":5,"el":34,"az":60,"ss":48,"used":true},{"PRN":7,"el":0,"az":23,"ss":0,"used":false},{"PRN":13,"el":56,"az":90,"ss":49,"used":true},{"PRN":21,"el":40,"az":304,"ss":46,"used":true},{"PRN":26,"el":7,"az":290,"ss":35,"used":true},{"PRN":29,"el":57,"az":214,"ss":50,"used":true},{"PRN":30,"el":7,"az":50,"ss":41,"used":true},{"PRN":133,"el":38,"az":194,"ss":45,"used":false},{"PRN":135,"el":24,"az":236,"ss":44,"used":false},{"PRN":138,"el":38,"az":208,"ss":43,"used":true},{"PRN":15,"el":55,"az":170,"ss":50,"used":true},{"PRN":16,"el":7,"az":317,"ss":31,"used":true},{"PRN":18,"el":28,"az":257,"ss":43,"used":true},{"PRN":20,"el":78,"az":348,"ss":48,"used":true},{"PRN":21,"el":40,"az":304,"ss":46,"used":true},{"PRN":26,"el":7,"az":290,"ss":34,"used":true},{"PRN":29,"el":57,"az":214,"ss":50,"used":true},{"PRN":30,"el":7,"a
 
z":50,"ss":41,"used":true},{"PRN":133,"el":38,"az":194,"ss":45,"used":false},{"PRN":135,"el":24,"az":236,"ss":44,"used":false},{"PRN":138,"el":38,"az":208,"ss":43,"used":true}]}
+$GPGST,131527.00,21,,,,0.69,0.48,1.0*55
+{"class":"GST","time":"1970-01-02T12:32:07.000Z","rms":21.000,"lat":0.690,"lon":0.480,"alt":1.000}
+$GPZDA,131527.00,03,02,2016,00,00*61
+$GPGBS,131527.00,0.7,0.5,1.0,,,,*41
+{"class":"TPV","mode":3,"time":"2016-02-03T13:15:27.000Z","ept":0.005,"lat":41.897664000,"lon":-87.643944500,"alt":218.200,"epx":0.500,"epy":0.700,"epv":1.000,"track":0.0000,"speed":0.025,"climb":0.000,"eps":3.64}
+$GPRMC,131528.00,A,4153.85984,N,08738.63668,W,0.048,,030216,,,D*63
+$GPVTG,,T,,M,0.048,N,0.089,K,D*2B
+$GPGGA,131528.00,4153.85984,N,08738.63668,W,2,12,0.77,218.3,M,-33.8,M,,0000*6D
+$GPGSA,A,3,20,29,13,15,21,05,18,02,51,26,16,30,1.28,0.77,1.02*0C
+$PTNTA,20160203131545,2,T4,000000066,+108,3,0,3*1C
+{"class":"OSC","running":true,"reference":true,"disciplined":true,"delta":108}
+$GPGSV,4,2,15,15,55,170,50,16,07,317,30,18,28,257,43,20,78,348,48*70
+$GPGSV,4,3,15,21,40,304,46,26,07,290,34,29,57,213,50,30,07,050,41*7F
+$GPGSV,4,4,15,46,38,194,45,48,24,236,44,51,38,208,43*46
+{"class":"SKY","xdop":0.46,"ydop":0.78,"vdop":1.02,"tdop":0.67,"hdop":0.77,"gdop":1.56,"pdop":1.28,"satellites":[{"PRN":2,"el":11,"az":115,"ss":35,"used":true},{"PRN":5,"el":34,"az":60,"ss":48,"used":true},{"PRN":7,"el":0,"az":23,"ss":0,"used":false},{"PRN":13,"el":56,"az":90,"ss":49,"used":true},{"PRN":21,"el":40,"az":304,"ss":46,"used":true},{"PRN":26,"el":7,"az":290,"ss":35,"used":true},{"PRN":29,"el":57,"az":214,"ss":50,"used":true},{"PRN":30,"el":7,"az":50,"ss":41,"used":true},{"PRN":133,"el":38,"az":194,"ss":45,"used":false},{"PRN":135,"el":24,"az":236,"ss":44,"used":false},{"PRN":138,"el":38,"az":208,"ss":43,"used":true},{"PRN":15,"el":55,"az":170,"ss":50,"used":true},{"PRN":16,"el":7,"az":317,"ss":31,"used":true},{"PRN":18,"el":28,"az":257,"ss":43,"used":true},{"PRN":20,"el":78,"az":348,"ss":48,"used":true},{"PRN":21,"el":40,"az":304,"ss":46,"used":true},{"PRN":26,"el":7,"az":290,"ss":34,"used":true},{"PRN":29,"el":57,"az":214,"ss":50,"used":true},{"PRN":30,"el":7,"a
 
z":50,"ss":41,"used":true},{"PRN":133,"el":38,"az":194,"ss":45,"used":false},{"PRN":135,"el":24,"az":236,"ss":44,"used":false},{"PRN":138,"el":38,"az":208,"ss":43,"used":true},{"PRN":15,"el":55,"az":170,"ss":50,"used":true},{"PRN":16,"el":7,"az":317,"ss":30,"used":true},{"PRN":18,"el":28,"az":257,"ss":43,"used":true},{"PRN":20,"el":78,"az":348,"ss":48,"used":true},{"PRN":21,"el":40,"az":304,"ss":46,"used":true},{"PRN":26,"el":7,"az":290,"ss":34,"used":true},{"PRN":29,"el":57,"az":213,"ss":50,"used":true},{"PRN":30,"el":7,"az":50,"ss":41,"used":true},{"PRN":133,"el":38,"az":194,"ss":45,"used":false},{"PRN":135,"el":24,"az":236,"ss":44,"used":false},{"PRN":138,"el":38,"az":208,"ss":43,"used":true}]}
+$GPGST,131528.00,18,,,,0.69,0.48,1.0*50
+{"class":"GST","time":"1970-01-02T12:32:08.000Z","rms":18.000,"lat":0.690,"lon":0.480,"alt":1.000}
+$GPZDA,131528.00,03,02,2016,00,00*6E
+$GPGBS,131528.00,0.7,0.5,1.0,,,,*4E
+{"class":"TPV","mode":3,"time":"2016-02-03T13:15:28.000Z","ept":0.005,"lat":41.897664000,"lon":-87.643944667,"alt":218.300,"epx":0.500,"epy":0.700,"epv":1.000,"track":0.0000,"speed":0.025,"climb":0.000,"eps":3.64}
+$GPRMC,131529.00,A,4153.85984,N,08738.63669,W,0.048,,030216,,,D*63
+$GPVTG,,T,,M,0.048,N,0.088,K,D*2A
+$GPGGA,131529.00,4153.85984,N,08738.63669,W,2,12,0.79,218.4,M,-33.8,M,,0000*64
+$GPGSA,A,3,20,29,13,15,21,05,18,02,51,26,16,30,1.34,0.79,1.08*05
+$GPGSV,4,1,15,02,11,115,35,05,34,060,48,07,00,023,,13,56,090,50*7A
+$PTNTA,20160203131546,2,T4,000000066,+099,3,0,3*16
+{"class":"OSC","running":true,"reference":true,"disciplined":true,"delta":99}
+$GPGSV,4,2,15,15,55,170,50,16,07,317,30,18,28,257,43,20,78,348,48*70
+$GPGSV,4,3,15,21,40,304,46,26,07,290,34,29,57,213,50,30,07,050,41*7F
+$GPGSV,4,4,15,46,38,194,45,48,24,236,44,51,38,208,43*46
+{"class":"SKY","xdop":0.46,"ydop":0.78,"vdop":1.08,"tdop":0.67,"hdop":0.79,"gdop":1.56,"pdop":1.34,"satellites":[{"PRN":2,"el":11,"az":115,"ss":35,"used":true},{"PRN":5,"el":34,"az":60,"ss":48,"used":true},{"PRN":7,"el":0,"az":23,"ss":0,"used":false},{"PRN":13,"el":56,"az":90,"ss":50,"used":true},{"PRN":15,"el":55,"az":170,"ss":50,"used":true},{"PRN":16,"el":7,"az":317,"ss":30,"used":true},{"PRN":18,"el":28,"az":257,"ss":43,"used":true},{"PRN":20,"el":78,"az":348,"ss":48,"used":true},{"PRN":21,"el":40,"az":304,"ss":46,"used":true},{"PRN":26,"el":7,"az":290,"ss":34,"used":true},{"PRN":29,"el":57,"az":213,"ss":50,"used":true},{"PRN":30,"el":7,"az":50,"ss":41,"used":true},{"PRN":133,"el":38,"az":194,"ss":45,"used":false},{"PRN":135,"el":24,"az":236,"ss":44,"used":false},{"PRN":138,"el":38,"az":208,"ss":43,"used":true}]}
+$GPGST,131529.00,16,,,,0.69,0.47,1.0*50
+{"class":"GST","time":"1970-01-02T12:32:09.000Z","rms":16.000,"lat":0.690,"lon":0.470,"alt":1.000}
+$GPZDA,131529.00,03,02,2016,00,00*6F
+$GPGBS,131529.00,0.7,0.5,1.0,26,,37.2,20.5*4A
+{"class":"TPV","mode":3,"time":"2016-02-03T13:15:29.000Z","ept":0.005,"lat":41.897664000,"lon":-87.643944833,"alt":218.400,"epx":0.500,"epy":0.700,"epv":1.000,"track":0.0000,"speed":0.025,"climb":0.000,"eps":3.64}
+$GPRMC,131530.00,A,4153.85984,N,08738.63670,W,0.038,,030216,,,D*64
+$GPVTG,,T,,M,0.038,N,0.070,K,D*2A
+$GPGGA,131530.00,4153.85984,N,08738.63670,W,2,12,0.73,218.5,M,-33.8,M,,0000*6F
+$GPGSA,A,3,20,29,13,15,46,21,05,18,02,51,26,16,1.25,0.73,1.02*04
+$GPGSV,4,1,15,02,11,115,35,05,34,060,48,07,00,023,,13,56,090,50*7A
+$PTNTA,20160203131547,2,T4,000000000,+092,3,0,3*1C
+{"class":"OSC","running":true,"reference":true,"disciplined":true,"delta":92}
+$GPGSV,4,2,15,15,55,170,50,16,07,317,30,18,28,257,43,20,78,348,48*70
+$GPGSV,4,3,15,21,40,304,46,26,07,290,32,29,57,213,50,30,07,050,41*79
+$GPGSV,4,4,15,46,38,194,45,48,24,236,44,51,38,208,43*46
+{"class":"SKY","xdop":0.46,"ydop":0.78,"vdop":1.02,"tdop":0.67,"hdop":0.73,"gdop":1.56,"pdop":1.25,"satellites":[{"PRN":2,"el":11,"az":115,"ss":35,"used":true},{"PRN":5,"el":34,"az":60,"ss":48,"used":true},{"PRN":7,"el":0,"az":23,"ss":0,"used":false},{"PRN":13,"el":56,"az":90,"ss":50,"used":true},{"PRN":15,"el":55,"az":170,"ss":50,"used":true},{"PRN":16,"el":7,"az":317,"ss":30,"used":true},{"PRN":18,"el":28,"az":257,"ss":43,"used":true},{"PRN":20,"el":78,"az":348,"ss":48,"used":true},{"PRN":21,"el":40,"az":304,"ss":46,"used":true},{"PRN":26,"el":7,"az":290,"ss":32,"used":true},{"PRN":29,"el":57,"az":213,"ss":50,"used":true},{"PRN":30,"el":7,"az":50,"ss":41,"used":false},{"PRN":133,"el":38,"az":194,"ss":45,"used":true},{"PRN":135,"el":24,"az":236,"ss":44,"used":false},{"PRN":138,"el":38,"az":208,"ss":43,"used":true}]}
diff --git a/test_packet.c b/test_packet.c
index 156dfe0..274d7d6 100644
--- a/test_packet.c
+++ b/test_packet.c
@@ -363,11 +363,6 @@ static int property_check(void)
                          (*dp)->type_name);
            status = EXIT_FAILURE;
        }
-       if ((*dp)->probe_detect != NULL && (*dp)->trigger != NULL) {
-           (void)fprintf(stderr, "%s both a probe and a trigger string\n",
-                         (*dp)->type_name);
-           status = EXIT_FAILURE;
-       }
 #endif /* CONTROLSEND_ENABLE && RECONFIGURE_ENABLE*/
     }
 
-- 
2.3.8




reply via email to

[Prev in Thread] Current Thread [Next in Thread]