nmea 4.1

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

nmea 4.1

Otto Moerbeek
Hi,

NMEA 4.1 appends an extra field to the RMC message. We're not
interested in it's value, but we do want to accept the new format.

Tested to work on a nav module enabled for Galileo info (which
requires NMEA 4.1).

OK?

        -Otto

Index: tty_nmea.c
===================================================================
RCS file: /cvs/src/sys/kern/tty_nmea.c,v
retrieving revision 1.48
diff -u -p -r1.48 tty_nmea.c
--- tty_nmea.c 26 Jan 2019 22:51:13 -0000 1.48
+++ tty_nmea.c 15 Aug 2019 11:27:22 -0000
@@ -336,7 +336,7 @@ nmea_gprmc(struct nmea *np, struct tty *
  int64_t date_nano, time_nano, nmea_now;
  int jumped = 0;
 
- if (fldcnt != 12 && fldcnt != 13) {
+ if (fldcnt < 12 || fldcnt > 14) {
  DPRINTF(("gprmc: field count mismatch, %d\n", fldcnt));
  return;
  }
@@ -373,9 +373,9 @@ nmea_gprmc(struct nmea *np, struct tty *
  np->time.tv.tv_sec = np->ts.tv_sec;
  np->time.tv.tv_usec = np->ts.tv_nsec / 1000L;
 
- if (fldcnt != 13)
+ if (fldcnt < 13)
  strlcpy(np->time.desc, "GPS", sizeof(np->time.desc));
- else if (fldcnt == 13 && *fld[12] != np->mode) {
+ else if (*fld[12] != np->mode) {
  np->mode = *fld[12];
  switch (np->mode) {
  case 'S':

Reply | Threaded
Open this post in threaded view
|

Re: nmea 4.1

Mark Kettenis
> Date: Thu, 15 Aug 2019 13:32:37 +0200
> From: Otto Moerbeek <[hidden email]>
>
> Hi,
>
> NMEA 4.1 appends an extra field to the RMC message. We're not
> interested in it's value, but we do want to accept the new format.
>
> Tested to work on a nav module enabled for Galileo info (which
> requires NMEA 4.1).
>
> OK?

ok kettenis@

> Index: tty_nmea.c
> ===================================================================
> RCS file: /cvs/src/sys/kern/tty_nmea.c,v
> retrieving revision 1.48
> diff -u -p -r1.48 tty_nmea.c
> --- tty_nmea.c 26 Jan 2019 22:51:13 -0000 1.48
> +++ tty_nmea.c 15 Aug 2019 11:27:22 -0000
> @@ -336,7 +336,7 @@ nmea_gprmc(struct nmea *np, struct tty *
>   int64_t date_nano, time_nano, nmea_now;
>   int jumped = 0;
>  
> - if (fldcnt != 12 && fldcnt != 13) {
> + if (fldcnt < 12 || fldcnt > 14) {
>   DPRINTF(("gprmc: field count mismatch, %d\n", fldcnt));
>   return;
>   }
> @@ -373,9 +373,9 @@ nmea_gprmc(struct nmea *np, struct tty *
>   np->time.tv.tv_sec = np->ts.tv_sec;
>   np->time.tv.tv_usec = np->ts.tv_nsec / 1000L;
>  
> - if (fldcnt != 13)
> + if (fldcnt < 13)
>   strlcpy(np->time.desc, "GPS", sizeof(np->time.desc));
> - else if (fldcnt == 13 && *fld[12] != np->mode) {
> + else if (*fld[12] != np->mode) {
>   np->mode = *fld[12];
>   switch (np->mode) {
>   case 'S':
>
>