rendered paste body#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int validateSum(char *data) {
int i = 0;
unsigned char sum = 0, cksum;
while (data[i] != '*') {
sum ^= data[i++];
}
data[i] = 0;
sscanf(&data[i + 1], "%2X", &cksum);
if (sum == cksum) {
return (1);
} else {
return (0);
}
}
// This function mangles buf
char *NMEATok(char **buf) {
char *nextTok;
nextTok = *buf;
if (**buf == ',') {
nextTok--;
*nextTok = ' ';
} else if (!**buf) {
return (NULL);
} else {
while (**buf != ',') {
if (!**buf)
return(nextTok);
(*buf)++;
}
}
**buf= 0;
(*buf)++;
return(nextTok);
}
int main () {
FILE *fp = NULL;
char c,
buffer[100];
char *data = NULL,
*tmp = NULL;
int i;
if ((fp = fopen("/dev/tts/0","r")) == NULL) {
printf("Can't open /dev/tts/0");
return (1);
}
while (1) {
fgets(buffer, 100, fp);
//if (strncmp(buffer,"$GPGGA", 6) == 0){
data=buffer + 1;
if (!validateSum(data)){
printf("Bad checksum!\n");
continue;
}
data += 6;
printf("\n ## %s", data);
i = 0;
while ((tmp = NMEATok(&data)) != NULL) {
printf("\n%d: ", i++);
if (tmp == NULL) break;
printf("%s", tmp, data);
}
//}
}
return (0);
}