summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGary E. Miller <gem@rellim.com>2005-02-21 21:47:36 +0000
committerGary E. Miller <gem@rellim.com>2005-02-21 21:47:36 +0000
commit337d8fb121e2c4d2464826be4a9cb7c6c15b69e7 (patch)
tree040743a913928f10e4c3f3e163937e03e3dca70a
parentf568603503cc163efee17416fcdbe17e7c8877f9 (diff)
downloadgpsd-337d8fb121e2c4d2464826be4a9cb7c6c15b69e7.tar.gz
Fix garmin USB NMEA generation
-rw-r--r--libgpsd_core.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/libgpsd_core.c b/libgpsd_core.c
index 06ccb8e6..d9a24891 100644
--- a/libgpsd_core.c
+++ b/libgpsd_core.c
@@ -247,12 +247,14 @@ void gpsd_binary_satellite_dump(struct gps_session_t *session, char *bufp)
{
int i, j;
char *bufp2 = bufp;
+ bufp[0] = '\0';
j = (session->gNMEAdata.satellites / 4) + (((session->gNMEAdata.satellites % 4) > 0) ? 1 : 0);
// FIXME! only dump chanels that have data
for( i = 0 ; i < MAXCHANNELS; i++ ) {
if (i % 4 == 0) {
+ bufp += strlen(bufp);
bufp2 = bufp;
sprintf(bufp, "$GPGSV,%d,%d,%02d", j, (i / 4) + 1,
session->gNMEAdata.satellites);
@@ -262,10 +264,11 @@ void gpsd_binary_satellite_dump(struct gps_session_t *session, char *bufp)
sprintf(bufp, ",%02d,%02d,%03d,%02d", session->gNMEAdata.PRN[i],
session->gNMEAdata.elevation[i], session->gNMEAdata.azimuth[i], session->gNMEAdata.ss[i]);
else
- sprintf(bufp, ",%02d,00,000,%02d,", session->gNMEAdata.PRN[i],
+ sprintf(bufp, ",%02d,00,000,%02d", session->gNMEAdata.PRN[i],
session->gNMEAdata.ss[i]);
if (i % 4 == 3) {
- nmea_add_checksum(bufp);
+ strcat( bufp2, "*");
+ nmea_add_checksum(bufp2);
if (session->gNMEAdata.raw_hook) {
session->gNMEAdata.raw_hook(bufp2);
}
@@ -276,26 +279,27 @@ void gpsd_binary_satellite_dump(struct gps_session_t *session, char *bufp)
void gpsd_binary_quality_dump(struct gps_session_t *session, char *bufp)
{
int i, j;
+ char *bufp2 = bufp;
sprintf(bufp, "$GPGSA,%c,%d,", 'A', session->gNMEAdata.mode);
j = 0;
for (i = 0; i < MAXCHANNELS; i++) {
if (session->gNMEAdata.used[i]) {
- bufp = bufp + strlen(bufp);
+ bufp += strlen(bufp);
sprintf(bufp, "%02d,", session->gNMEAdata.PRN[i]);
j++;
}
}
for (i = j; i < MAXCHANNELS; i++) {
- bufp = bufp + strlen(bufp);
+ bufp += strlen(bufp);
sprintf(bufp, ",");
}
- bufp = bufp + strlen(bufp);
+ bufp += strlen(bufp);
sprintf(bufp, "%.2f,%.2f,%.2f*", session->gNMEAdata.pdop, session->gNMEAdata.hdop,
session->gNMEAdata.vdop);
- nmea_add_checksum(bufp);
+ nmea_add_checksum(bufp2);
if (session->gNMEAdata.raw_hook) {
- session->gNMEAdata.raw_hook(bufp);
+ session->gNMEAdata.raw_hook(bufp2);
}
}