Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
sdk:gps-udp-client-gnsstogps [2019/07/09 13:49] fachetsdk:gps-udp-client-gnsstogps [2021/10/08 10:22] (current) – [SDK Script gps-udp-client-GNSStoGPS.are] dodenhoeft
Line 1: Line 1:
 +====== Background ======
 +GPS was the first Global Navigation Satellite System (GNSS) and the term GPS is often used as a synonym for GNSS.
 +
 +Older software often only checks for NMEA 0183 sentences starting with <nowiki>"$GP"</nowiki> (= GPS only) instead of looking for  all GNSS systems.
 +
 +Newer GNSS receivers often use multiple GNSS systems and therefore <nowiki>"$GN"</nowiki> is used (<nowiki>"$GNRMC..."</nowiki>) if it recives a combination of GPS, Galileo and GLONASS signals.
 +
 +It would be better to us instead of <nowiki>"$GPRMC"</nowiki> either <nowiki>"$G.RMC"</nowiki> ("." = anychar) for using GPS, Galileo and/or GLONASS (GNSS) or even <nowiki>"$..RMC"</nowiki> which means any source.
 +
 +<code>
 +NMEA 0183 sentence "$XXYYY..." explanation:
 +
 +"$" = Start 
 +"XX" = Source device (https://de.wikipedia.org/wiki/NMEA_0183#Ger%C3%A4te-IDs)
 + BD = Beidu
 + GA = Galileo
 + GL = GLONASS
 + GP = GPS
 + GN = GNSS position fix from more than one constellation (eg. GPS + GLONASS)
 +"YYY" = Record
 + RMC = Recommended Minimum Sentence C (used in most cases)
 + GGA = Global Positioning System Fix Data
 + GNS = GNSS fixed data
 + GLL = Geographic Position - Latitude/Longitude
 + ...
 +
 +Source: https://de.wikipedia.org/wiki/NMEA_0183
 +</code>
 +
 ====== SDK Script gps-udp-client-GNSStoGPS.are ====== ====== SDK Script gps-udp-client-GNSStoGPS.are ======
 <code c gps-udp-client-gnsstogps.are> <code c gps-udp-client-gnsstogps.are>
Line 23: Line 52:
  
  nb_config_set("gpsd.0.status=0");  nb_config_set("gpsd.0.status=0");
- sleep(3);+                do { 
 +                                sleep(3); 
 +                } while ( nb_config_done() != 0) 
 +     
  nb_config_set("gpsd.0.status=1");  nb_config_set("gpsd.0.status=1");
- sleep(5); +                do { 
 +                 sleep(5); 
 +                } while ( nb_config_done() != 0)
  return 0;  return 0;
 } }
- 
 int gpsd_connect () int gpsd_connect ()
 { {
Line 39: Line 71:
  exit(-1);  exit(-1);
  }  }
- for (attempt = 0; attempt <= 5; attempt++) { + for (attempt = 0; attempt <= 15; attempt++) { 
- sleep(3);+ sleep(15);
  
  if (connect(gpsd, local_ip, local_port) < 0) {  if (connect(gpsd, local_ip, local_port) < 0) {
  nb_syslog("Could not connect to daemon");  nb_syslog("Could not connect to daemon");
- if (attempt == 3) {+ if (attempt == 12) {
  nb_syslog("Unable to connect, restarting daemon");  nb_syslog("Unable to connect, restarting daemon");
  gpsd_restart();  gpsd_restart();
Line 70: Line 102:
  chars = explode(s);  chars = explode(s);
         for (i = 1; i < pos; i++) { /* skip $ and *XX */          for (i = 1; i < pos; i++) { /* skip $ and *XX */ 
-     printf(" %s ", chars[i]); +     c = ord(chars[i]);
-            c = ord(chars[i]);+
             cs ^= c;             cs ^= c;
         }         }
Line 144: Line 175:
  a_arr = explode(data);  a_arr = explode(data);
  a_arr[2] = "P";  a_arr[2] = "P";
- data = implode(a_arr);+ data = checksum(implode(a_arr));
  }  }
  /* skip all messages different from GPGGA   /* skip all messages different from GPGGA