diff options
author | Eric S. Raymond <esr@thyrsus.com> | 2009-02-17 16:37:46 +0000 |
---|---|---|
committer | Eric S. Raymond <esr@thyrsus.com> | 2009-02-17 16:37:46 +0000 |
commit | 9507cd9b09a666893cacc04b9877c7407d0c457a (patch) | |
tree | 5a1bf8c8fcff1174b5452d6e7c429c20f54c9b98 /gpsmon.c | |
parent | ba59a2ab82c7e1a22860ab08372d7e53d5b9e433 (diff) | |
download | gpsd-9507cd9b09a666893cacc04b9877c7407d0c457a.tar.gz |
Add GPRMC display.
Diffstat (limited to 'gpsmon.c')
-rw-r--r-- | gpsmon.c | 63 |
1 files changed, 58 insertions, 5 deletions
@@ -92,7 +92,7 @@ extern struct mdevice_t sirf_mdt; extern const struct gps_type_t nmea; -static WINDOW *nmeawin, *satwin; +static WINDOW *nmeawin, *satwin, *gprmcwin; static clock_t last_tick, tick_interval; #define SENTENCELINE 1 @@ -107,7 +107,7 @@ static bool nmea_windows(void) (void)syncok(nmeawin, true); wattrset(nmeawin, A_BOLD); - mvwaddstr(nmeawin, SENTENCELINE, 1, "Sentences: "); + mvwaddstr(nmeawin, 2, 34, " Sentences "); wattrset(nmeawin, A_NORMAL); /*@ +onlytrans @*/ @@ -121,6 +121,18 @@ static bool nmea_windows(void) display(satwin, 14, 7, " GSV "); (void)wattrset(satwin, A_NORMAL); + gprmcwin = derwin(devicewin, 7, 30, 3, 20); + (void)wborder(gprmcwin, 0, 0, 0, 0, 0, 0, 0, 0), + (void)syncok(gprmcwin, true); + (void)wattrset(gprmcwin, A_BOLD); + display(gprmcwin, 1, 1, "Time: "); + display(gprmcwin, 2, 1, "Latitude: "); + display(gprmcwin, 3, 1, "Longitude: "); + display(gprmcwin, 4, 1, "Speed: "); + display(gprmcwin, 5, 1, "Course: "); + display(gprmcwin, 6, 12, " RMC "); + (void)wattrset(gprmcwin, A_NORMAL); + last_tick = timestamp(); return (nmeawin != NULL); @@ -150,7 +162,7 @@ static void nmea_update(size_t len) *--s_end = '.'; *--s_end = '.'; } - mvwaddstr(nmeawin, SENTENCELINE, 11, sentences); + mvwaddstr(nmeawin, SENTENCELINE, 1, sentences); } /* @@ -165,9 +177,9 @@ static void nmea_update(size_t len) tick_interval = now - last_tick; if (findme != NULL) { - mvwchgat(nmeawin, SENTENCELINE, 11, xmax-13, A_NORMAL, 0, NULL); + mvwchgat(nmeawin, SENTENCELINE, 1, xmax-13, A_NORMAL, 0, NULL); mvwchgat(nmeawin, - SENTENCELINE, 11+(findme-sentences), + SENTENCELINE, 1+(findme-sentences), strlen(newid), A_BOLD, 0, NULL); } @@ -186,6 +198,47 @@ static void nmea_update(size_t len) session.gpsdata.ss[i]); } } + + if (strcmp(newid, "GPRMC") == 0) { + char scr[128]; + if (isnan(session.gpsdata.fix.time)==0) { + (void)unix_to_iso8601(session.gpsdata.fix.time, scr, sizeof(scr)); + } else + (void)snprintf(scr, sizeof(scr), "n/a"); + (void)mvwaddstr(gprmcwin, 1, 7, scr); + + + /* Fill in the latitude. */ + if (session.gpsdata.fix.mode >= MODE_2D && isnan(session.gpsdata.fix.latitude)==0) { + (void)snprintf(scr, sizeof(scr), "%s %c", + deg_to_str(deg_ddmmss, fabs(session.gpsdata.fix.latitude)), + (session.gpsdata.fix.latitude < 0) ? 'S' : 'N'); + } else + (void)snprintf(scr, sizeof(scr), "n/a"); + (void)mvwaddstr(gprmcwin, 2, 11, scr); + + /* Fill in the longitude. */ + if (session.gpsdata.fix.mode >= MODE_2D && isnan(session.gpsdata.fix.longitude)==0) { + (void)snprintf(scr, sizeof(scr), "%s %c", + deg_to_str(deg_ddmmss, fabs(session.gpsdata.fix.longitude)), + (session.gpsdata.fix.longitude < 0) ? 'W' : 'E'); + } else + (void)snprintf(scr, sizeof(scr), "n/a"); + (void)mvwaddstr(gprmcwin, 3, 11, scr); + + /* Fill in the speed. */ + if (session.gpsdata.fix.mode >= MODE_2D && isnan(session.gpsdata.fix.track)==0) + (void)snprintf(scr, sizeof(scr), "%.1f meters/sec", session.gpsdata.fix.speed); + else + (void)snprintf(scr, sizeof(scr), "n/a"); + (void)mvwaddstr(gprmcwin, 4, 11, scr); + + if (session.gpsdata.fix.mode >= MODE_2D && isnan(session.gpsdata.fix.track)==0) + (void)snprintf(scr, sizeof(scr), "%.1f deg", session.gpsdata.fix.track); + else + (void)snprintf(scr, sizeof(scr), "n/a"); + (void)mvwprintw(gprmcwin, 5, 11, scr); + } } } } |