summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Kuethe <chris.kuethe@gmail.com>2008-12-31 17:32:43 +0000
committerChris Kuethe <chris.kuethe@gmail.com>2008-12-31 17:32:43 +0000
commitcabd939bc46118b1c94487df15b26784b98f5db7 (patch)
tree1da1b0a610fc4eff227b784e10a05a23a6468d10
parentc07f5a48c2d32610746e85f04058146a08a44958 (diff)
downloadgpsd-cabd939bc46118b1c94487df15b26784b98f5db7.tar.gz
merge mkt-3301 support. from Henk Fijnvandraat
-rw-r--r--configure.ac16
-rw-r--r--drivers.c105
-rw-r--r--nmea_parse.c10
-rw-r--r--test/stable/mkt-3301.log75
-rw-r--r--test/stable/mkt-3301.log.chk71
5 files changed, 275 insertions, 2 deletions
diff --git a/configure.ac b/configure.ac
index 0f1e4547..66767d72 100644
--- a/configure.ac
+++ b/configure.ac
@@ -435,6 +435,21 @@ else
AC_MSG_RESULT([no])
fi
+dnl check for MKT-3301 support
+AC_ARG_ENABLE(mkt3301,
+ AC_HELP_STRING([--disable-mkt3301],
+ [disable MKT-3301 support]),
+ [ac_mkt3301=$enableval], [ac_mkt3301=yes])
+AC_MSG_CHECKING([for MKT-3301 support])
+if test x"$ac_mkt3301" = "xyes"; then
+ ac_nmea=yes
+ AC_MSG_RESULT([yes])
+ AC_DEFINE([MKT3301_ENABLE], 1, [MKT-3301 support])
+ AC_DEFINE([NMEA_ENABLE], 1, [MKT-3301 requires NMEA support])
+else
+ AC_MSG_RESULT([no])
+fi
+
dnl check for GPSClock support
AC_ARG_ENABLE(gpsclock,
AC_HELP_STRING([--disable-gpsclock],
@@ -761,6 +776,7 @@ echo "Tripmate : $ac_tripmate"
echo "True North : $ac_tnt"
echo "UBX : $ac_ubx"
echo "GPSclock : $ac_gpsclock"
+echo "MKT-3301 : $ac_mkt3301"
dnl Below this line are non-protocol switches
echo " Daemon Features"
echo " ---------------"
diff --git a/drivers.c b/drivers.c
index 630b0ea1..e4ecdb31 100644
--- a/drivers.c
+++ b/drivers.c
@@ -100,6 +100,7 @@ gps_mask_t nmea_parse_input(struct gps_device_t *session)
}
#endif /* GARMINTXT_ENABLE */
gpsd_report(LOG_IO, "<= GPS: %s", session->packet.outbuffer);
+
if ((st=nmea_parse((char *)session->packet.outbuffer, session))==0) {
#ifdef NON_NMEA_ENABLE
struct gps_type_t **dp;
@@ -118,7 +119,7 @@ gps_mask_t nmea_parse_input(struct gps_device_t *session)
if (trigger!=NULL && strncmp((char *)session->packet.outbuffer, trigger, strlen(trigger))==0 && isatty(session->gpsdata.gps_fd)!=0) {
gpsd_report(LOG_PROG, "found %s.\n", trigger);
(void)gpsd_switch_driver(session, (*dp)->type_name);
- return 1;
+ return DEVICEID_SET;
}
}
#endif /* NON_NMEA_ENABLE */
@@ -217,6 +218,12 @@ static void nmea_probe_subtype(struct gps_device_t *session, unsigned int seq)
ubx_write(session->gpsdata.gps_fd, 0x0a, 0x04, NULL, 0);
break;
#endif /* UBX_ENABLE */
+#ifdef MKT3301_ENABLE
+ case 8:
+ /* probe for MKT-3301 -- expect $PMTK705 */
+ (void)nmea_send(session->gpsdata.gps_fd, "$PMTK605");
+ break;
+#endif /* MKT3301_ENABLE */
default:
break;
}
@@ -887,6 +894,99 @@ static struct gps_type_t garmintxt = {
};
#endif /* GARMINTXT_ENABLE */
+#ifdef MKT3301_ENABLE
+/**************************************************************************
+ *
+ * MKT-3301
+ *
+ **************************************************************************/
+const char* mkt_reasons[4] = {"Invalid", "Unsupported", "Valid but Failed", "Valid success"};
+
+gps_mask_t processMKT3301(int c UNUSED, char *field[], struct gps_device_t *session)
+{
+ int msg, reason;
+ gps_mask_t mask;
+ mask = 1; //ONLINE_SET;
+
+ switch(msg = atoi(&(field[0])[4]))
+ {
+ case 705: /* */
+ strlcat(session->subtype,field[1],64);
+ strlcat(session->subtype,"-",64);
+ strlcat(session->subtype,field[2],64);
+ return 0; /* return a unknown sentence, which will cause the driver switch */
+ case 001: /* ACK / NACK */
+ reason = atoi(field[2]);
+ if(atoi(field[1]) == -1)
+ gpsd_report(LOG_WARN, "MKT NACK: unknown sentence\n");
+ else if(reason < 3)
+ gpsd_report(LOG_WARN, "MKT NACK: %s, reason: %s\n", field[1], mkt_reasons[reason]);
+ else
+ gpsd_report(LOG_WARN, "MKT ACK: %s\n", field[1]);
+ break;
+ default:
+ return 0; /* ignore */
+ }
+ return mask;
+}
+
+#ifdef ALLOW_RECONFIGURE
+static void mkt3301_configure(struct gps_device_t *session, unsigned int seq)
+{
+/*
+0 NMEA_SEN_GLL, GPGLL interval - Geographic Position - Latitude longitude
+1 NMEA_SEN_RMC, GPRMC interval - Recommended Minimum Specific GNSS Sentence
+2 NMEA_SEN_VTG, GPVTG interval - Course Over Ground and Ground Speed
+3 NMEA_SEN_GGA, GPGGA interval - GPS Fix Data
+4 NMEA_SEN_GSA, GPGSA interval - GNSS DOPS and Active Satellites
+5 NMEA_SEN_GSV, GPGSV interval - GNSS Satellites in View
+6 NMEA_SEN_GRS, GPGRS interval - GNSS Range Residuals
+7 NMEA_SEN_GST, GPGST interval - GNSS Pseudorange Errors Statistics
+13 NMEA_SEN_MALM, PMTKALM interval - GPS almanac information
+14 NMEA_SEN_MEPH, PMTKEPH interval - GPS ephmeris information
+15 NMEA_SEN_MDGP, PMTKDGP interval - GPS differential correction information
+16 NMEA_SEN_MDBG, PMTKDBG interval – MTK debug information
+17 NMEA_SEN_ZDA, GPZDA interval - Time & Date
+18 NMEA_SEN_MCHN, PMTKCHN interval – GPS channel status
+
+"$PMTK314,1,1,1,1,1,5,1,1,0,0,0,0,0,0,0,0,0,1,0"
+
+*/
+ if(seq == 0) {
+ (void)nmea_send(session->gpsdata.gps_fd,"$PMTK320,0"); /* power save off */
+ (void)nmea_send(session->gpsdata.gps_fd,"$PMTK300,1000,0,0,0.0,0.0"); /* Fix interval */
+ (void)nmea_send(session->gpsdata.gps_fd,"$PMTK314,0,1,0,1,1,5,1,1,0,0,0,0,0,0,0,0,0,1,0");
+ (void)nmea_send(session->gpsdata.gps_fd,"$PMTK301,2"); /* DGPS is WAAS */
+ (void)nmea_send(session->gpsdata.gps_fd,"$PMTK313,1"); /* SBAS enable */
+ }
+}
+#endif /* ALLOW_RECONFIGURE */
+
+static struct gps_type_t mkt3301 = {
+ .type_name = "MKT-3301", /* full name of type */
+ .trigger = "$PMTK705,", /* MKT-3301s send firmware release name and version */
+ .channels = 12, /* not used by this driver */
+ .probe_wakeup = NULL, /* no wakeup to be done before hunt */
+ .probe_detect = NULL, /* no probe */
+ .probe_subtype = NULL, /* to be sent unconditionally */
+#ifdef ALLOW_RECONFIGURE
+ .configurator = mkt3301_configure, /* change its sentence set */
+#endif /* ALLOW_RECONFIGURE */
+ .get_packet = generic_get, /* how to get a packet */
+ .parse_packet = nmea_parse_input, /* how to interpret a packet */
+ .rtcm_writer = pass_rtcm, /* write RTCM data straight */
+ .speed_switcher = NULL, /* no speed switcher */
+ .mode_switcher = NULL, /* no mode switcher */
+ .rate_switcher = NULL, /* no sample-rate switcher */
+ .cycle_chars = -1, /* not relevant, no rate switch */
+#ifdef ALLOW_RECONFIGURE
+ .revert = NULL, /* no setting-reversion method */
+#endif /* ALLOW_RECONFIGURE */
+ .wrapup = NULL, /* no wrapup */
+ .cycle = 1, /* updates every second */
+};
+#endif /* MKT3301_ENABLE */
+
extern struct gps_type_t garmin_usb_binary, garmin_ser_binary;
extern struct gps_type_t sirf_binary, tsip_binary;
extern struct gps_type_t evermore_binary, italk_binary;
@@ -953,6 +1053,9 @@ static struct gps_type_t *gpsd_driver_array[] = {
#ifdef GARMINTXT_ENABLE
&garmintxt,
#endif /* GARMINTXT_ENABLE */
+#ifdef MKT3301_ENABLE
+ &mkt3301,
+#endif /* MKT3301_ENABLE */
NULL,
};
/*@ +nullassign @*/
diff --git a/nmea_parse.c b/nmea_parse.c
index 40d0d9b1..f4d3ec44 100644
--- a/nmea_parse.c
+++ b/nmea_parse.c
@@ -13,6 +13,10 @@
#include "gpsd.h"
#include "timebase.h"
+#ifdef MKT3301_ENABLE
+extern gps_mask_t processMKT3301(int c UNUSED, char *field[], struct gps_device_t *session);
+#endif /* MKT3301_ENABLE */
+
#ifdef NMEA_ENABLE
/**************************************************************************
*
@@ -705,7 +709,7 @@ gps_mask_t nmea_parse(char *sentence, struct gps_device_t *session)
#endif /* TNT_ENABLE */
#ifdef ASHTECH_ENABLE
{"PASHR", 3, processPASHR}, /* general handler for Ashtech */
-#endif /* TNT_ENABLE */
+#endif /* ASHTECH_ENABLE */
};
volatile unsigned char buf[NMEA_MAX+1];
@@ -790,6 +794,10 @@ gps_mask_t nmea_parse(char *sentence, struct gps_device_t *session)
break;
}
}
+#ifdef MKT3301_ENABLE
+ if (strncmp("PMTK", field[0], 4) == 0) /* general handler for MKT3301 vendor specifics */
+ retval = processMKT3301(count, field, session);
+#endif /* MKT3301_ENABLE */
/*@ +usedef @*/
return retval;
}
diff --git a/test/stable/mkt-3301.log b/test/stable/mkt-3301.log
new file mode 100644
index 00000000..b4fa873c
--- /dev/null
+++ b/test/stable/mkt-3301.log
@@ -0,0 +1,75 @@
+# Name: San Jose Navigation FV-M11
+# Chipset: MKT-3301
+# Cycle-time: 1-second
+# Start-of-cycle: $GPGGA
+# Submitted-by: "Henk Fijnvandraat"
+# Date: 23 August 2008
+# Location: Enschede, NL, 52.21N 6.88E
+#
+# NMEA version V3.01
+#
+# Dump made with FTDI TTL-232R-3V3 connected to module serial port
+# Log created with Kermit logging from /dev/ttyUSB0 at 4800 baud
+# Log shows entire power up to first fix sequence
+#
+# power up
+#
+$PMTK010,001*2E
+$POLYN,TIME,RESTART_OCCURRED
+$POLYN,EPH,0,00000000
+$POLYN,ALM,0,00000000
+$GPGGA,235946.005,8960.000000,N,00000.000000,E,0,0,,137.000,M,13.000,M,,*49
+$GPRMC,235946.005,V,8960.000000,N,00000.000000,E,0.000,0.00,050180,,,N*47
+$PMTKCHN,14001,29001,23001,02001,21001,11001,16001,28001,05001,20001,22001,18001,06001,19001,07001,09001,25001,08001,13001,30001,10001,03001,04001,27001,26001,01001,24001,15001,31001,17001,12001,32001*46
+$GPVTG,0.00,T,,M,0.000,N,0.000,K,N*32
+$GPGGA,235947.004,8960.000000,N,00000.000000,E,0,0,,137.000,M,13.000,M,,*49
+$GPRMC,235947.004,V,8960.000000,N,00000.000000,E,0.000,0.00,050180,,,N*47
+$PMTKCHN,21312,02001,14001,29001,23001,16001,05001,20001,22001,18001,06001,19001,28031,11282,07001,09001,25001,08001,13001,30001,10001,03001,04001,27001,26001,01001,24001,15001,31001,17001,12001,32001*4D
+$GPVTG,0.00,T,,M,0.000,N,0.000,K,N*32
+$GPGGA,235948.004,8960.000000,N,00000.000000,E,0,0,,137.000,M,13.000,M,,*46
+$GPRMC,235948.004,V,8960.000000,N,00000.000000,E,0.000,0.00,050180,,,N*48
+$PMTKCHN,21412,28492,22001,14001,29001,23001,02001,11001,16001,05001,20001,06031,19001,18031,07001,09001,25001,08001,13001,30001,10001,03001,04001,27001,26001,01001,24001,15001,31001,17001,12001,32001*4E
+$GPVTG,0.00,T,,M,0.000,N,0.000,K,N*32
+$GPGGA,235949.004,8960.000000,N,00000.000000,E,0,0,,137.000,M,13.000,M,,*47
+$GPRMC,235949.004,V,8960.000000,N,00000.000000,E,0.000,0.00,050180,,,N*49
+$PMTKCHN,21422,28502,22242,09282,07432,14001,29001,23001,02001,11001,16001,13031,25031,08031,05001,20001,18001,06001,19001,30001,10001,03001,04001,27001,26001,01001,24001,15001,31001,17001,12001,32001*4E
+$GPVTG,0.00,T,,M,0.000,N,0.000,K,N*32
+$GPGGA,235950.004,8960.000000,N,00000.000000,E,0,0,,137.000,M,13.000,M,,*4F
+$GPGSA,A,1,,,,,,,,,,,,,,,*1E
+$GPGSV,2,1,06,21,,,40,28,,,47,25,,,43,07,,,40*71
+$GPGSV,2,2,06,08,,,49,10,,,41*7E
+$GPRMC,235950.004,V,8960.000000,N,00000.000000,E,0.000,0.00,050180,,,N*41
+$PMTKCHN,21402,28472,14001,25432,07402,08492,29001,10412,23001,02001,11001,03031,04031,27031,16001,05001,20001,22001,18001,06001,19001,09001,13001,30001,26001,01001,24001,15001,31001,17001,12001,32001*49
+$GPVTG,0.00,T,,M,0.000,N,0.000,K,N*32
+$GPGGA,081433.591,8960.000000,N,00000.000000,E,0,0,,137.000,M,13.000,M,,*43
+$GPGSA,A,1,,,,,,,,,,,,,,,*1E
+$GPGSV,3,1,12,21,,,42,28,,,52,26,,,48,25,,,45*7E
+$GPGSV,3,2,12,07,,,44,08,,,50,27,,,48,10,,,44*79
+$GPGSV,3,3,12,15,,,45,03,,,38,19,,,39,05,,,25*77
+$GPRMC,081433.591,V,8960.000000,N,00000.000000,E,0.000,0.00,120180,,,N*4B
+$PMTKCHN,21422,28522,26482,25452,07442,08502,27482,10442,15452,03382,19392,05252,16342,22031,14001,29001,23001,02001,11001,20001,18001,06001,09001,13001,30001,04001,01001,24001,31001,17001,12001,32001*43
+$GPVTG,0.00,T,,M,0.000,N,0.000,K,N*32
+$GPGGA,081434.590,5212.978993,N,00653.097906,E,0,3,,102.907,M,47.093,M,,*42
+$GPRMC,081434.590,V,5212.978993,N,00653.097906,E,0.052,0.00,230808,,,N*46
+$PMTKCHN,21422,28522,26482,25452,07442,08502,27482,10442,15452,03392,19392,18031,06031,22252,14001,29001,23001,02001,11001,16001,05001,20001,09001,13001,30001,04001,01001,24001,31001,17001,12001,32001*45
+$GPVTG,0.00,T,,M,0.052,N,0.097,K,N*3B
+$GPGGA,081436.000,5212.982135,N,00653.101394,E,1,3,2.88,102.907,M,47.093,M,,*5F
+$GPRMC,081436.000,A,5212.982135,N,00653.101394,E,0.039,0.00,230808,,,A*53
+$PMTKCHN,21422,28522,26482,25452,07442,08502,27482,10442,15452,03392,19392,13031,06031,09272,14001,29001,23001,02001,11001,16001,05001,20001,22001,18001,30001,04001,01001,24001,31001,17001,12001,32001*47
+$GPVTG,0.00,T,,M,0.039,N,0.072,K,A*32
+$GPGGA,081437.000,5212.981473,N,00653.102458,E,1,3,2.88,102.907,M,47.093,M,,*5E
+$GPRMC,081437.000,A,5212.981473,N,00653.102458,E,0.039,0.00,230808,,,A*52
+$PMTKCHN,21422,28522,26482,25452,07442,08502,27482,10442,15452,03392,19392,13031,29031,14031,23001,02001,11001,16001,05001,20001,22001,18001,06001,09001,30001,04001,01001,24001,31001,17001,12001,32001*42
+$GPVTG,0.00,T,,M,0.039,N,0.073,K,A*33
+$GPGGA,081438.000,5212.982641,N,00653.105897,E,1,3,2.88,102.912,M,47.093,M,,*5D
+$GPRMC,081438.000,A,5212.982641,N,00653.105897,E,0.042,0.00,230808,,,A*59
+$PMTKCHN,21422,28522,26482,25452,07442,08502,27482,10442,15452,03392,19392,13342,29031,14342,23001,02001,11001,16001,05001,20001,22001,18001,06001,09001,30001,04001,01001,24001,31001,17001,12001,32001*42
+$GPVTG,0.00,T,,M,0.042,N,0.079,K,A*35
+$GPGGA,081439.000,5212.981832,N,00653.104686,E,1,3,2.88,102.930,M,47.093,M,,*5A
+$GPGSA,A,2,21,28,08,,,,,,,,,,3.05,2.88,1.00*07
+$GPGSV,3,1,11,08,63,065,50,28,42,144,52,21,13,320,42,26,,,48*44
+$GPGSV,3,2,11,25,,,45,07,,,44,27,,,48,10,,,44*71
+$GPGSV,3,3,11,15,,,45,03,,,39,19,,,39*77
+$GPRMC,081439.000,A,5212.981832,N,00653.104686,E,0.205,0.00,230808,,,A*5F
+$PMTKCHN,21422,28522,26482,25452,07442,08502,27482,10442,15452,03392,19392,02031,29342,23031,14001,11001,16001,05001,20001,22001,18001,06001,09001,13001,30001,04001,01001,24001,31001,17001,12001,32001*45
+$GPVTG,0.00,T,,M,0.205,N,0.379,K,A*37
diff --git a/test/stable/mkt-3301.log.chk b/test/stable/mkt-3301.log.chk
new file mode 100644
index 00000000..c15dbefa
--- /dev/null
+++ b/test/stable/mkt-3301.log.chk
@@ -0,0 +1,71 @@
+GPSD,W=1,R=1
+$PMTK010,001*2E
+$POLYN,TIME,RESTART_OCCURRED
+$POLYN,EPH,0,00000000
+$POLYN,ALM,0,00000000
+$GPGGA,235946.005,8960.000000,N,00000.000000,E,0,0,,137.000,M,13.000,M,,*49
+$GPRMC,235946.005,V,8960.000000,N,00000.000000,E,0.000,0.00,050180,,,N*47
+$PMTKCHN,14001,29001,23001,02001,21001,11001,16001,28001,05001,20001,22001,18001,06001,19001,07001,09001,25001,08001,13001,30001,10001,03001,04001,27001,26001,01001,24001,15001,31001,17001,12001,32001*46
+$GPVTG,0.00,T,,M,0.000,N,0.000,K,N*32
+$GPGGA,235947.004,8960.000000,N,00000.000000,E,0,0,,137.000,M,13.000,M,,*49
+$GPRMC,235947.004,V,8960.000000,N,00000.000000,E,0.000,0.00,050180,,,N*47
+$PMTKCHN,21312,02001,14001,29001,23001,16001,05001,20001,22001,18001,06001,19001,28031,11282,07001,09001,25001,08001,13001,30001,10001,03001,04001,27001,26001,01001,24001,15001,31001,17001,12001,32001*4D
+$GPVTG,0.00,T,,M,0.000,N,0.000,K,N*32
+$GPGGA,235948.004,8960.000000,N,00000.000000,E,0,0,,137.000,M,13.000,M,,*46
+$GPRMC,235948.004,V,8960.000000,N,00000.000000,E,0.000,0.00,050180,,,N*48
+$PMTKCHN,21412,28492,22001,14001,29001,23001,02001,11001,16001,05001,20001,06031,19001,18031,07001,09001,25001,08001,13001,30001,10001,03001,04001,27001,26001,01001,24001,15001,31001,17001,12001,32001*4E
+$GPVTG,0.00,T,,M,0.000,N,0.000,K,N*32
+$GPGGA,235949.004,8960.000000,N,00000.000000,E,0,0,,137.000,M,13.000,M,,*47
+$GPRMC,235949.004,V,8960.000000,N,00000.000000,E,0.000,0.00,050180,,,N*49
+$PMTKCHN,21422,28502,22242,09282,07432,14001,29001,23001,02001,11001,16001,13031,25031,08031,05001,20001,18001,06001,19001,30001,10001,03001,04001,27001,26001,01001,24001,15001,31001,17001,12001,32001*4E
+$GPVTG,0.00,T,,M,0.000,N,0.000,K,N*32
+$GPGGA,235950.004,8960.000000,N,00000.000000,E,0,0,,137.000,M,13.000,M,,*4F
+$GPGSA,A,1,,,,,,,,,,,,,,,*1E
+GPSD,O=?
+$GPGSV,2,1,06,21,,,40,28,,,47,25,,,43,07,,,40*71
+$GPGSV,2,2,06,08,,,49,10,,,41*7E
+$GPRMC,235950.004,V,8960.000000,N,00000.000000,E,0.000,0.00,050180,,,N*41
+$PMTKCHN,21402,28472,14001,25432,07402,08492,29001,10412,23001,02001,11001,03031,04031,27031,16001,05001,20001,22001,18001,06001,19001,09001,13001,30001,26001,01001,24001,15001,31001,17001,12001,32001*49
+$GPVTG,0.00,T,,M,0.000,N,0.000,K,N*32
+$GPGGA,081433.591,8960.000000,N,00000.000000,E,0,0,,137.000,M,13.000,M,,*43
+$GPGSA,A,1,,,,,,,,,,,,,,,*1E
+GPSD,O=?
+$GPGSV,3,1,12,21,,,42,28,,,52,26,,,48,25,,,45*7E
+$GPGSV,3,2,12,07,,,44,08,,,50,27,,,48,10,,,44*79
+$GPGSV,3,3,12,15,,,45,03,,,38,19,,,39,05,,,25*77
+$GPRMC,081433.591,V,8960.000000,N,00000.000000,E,0.000,0.00,120180,,,N*4B
+$PMTKCHN,21422,28522,26482,25452,07442,08502,27482,10442,15452,03382,19392,05252,16342,22031,14001,29001,23001,02001,11001,20001,18001,06001,09001,13001,30001,04001,01001,24001,31001,17001,12001,32001*43
+$GPVTG,0.00,T,,M,0.000,N,0.000,K,N*32
+$GPGGA,081434.590,5212.978993,N,00653.097906,E,0,3,,102.907,M,47.093,M,,*42
+$GPRMC,081434.590,V,5212.978993,N,00653.097906,E,0.052,0.00,230808,,,N*46
+$PMTKCHN,21422,28522,26482,25452,07442,08502,27482,10442,15452,03392,19392,18031,06031,22252,14001,29001,23001,02001,11001,16001,05001,20001,09001,13001,30001,04001,01001,24001,31001,17001,12001,32001*45
+$GPVTG,0.00,T,,M,0.052,N,0.097,K,N*3B
+$GPGGA,081436.000,5212.982135,N,00653.101394,E,1,3,2.88,102.907,M,47.093,M,,*5F
+GPSD,O=GGA ? 0.005 52.216369 6.885023 102.91 0.00 0.00 ? ? 0.000 ? ? ? 3
+$GPRMC,081436.000,A,5212.982135,N,00653.101394,E,0.039,0.00,230808,,,A*53
+GPSD,O=RMC 1219479276.000 0.005 52.216369 6.885023 ? 0.00 ? 0.0000 0.020 ? ? ? ? 2
+$PMTKCHN,21422,28522,26482,25452,07442,08502,27482,10442,15452,03392,19392,13031,06031,09272,14001,29001,23001,02001,11001,16001,05001,20001,22001,18001,30001,04001,01001,24001,31001,17001,12001,32001*47
+$GPVTG,0.00,T,,M,0.039,N,0.072,K,A*32
+$GPGGA,081437.000,5212.981473,N,00653.102458,E,1,3,2.88,102.907,M,47.093,M,,*5E
+GPSD,O=GGA 1219479277.000 0.005 52.216358 6.885041 102.91 0.00 0.00 ? ? 0.000 0.0000 0.00 ? 3
+$GPRMC,081437.000,A,5212.981473,N,00653.102458,E,0.039,0.00,230808,,,A*52
+GPSD,O=RMC 1219479277.000 0.005 52.216358 6.885041 102.91 0.00 0.00 0.0000 0.020 0.000 0.0000 0.00 ? 3
+$PMTKCHN,21422,28522,26482,25452,07442,08502,27482,10442,15452,03392,19392,13031,29031,14031,23001,02001,11001,16001,05001,20001,22001,18001,06001,09001,30001,04001,01001,24001,31001,17001,12001,32001*42
+$GPVTG,0.00,T,,M,0.039,N,0.073,K,A*33
+$GPGGA,081438.000,5212.982641,N,00653.105897,E,1,3,2.88,102.912,M,47.093,M,,*5D
+GPSD,O=GGA 1219479278.000 0.005 52.216377 6.885098 102.91 0.00 0.00 ? ? 0.000 0.0000 0.00 ? 3
+$GPRMC,081438.000,A,5212.982641,N,00653.105897,E,0.042,0.00,230808,,,A*59
+GPSD,O=RMC 1219479278.000 0.005 52.216377 6.885098 102.91 0.00 0.00 0.0000 0.022 0.000 0.0000 0.00 ? 3
+$PMTKCHN,21422,28522,26482,25452,07442,08502,27482,10442,15452,03392,19392,13342,29031,14342,23001,02001,11001,16001,05001,20001,22001,18001,06001,09001,30001,04001,01001,24001,31001,17001,12001,32001*42
+$GPVTG,0.00,T,,M,0.042,N,0.079,K,A*35
+$GPGGA,081439.000,5212.981832,N,00653.104686,E,1,3,2.88,102.930,M,47.093,M,,*5A
+GPSD,O=GGA 1219479279.000 0.005 52.216364 6.885078 102.93 0.00 0.00 ? ? 0.000 0.0000 0.00 ? 3
+$GPGSA,A,2,21,28,08,,,,,,,,,,3.05,2.88,1.00*07
+$GPGSV,3,1,11,08,63,065,50,28,42,144,52,21,13,320,42,26,,,48*44
+$GPGSV,3,2,11,25,,,45,07,,,44,27,,,48,10,,,44*71
+$GPGSV,3,3,11,15,,,45,03,,,39,19,,,39*77
+GPSD,Y=GSV 1219479279.000 11:8 63 65 50 1:28 42 144 52 1:21 13 320 42 1:26 0 0 48 0:25 0 0 45 0:7 0 0 44 0:27 0 0 48 0:10 0 0 44 0:15 0 0 45 0:3 0 0 39 0:19 0 0 39 0:
+$GPRMC,081439.000,A,5212.981832,N,00653.104686,E,0.205,0.00,230808,,,A*5F
+GPSD,O=RMC 1219479279.000 0.005 52.216364 6.885078 102.93 0.00 0.00 0.0000 0.105 0.000 0.0000 0.00 ? 3
+$PMTKCHN,21422,28522,26482,25452,07442,08502,27482,10442,15452,03392,19392,02031,29342,23031,14001,11001,16001,05001,20001,22001,18001,06001,09001,13001,30001,04001,01001,24001,31001,17001,12001,32001*45
+$GPVTG,0.00,T,,M,0.205,N,0.379,K,A*37