This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revision | |||
sdk:gps-tcp-server-gnsstogps [2020/07/21 14:27] – [tcp server proxy script] fachet | sdk:gps-tcp-server-gnsstogps [2020/07/21 14:33] (current) – [tcp server proxy script] fachet | ||
---|---|---|---|
Line 113: | Line 113: | ||
chars = explode(s); | chars = explode(s); | ||
for (i = 1; i < pos; i++) { /* skip $ and *XX */ | for (i = 1; i < pos; i++) { /* skip $ and *XX */ | ||
- | | + | c = ord(chars[i]); |
- | cs ^= c; | + | cs ^= c; |
} | } | ||
r = sprintf(" | r = sprintf(" | ||
Line 122: | Line 122: | ||
/* main() */ | /* main() */ | ||
- | if (argc < 2) { | + | if (argc < 2) |
usage(); | usage(); | ||
- | } | ||
- | |||
/* open TCP server socket */ | /* open TCP server socket */ | ||
Line 133: | Line 131: | ||
exit(-1); | exit(-1); | ||
} | } | ||
- | |||
ret = bind(server, | ret = bind(server, | ||
Line 152: | Line 149: | ||
while (!quit) { | while (!quit) { | ||
client = accept(server); | client = accept(server); | ||
- | | + | |
- | nb_syslog(" | + | nb_syslog(" |
sleep(1); | sleep(1); | ||
continue; | continue; | ||
- | } else { | + | } else { |
- | | + | nb_syslog(" |
- | | + | clients=mkarray(client); |
} | } | ||
clientConnection=true; | clientConnection=true; | ||
Line 168: | Line 165: | ||
/* process NMEA stream */ | /* process NMEA stream */ | ||
nb_syslog(" | nb_syslog(" | ||
- | while(clientConnection) { | + | while (clientConnection) { |
/* connect to gpsd */ | /* connect to gpsd */ | ||
- | if(gpsd < 0) { | + | if (gpsd < 0) { |
gpsd = gpsd_connect(gpsd); | gpsd = gpsd_connect(gpsd); | ||
- | if(gpsd < 0) { | + | if (gpsd < 0) { |
- | nb_syslog(" | + | nb_syslog(" |
- | sleep(5); | + | sleep(5); |
continue; | continue; | ||
} | } | ||
Line 182: | Line 179: | ||
rv = select(array_merge(clients, | rv = select(array_merge(clients, | ||
- | if(rv == -1) { | + | if (rv == -1) { |
nb_syslog(" | nb_syslog(" | ||
close(gpsd); | close(gpsd); | ||
gpsd = -1; | gpsd = -1; | ||
continue; | continue; | ||
- | } else if(rv == 0) { | + | } else if (rv == 0) { |
/* nothing received */ | /* nothing received */ | ||
continue; | continue; | ||
} else if(rv == server) { | } else if(rv == server) { | ||
- | | + | newclient = accept(server); |
- | if (newclient < 0) { | + | if (newclient < 0) { |
- | nb_syslog(" | + | nb_syslog(" |
- | continue; | + | continue; |
- | } else { | + | } else { |
nb_syslog(" | nb_syslog(" | ||
clients=array_merge(clients, | clients=array_merge(clients, | ||
Line 205: | Line 202: | ||
len = strlen(data); | len = strlen(data); | ||
/* Check for correct framing: CR+LF */ | /* Check for correct framing: CR+LF */ | ||
- | if(len > 2) { | + | if (len > 2) { |
- | if(strrchr(data, | + | if (strrchr(data, |
nb_syslog(" | nb_syslog(" | ||
close(gpsd); | close(gpsd); | ||
Line 215: | Line 212: | ||
} | } | ||
- | if(len == 0) { | + | if (len == 0) { |
nb_syslog(" | nb_syslog(" | ||
close(gpsd); | close(gpsd); | ||
Line 222: | Line 219: | ||
} | } | ||
/* Convert message $GN to $GP for backward compatibility */ | /* Convert message $GN to $GP for backward compatibility */ | ||
- | if(strstr(data, | + | if (strstr(data, |
a_arr = explode(data); | a_arr = explode(data); | ||
a_arr[2] = " | a_arr[2] = " | ||
Line 232: | Line 229: | ||
*/ | */ | ||
for (i=0; | for (i=0; | ||
- | | + | sent = send(clients[i], |
- | if(sent < 0 ) { | + | if (sent < 0) { |
- | nb_syslog(" | + | nb_syslog(" |
- | clients=array_compact(array_unset(clients, | + | clients=array_compact(array_unset(clients, |
- | } | + | } |
} | } | ||
} | } | ||
Line 244: | Line 241: | ||
} | } | ||
- | if (gpsd > -1) { | + | if (gpsd > -1) |
close(gpsd); | close(gpsd); | ||
- | } | + | if (server > -1) |
- | if (server > -1) { | + | |
close(server); | close(server); | ||
- | } | ||
exit(-1); | exit(-1); | ||
- | |||
</ | </ | ||
+ | |||
+ | |||
+ | |||