// Compute the GPS location using decimal scale extern void gps_location(loc_t *coord) { uint8_t status = _EMPTY; while(status != _COMPLETED) { gpgga_t gpgga; gprmc_t gprmc; char buffer[256]; serial_readln(buffer, 256); switch (nmea_get_message_type(buffer)) { case NMEA_GPGGA: nmea_parse_gpgga(buffer, &gpgga); gps_convert_deg_to_dec(&(gpgga.latitude), gpgga.lat, &(gpgga.longitude), gpgga.lon); coord->latitude = gpgga.latitude; coord->longitude = gpgga.longitude; coord->altitude = gpgga.altitude; status |= NMEA_GPGGA; break; case NMEA_GPRMC: nmea_parse_gprmc(buffer, &gprmc); coord->speed = gprmc.speed; coord->course = gprmc.course; status |= NMEA_GPRMC; break; } } }
// Compute the GPS location using decimal scale void gps_location(loc_t *coord) { uint8_t status = _EMPTY; while(status != _COMPLETED) { gpgga_t gpgga; gprmc_t gprmc; char buffer[256]; rp_UartReadln(buffer, 256); switch (rp_NmeaGetMessageType(buffer)) { case NMEA_GPGGA: rp_NmeaParseGpgga(buffer, &gpgga); gps_convert_deg_to_dec(&(gpgga.latitude), gpgga.lat, &(gpgga.longitude), gpgga.lon); coord->latitude = gpgga.latitude; coord->longitude = gpgga.longitude; coord->altitude = gpgga.altitude; status |= NMEA_GPGGA; break; case NMEA_GPRMC: rp_NmeaParseGprmc(buffer, &gprmc); coord->speed = gprmc.speed; coord->course = gprmc.course; status |= NMEA_GPRMC; break; } } }
// Compute the GPS location using decimal scale void gps_location(loc_t *coord, char *buffer) { coord->type = nmea_get_message_type(buffer); switch (coord->type) { case NMEA_GPGGA: nmea_parse_gpgga(buffer, coord); gps_convert_deg_to_dec(&(coord->latitude), coord->lat, &(coord->longitude), coord->lon); break; case NMEA_GPRMC: nmea_parse_gprmc(buffer, coord); break; case NMEA_UNKNOWN: // unknown message type break; } }
// Compute the GPS location using decimal scale extern void gps_location(loc_t *coord) { uint8_t status = _EMPTY; while(status != _COMPLETED) { gpgga_t gpgga; gprmc_t gprmc; char buffer[1000]; //mraa_uart_read(uart, buffer, 256); serial_readln(buffer, 256); //printf("%s\n", buffer); //printf("%d\n",nmea_get_message_type(buffer)); switch (nmea_get_message_type(buffer)) { case NMEA_GPGGA: nmea_parse_gpgga(buffer, &gpgga); //printf("%d\n", gpgga.latitude); gps_convert_deg_to_dec(&(gpgga.latitude), gpgga.lat, &(gpgga.longitude), gpgga.lon); // printf("%d\n", gpgga.latitude); coord->latitude = gpgga.latitude; coord->longitude = gpgga.longitude; coord->altitude = gpgga.altitude; status |= NMEA_GPGGA; break; case NMEA_GPRMC: nmea_parse_gprmc(buffer, &gprmc); coord->speed = gprmc.speed; coord->course = gprmc.course; //printf("%dspeed\n", gprmc.speed); //coord->magnetic = gprmc.magnetic; //coord->mag = gprmc.mag; //printf("%d\n", gprmc.magnetic); status |= NMEA_GPRMC; break; } } }
int main() { mraa_uart_context gps; load_device_tree("ADAFRUIT-UART1"); gps = mraa_uart_init_raw("/dev/ttyO1"); mraa_uart_set_baudrate(gps, 9600); char buf[1000]; char search[7]; gprmc_t readGPS; // char *p = buf; while(1){//gprmc_t readGPS; int i=0; mraa_uart_read(gps, search, 1); if(search[0] == '$'){ for(i=1; i<7;i++){ mraa_uart_read(gps, search+i, 1); } if(strstr(search, "$GPRMC,")){ for(i=0; i<100;i++){ mraa_uart_read(gps, buf+i, 1); if(buf[i] == '\n'){ buf[i]='\0'; break; } } // printf("%s\n", buf); nmea_parse_gprmc(buf, &readGPS); gps_convert_deg_to_dec(&(readGPS.latitude), readGPS.lat, &(readGPS.longitude), readGPS.lon); printf("%d\n", readGPS.state); printf("%f\n", readGPS.latitude); printf("%f\n", readGPS.longitude); } // mraa_uart_read(gps, buf+1, 1); // mraa_uart_read(gps, buf+2, 1); // mraa_uart_read(gps, buf+3, 1); // mraa_uart_read(gps, buf+4, 1); // mraa_uart_read(gps, buf+5, 1); // mraa_uart_read(gps, buf+6, 1); // mraa_uart_read(gps, buf+7, 1); // mraa_uart_read(gps, buf+8, 1); // mraa_uart_read(gps, buf+9, 1); // mraa_uart_read(gps, buf+10, 1); // mraa_uart_read(gps, buf+11, 1); // mraa_uart_read(gps, buf+12, 1); // mraa_uart_read(gps, buf+13, 1); // mraa_uart_read(gps, buf+14, 1); // mraa_uart_read(gps, buf+15, 1); // mraa_uart_read(gps, buf+16, 1); // printf("%s\n",buf); // if(buf[0]=='$') // { // printf("%s\n", buf); //buf = strchr(buf, ',')+1; //printf("%s\n", buf); // } // if (strchr(buf, '$GPRMC')!=NULL){ // //buf = strchr(buf, ',')+1; // //printf("%s\n", buf); // } //buf = strchr(buf, ',')+1; //printf("%s\n", buf); //mraa_uart_read(gps, buf, 1); // mraa_uart_read(gps, buf+1, 1); // mraa_uart_read(gps, buf+2, 1); // mraa_uart_read(gps, buf+3, 1); // mraa_uart_read(gps, buf+4, 1); // mraa_uart_read(gps, buf+5, 1); // mraa_uart_read(gps, buf+6, 1); // mraa_uart_read(gps, buf+7, 1); // mraa_uart_read(gps, buf+8, 1); // mraa_uart_read(gps, buf+9, 1); // mraa_uart_read(gps, buf+10, 1); // mraa_uart_read(gps, buf+11, 1); // mraa_uart_read(gps, buf+12, 1); // mraa_uart_read(gps, buf+13, 1); // mraa_uart_read(gps, buf+14, 1); // mraa_uart_read(gps, buf+15, 1); // mraa_uart_read(gps, buf+16, 1); // mraa_uart_read(gps, buf+17, 1); //int i=0; //for(i = 0; i<100) // if(nmea_get_message_type(buf)==NMEA_GPRMC){ // nmea_parse_gprmc(buf, &readGPS); // printf("%d\n", readGPS.speed);} // } } } }