#include #include #include 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); }