This shows you the differences between two versions of the page.
| — | sdk:gps-udp-broadcast [2017/10/11 16:34] (current) – created fachet | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== 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) 2017 NetModule AG, Switzerland | ||
| + | */ | ||
| + | BroadcastIP = " | ||
| + | |||
| + | // Connect to GPS Deamon | ||
| + | int connect_gpsd() { | ||
| + | nb_syslog(" | ||
| + | sock = -1; | ||
| + | while(true) | ||
| + | { | ||
| + | sock = socket(AF_INET, | ||
| + | if (sock < 0) | ||
| + | { | ||
| + | nb_syslog(" | ||
| + | sleep(5); | ||
| + | continue; | ||
| + | } | ||
| + | |||
| + | if (connect(sock, | ||
| + | { | ||
| + | nb_syslog(" | ||
| + | close(sock); | ||
| + | sleep(5); | ||
| + | continue; | ||
| + | } | ||
| + | nb_syslog(" | ||
| + | return(sock); | ||
| + | break; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | |||
| + | |||
| + | gpsd = connect_gpsd(); | ||
| + | |||
| + | /* open UDP server socket */ | ||
| + | server = socket(AF_INET, | ||
| + | if (server < 0) { | ||
| + |  | ||
| + |  | ||
| + |  | ||
| + | } | ||
| + | setsockopt(server, | ||
| + | |||
| + | nb_syslog(" | ||
| + | // process NMEA stream | ||
| + | |||
| + | nb_syslog(" | ||
| + | |||
| + | while (true) { | ||
| + | /* wait for socket data */ | ||
| + | rv = select(gpsd, | ||
| + | if (rv > 0) { | ||
| + | data = recv(gpsd); | ||
| + | len = strlen(data); | ||
| + | } else if (rv < 0) { | ||
| + | nb_syslog(" | ||
| + | len = -1; | ||
| + | } else { // nothing received | ||
| + | continue; | ||
| + |  | ||
| + | if (len <= 0) { | ||
| + | nb_syslog(" | ||
| + | close(gpsd); | ||
| + | gpsd = connect_gpsd(); | ||
| + | if (gpsd < 0) | ||
| + |  | ||
| + | } else { | ||
| + | // printf(" | ||
| + | while(true) | ||
| + | { | ||
| + | newlinepos = strstr(data, | ||
| + | seplen = 0; | ||
| + | if (newlinepos != ()) { | ||
| + |  | ||
| + | } else { | ||
| + |  | ||
| + | if (newlinepos != ()) { | ||
| + | seplen = 1; | ||
| + | } | ||
| + | } | ||
| + |  | ||
| + | if (seplen != 0) { | ||
| + | frame = strcat(left(data, | ||
| + | // printf(" | ||
| + | if (left(frame, | ||
| + | sendto(server, | ||
| + | sendto(server, | ||
| + | sendto(server, | ||
| + | } | ||
| + | if (left(frame, | ||
| + | sendto(server, | ||
| + | } | ||
| + | if (left(frame, | ||
| + | sendto(server, | ||
| + |  | ||
| + | data = substr(data, | ||
| + | } | ||
| + | else | ||
| + |  | ||
| + |  | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | exit(-3); | ||
| + | </ | ||