Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
sdk:scripts:gps-udp-client [2017/10/11 15:48]
fachet
sdk:scripts:gps-udp-client [2019/07/08 12:47]
fachet
Line 1: Line 1:
 +
 ====== SDK Script gps-udp-client.are ====== ====== SDK Script gps-udp-client.are ======
 <code c gps-udp-client.are>​ <code c gps-udp-client.are>​
Line 85: Line 86:
         }         }
     } else {     } else {
 +      ​
 +       /* Convert message $GN to $GP */
 +       /* if (strstr(data,"​$GNGGA"​)==0) {
 +        *  a_arr = explode(data);​
 +        *  a_arr[2]="​P";​
 +        *  data = implode(a_arr);​
 +        * }
 + */
 +       /* skip all messages different from GPGGA */
 +       /* if (strstr(data,"​$GPGGA"​)==())
 +        *  continue;
 +        */          ​
         sent = sendto(server,​ data, SERVER, PORT);         sent = sendto(server,​ data, SERVER, PORT);
         if (sent != len) {         if (sent != len) {
Line 99: Line 112:
 </​code>​ </​code>​
  
-====== SDK Script gps-udp-broadcast.are ====== 
-<code c gps-udp-broadcast.are>​ 
-/* DESC: This script sends the local GPS NMEA via UDP broadcast to multiple ports  
- * selected by NMEA type. 
- * Copyright (C) 2013-2017 NetModule AG, Switzerland 
- */ 
- 
-BroadcastIP = "​172.21.132.255";​ 
- 
-// Connect to GPS Deamon 
-int connect_gpsd() { 
-    nb_syslog("​Connecting to GPS daemon."​);​ 
-    sock = -1; 
-    while(true) 
-    { 
-        sock = socket(AF_INET,​ SOCK_STREAM,​ IPPROTO_TCP);​ 
-        if (sock < 0) 
-        { 
-            nb_syslog("​Unable to open TCP socket. Retrying in 5 seconds\n"​);​ 
-            sleep(5); 
-            continue; 
-        } 
- 
-        if (connect(sock,​ "​127.0.0.1",​ 2947) < 0) 
-        { 
-            nb_syslog("​Could not connect to GPS daemon. Retrying in 5 seconds\n"​);​ 
-            close(sock);​ 
-            sleep(5); 
-            continue; 
-        } 
-        nb_syslog("​GPS daemon connected."​);​ 
-        return(sock);​ 
-        break; 
-    } 
-} 
- 
-      
- 
-gpsd = connect_gpsd();​ 
- 
-/* open UDP server socket */ 
-server = socket(AF_INET,​ SOCK_DGRAM, IPPROTO_UDP);​ 
-if (server < 0) { 
-   ​nb_syslog("​Unable to open server socket."​);​ 
-   ​close(gpsd);​ 
-   ​exit(-1);​ 
-} 
-setsockopt(server,​ SOL_SOCKET, SO_BROADCAST,​ 1); 
- 
-nb_syslog("​GPS Broadcast to %s", BroadcastIP);​ 
-// process NMEA stream ​ 
-    
-nb_syslog("​Processing NMEA data"​);​ 
-  
-while (true) { 
-   rv = select(gpsd,​ 3);    // wait for socket data 
-   if (rv > 0) { 
-      data = recv(gpsd); 
-      len = strlen(data);​ 
-   } else if (rv < 0) { 
-      nb_syslog("​select failed"​);​ 
-      len = -1; 
-   } else { // nothing received 
-      continue; 
-   ​} ​ 
-   if (len <= 0) { 
-      nb_syslog("​Receive failed, re-connecting to GPS daemon"​);​ 
-      close(gpsd);​ 
-      gpsd = connect_gpsd();​ 
-      if (gpsd < 0) 
-         ​exit(-2);​ 
-   } else { 
-      // printf("​got >>>​%s<<<​\n",​ data); 
-      while(true) ​  //​handle CR LF problems and separate data into singel $Gxxx frames 
-         { 
-            newlinepos = strstr(data,​ "​\r\n"​);​ 
-            seplen = 0; 
-            if (newlinepos != ()) { 
-               ​seplen = 2; 
-            } else { 
-               ​newlinepos = strstr(data,​ "​\n"​);​ 
-               if (newlinepos != ()) { 
-                  seplen = 1; 
-               } 
-            } 
-            ​ 
-            if (seplen != 0) {            { 
-               frame = strcat(left(data,​ newlinepos),​ "​\r\n"​);​ 
-               // printf("​frame >>>​%s<<<​\n",​ frame); 
-               if (left(frame,​ 6) == "​$GPRMC"​) { 
-                  //​printf("​send $GPRMC\n"​);​ 
-                  if (sendto(server,​ frame, BroadcastIP,​ 5125) != len) 
-                     ​nb_syslog("​Unable to broadcast message $GPRMC to port 5125"​);​ 
-                  if (sendto(server,​ frame, BroadcastIP,​ 5126) != len) 
-                     ​nb_syslog("​Unable to broadcast message $GPRMC to port 5126"​);​ 
-                  if (sendto(server,​ frame, BroadcastIP,​ 6060) != len) 
-                     ​nb_syslog("​Unable to broadcast message $GPRMC to port 6060"​);​ 
-               } 
-               if (left(frame,​ 6) == "​$GPGGA"​) { 
-                  //​printf("​send $GPGGA\n"​);​ 
-                  if (sendto(server,​ frame, BroadcastIP,​ 5126) != len) 
-                     ​nb_syslog("​Unable to broadcast message $GPGGA to port 5126"​);​ 
-               } 
-               if (left(frame,​ 6) == "​$GPGSA"​) { 
-                  //​printf("​send $GPGSA\n"​);​ 
-                  if (sendto(server,​ frame, BroadcastIP,​ 5126) != len) 
-                     ​nb_syslog("​Unable to broadcast message $GPGGA to port 5126"​);​ 
-               ​} ​     ​ 
-               data = substr(data,​ newlinepos + seplen); 
-            } 
-            else 
-               ​break;​ 
-            ​ 
-        }    
-   } 
-} 
-exit(-3); 
- 
-</​code>​