#include #include #include #include "nmea.h" int nmea_check_sentence(char *s) { char *c; int c1 = 0, c2 = 0; int err = 0; c = s; if ( *c++ != '$' ) { err = 1; } else { for (; *c && *c != '*'; c++) { c1 ^= *c; } if ( *c && *(c+1) && *(c+2) ) { c2 = (*++c - '0') * 16; c2 += (*++c - '0'); if ( *++c || c1 != c2 ) err = 1; } else { err = 1; } } return err; } double nmea_to_double(char *n) { double t1, t2; t1 = atof(n); t2 = floor(t1 / 100); t2 += (t1 - t2*100)/60; return t2; } char *latitude_to_nmea(char *b, double latitude) { int whole_lat; double lat_min; char d; if (b == NULL) b = (char *) malloc (16); if (latitude > 0) d='N'; else { latitude = -latitude; d='S'; } whole_lat = floor(latitude); lat_min = (latitude - whole_lat) * 60; sprintf(b,"%02d%05.2f,%c",whole_lat,lat_min,d); return b; } char *longitude_to_nmea(char *b, double longitude) { int whole_long; double long_min; char d; if (b == NULL) b = (char *) malloc (16); if (longitude > 0) d='E'; else { longitude = -longitude; d='W'; } whole_long = floor(longitude); long_min = (longitude - whole_long) * 60; sprintf(b,"%03d%05.2f,%c",whole_long,long_min,d); return b; }