예제 #1
0
파일: parse.c 프로젝트: kcnolan13/fmHarmony
int main(int argc, char* argv[]){

	string = (char *) malloc(70);
	sentence = (char *) malloc(70);
	int i = 0;

	//TEST 1
	char *testsent = ",280511,,,A*45\r$GPRMC,092751.000,A,5321.6802,N,00630.3371,W,0.06,31.66,280511,,,A*45\r";

	//strip chars from the front of test sentence. Pass into merge_nmea
	for (i = 0; i < strlen(testsent); i++){
		merge_nmea(testsent[i]);
	}

	printf("Sentence: %s\n", sentence);

	parse_nmea(sent_prep(sentence));



	//TEST 2
	char *testsent = ",280511,,,A*45\r$GPRMC,092751.000,A,5321.6802,N,00630.3371,W,0.06,31.66,280511,,,A*45\r";

	//strip chars from the front of test sentence. Pass into merge_nmea
	for (i = 0; i < strlen(testsent); i++){
		merge_nmea(testsent[i]);
	}

	printf("Sentence: %s\n", sentence);

	parse_nmea(sent_prep(sentence));

	return 0;
}
예제 #2
0
uint32_t MtkGps::detect(TTYUARTClass *ser)
{
	if (ser == NULL)
		return PMTK_BR_INVALID;
	
	// store current serial port
	TTYUARTClass *gps = gpsSerial;
	gpsSerial = ser;
	uint32_t rate = brate;

	int br;
	const char *nmea;
	for (br = 0; brates[br] != PMTK_BR_INVALID; br++) {
		ser->begin(brates[br]);
		delay(10);
		long int timeout = millis();
		// send "binary format off" followed by TEST
		// and wait 500 msec for a reply
		write(bin_off, 13);
		delay(20);
		sendCommand(PMTK_TEST);
		while((millis() - timeout) < 500) {
			if ((nmea = read()) != NULL && (parse_nmea(nmea) == 0))
				goto found;
		}
	}

found:
	// restore original serial port
	gpsSerial = gps;
	begin(rate);
	
	return brates[br];
}
예제 #3
0
파일: nmeaparser.c 프로젝트: via/ece4534
int
main()
{

  char *string = "$GPGGA,185624.000,3713.9223,N,08025.4061,W,1,7,1.09,642.4,M,-32.8,M,,*6D";

  struct location l;

  if (parse_nmea(&l, string) < 0) {
    printf("Invalid nmea string!\n");
    exit(EXIT_FAILURE);
  }

  printf("%d %f  %d %f\n", l.lat_degrees, l.lat_minutes, l.lon_degrees, l.lon_minutes);

  return 0;
}
예제 #4
0
파일: driver_ublox.c 프로젝트: guoguov/test
static void gps_message_handler(int fd)
{
	char buf[BUFSIZ];
	ssize_t n;
	
	while ((n = read(fd, buf, BUFSIZ)) > 0) {
		if (write(STDOUT_FILENO, buf, n) < 0) {
			perror("write");
			break;
		}
		buf[n] = 0;
		ublox_gps.events->nmea_event(buf, n);
		if (parse_nmea(buf) < 0)
			LOGD("Error NMEA Message: %s", buf);	
	}
	if (n < 0) 
		perror("read");
}
예제 #5
0
파일: main.c 프로젝트: qartis/dori
uint8_t user1_irq(void)
{
    struct nmea_data_t result;
    char buf[BUFLEN];
    uint8_t i;

    nmea_buf[nmea_buf_len] = '\0';

    for (i = 0; i < sizeof(buf); i++)
        buf[i] = nmea_buf[i];

    result = parse_nmea(buf);

    nmea_buf_len = 0;

    switch (result.tag) {
    case NMEA_TIMESTAMP:
        if (result.timestamp > last_time_sync + TIME_SYNC_INTERVAL) {
            time_set(result.timestamp);
            last_time_sync = result.timestamp;
            send_time_can(TYPE_value_explicit);
        }
        break;

    case NMEA_COORDS:
        coords_read_time = now;
        cur_lat = result.cur_lat;
        cur_lon = result.cur_lon;
        break;

    case NMEA_NUM_SATS:
        num_sats_read_time = now;
        num_sats = result.num_sats;
        break;

    default:
        break;
    }

    return 0;
}