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); | ||
+ | </ | ||