#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
+#include <errno.h>
#include <string.h>
#include <termios.h>
} nmea_params[MAX_NMEA_PARAM];
static int nmea_bad_time;
-char longitude[32] = { 0 }, lattitude[32] = { 0 }, course[16] = { 0 }, speed[16] = { 0 }, elivation[16] = { 0 };
+char longitude[32] = { 0 }, latitude[32] = { 0 }, course[16] = { 0 }, speed[16] = { 0 }, elivation[16] = { 0 };
int gps_valid = 0;
static void
if (nmea_params[3].num < 0 || nmea_params[3].num > 2)
nmea_params[3].num = 0;
- LOG("%s: %s\n", ids[nmea_params[3].num], nmea_params[4].str);
+ DEBUG(3, "%s: %s\n", ids[nmea_params[3].num], nmea_params[4].str);
}
static void
if (*nmea_params[2].str != 'A') {
gps_valid = 0;
- fprintf(stderr, "waiting for valid signal\n");
+ DEBUG(4, "waiting for valid signal\n");
return;
}
struct timeval cur;
strftime(tmp, 256, "%D %02H:%02M:%02S", &tm);
- LOG("date: %s UTC\n", tmp);
+ DEBUG(3, "date: %s UTC\n", tmp);
tv.tv_sec -= timezone;
if (daylight)
int latd, latm, lats;
int lngd, lngm, lngs;
float flats, flngs;
- LOG("position: %s, %s\n",
+ DEBUG(4, "position: %s, %s\n",
nmea_params[3].str, nmea_params[5].str);
latm = atoi(&nmea_params[3].str[2]);
nmea_params[3].str[2] = '\0';
#define ms_to_deg(x, y) (((x * 10000) + y) / 60)
- LOG("position: %d°%d.%04d, %d°%d.%04d\n",
+ DEBUG(4, "position: %d°%d.%04d, %d°%d.%04d\n",
latd, latm, lats, lngd, lngm, lngs);
- LOG("position: %d°%d'%.1f\" %d°%d'%.1f\"\n",
+ DEBUG(4, "position: %d°%d'%.1f\" %d°%d'%.1f\"\n",
latd, latm, flats, lngd, lngm, flngs);
- snprintf(lattitude, sizeof(lattitude), "%d.%d", latd, ms_to_deg(latm, lats));
- snprintf(longitude, sizeof(longitude), "%d.%d", lngd, ms_to_deg(lngm, lngs));
- LOG("position: %s %s\n", lattitude, longitude);
+ snprintf(latitude, sizeof(latitude), "%d.%04d", latd, ms_to_deg(latm, lats));
+ snprintf(longitude, sizeof(longitude), "%d.%04d", lngd, ms_to_deg(lngm, lngs));
+ DEBUG(3, "position: %s %s\n", latitude, longitude);
gps_timestamp();
}
}
if (!gps_valid)
return;
strncpy(elivation, nmea_params[9].str, sizeof(elivation));
- LOG("height: %s\n", elivation);
+ DEBUG(4, "height: %s\n", elivation);
}
static void
return;
strncpy(course, nmea_params[1].str, sizeof(course));
strncpy(speed, nmea_params[6].str, sizeof(speed));
- LOG("course: %s\n", course);
- LOG("speed: %s\n", speed);
+ DEBUG(4, "course: %s\n", course);
+ DEBUG(4, "speed: %s\n", speed);
}
static struct nmea_msg {
nmea_tokenize(char *msg)
{
int cnt = 0;
- char *tok = strtok(msg, ",");
+ char *tok = strsep(&msg, ",");
while (tok && cnt < MAX_NMEA_PARAM) {
nmea_params[cnt].str = tok;
nmea_params[cnt].num = atoi(tok);
cnt++;
- tok = strtok(NULL, ",");
+ tok = strsep(&msg, ",");
}
return cnt;
return;
if (nmea_verify_checksum(a)) {
- ERROR("nmea message has invlid checksum\n");
+ ERROR("nmea message has invalid checksum\n");
return;
}
tty = open(dev, O_RDWR | O_NOCTTY | O_NONBLOCK);
if (tty < 0) {
- ERROR("%s: device open failed\n", dev);
+ ERROR("%s: device open failed: %s\n", dev, strerror(errno));
return -1;
}