diff options
author | Eric S. Raymond <esr@thyrsus.com> | 2013-09-29 01:42:45 -0400 |
---|---|---|
committer | Eric S. Raymond <esr@thyrsus.com> | 2013-09-29 01:46:53 -0400 |
commit | 4361ec2d89bdf451602d659ddfd0fb9a79c178a2 (patch) | |
tree | af067d1d7614a9e67f449eec933ba3347cde10b0 /driver_geostar.c | |
parent | a77b95b57475c2856707e91b197f8aaa8e5eb407 (diff) | |
download | gpsd-4361ec2d89bdf451602d659ddfd0fb9a79c178a2.tar.gz |
Change gpsd_report to no longer use a global. All regression tests pass.
This is a large, ugly change. But without it we can't troubleshoot the
ICP/IP-source initialization bug properly - colliding definitions of
gpsd_report() were interfering with error reporting early in gpsd runs.
More cleanup work remains to be done, but at least this is working.
Diffstat (limited to 'driver_geostar.c')
-rw-r--r-- | driver_geostar.c | 177 |
1 files changed, 112 insertions, 65 deletions
diff --git a/driver_geostar.c b/driver_geostar.c index eb8ba612..35c6be1b 100644 --- a/driver_geostar.c +++ b/driver_geostar.c @@ -68,7 +68,7 @@ static int geostar_write(struct gps_device_t *session, session->msgbuflen = len * 4; - gpsd_report(LOG_IO, "Sent GeoStar packet id 0x%x\n", id); + gpsd_report(session->context->debug, LOG_IO, "Sent GeoStar packet id 0x%x\n", id); if (gpsd_write(session, session->msgbuf, session->msgbuflen) != (ssize_t) session->msgbuflen) return -1; @@ -106,7 +106,8 @@ static bool geostar_detect(struct gps_device_t *session) break; if (generic_get(session) >= 0) { if (session->packet.type == GEOSTAR_PACKET) { - gpsd_report(LOG_RAW, "geostar_detect found\n"); + gpsd_report(session->context->debug, LOG_RAW, + "geostar_detect found\n"); ret = true; break; } @@ -130,7 +131,8 @@ static gps_mask_t geostar_analyze(struct gps_device_t *session) char buf2[BUFSIZ]; if (session->packet.type != GEOSTAR_PACKET) { - gpsd_report(LOG_INF, "geostar_analyze packet type %d\n", + gpsd_report(session->context->debug, LOG_INF, + "geostar_analyze packet type %d\n", session->packet.type); return 0; } @@ -157,19 +159,20 @@ static gps_mask_t geostar_analyze(struct gps_device_t *session) (void)snprintf(session->gpsdata.tag, sizeof(session->gpsdata.tag), "ID%02x", id); - gpsd_report(LOG_IO, "GeoStar packet id 0x%02x length %d: %s\n", id, len, buf2); + gpsd_report(session->context->debug, LOG_IO, + "GeoStar packet id 0x%02x length %d: %s\n", id, len, buf2); session->cycle_end_reliable = true; switch (id) { case 0x10: - gpsd_report(LOG_INF, "Raw measurements\n"); + gpsd_report(session->context->debug, LOG_INF, "Raw measurements\n"); break; case 0x11: - gpsd_report(LOG_INF, "GPS sub-frame data\n"); + gpsd_report(session->context->debug, LOG_INF, "GPS sub-frame data\n"); break; case 0x12: - gpsd_report(LOG_INF, "GLONASS sub-frame data\n"); + gpsd_report(session->context->debug, LOG_INF, "GLONASS sub-frame data\n"); break; case 0x13: d1 = getled64(buf, OFFSET(1)); @@ -177,7 +180,8 @@ static gps_mask_t geostar_analyze(struct gps_device_t *session) d3 = getled64(buf, OFFSET(5)); d4 = getled64(buf, OFFSET(29)); /* GPS time */ d5 = getled64(buf, OFFSET(31)); /* GLONASS time */ - gpsd_report(LOG_INF, "ECEF coordinates %g %g %g %f %f\n", d1, d2, d3, d4, d5); + gpsd_report(session->context->debug, LOG_INF, + "ECEF coordinates %g %g %g %f %f\n", d1, d2, d3, d4, d5); break; case 0x20: d1 = getled64(buf, OFFSET(1)); /* time */ @@ -209,26 +213,30 @@ static gps_mask_t geostar_analyze(struct gps_device_t *session) } mask |= TIME_SET | PPSTIME_IS | LATLON_SET | ALTITUDE_SET | SPEED_SET | TRACK_SET | DOP_SET | USED_IS | REPORT_IS; - gpsd_report(LOG_INF, "Geographic coordinates %f %g %g %g %g %g\n", - d1, - session->newdata.latitude, - session->newdata.longitude, - session->newdata.altitude, - session->newdata.speed, - session->newdata.track); - gpsd_report(LOG_INF, "Dilution of precision %g %g %g %g %g\n", - session->gpsdata.dop.gdop, - session->gpsdata.dop.pdop, - session->gpsdata.dop.tdop, - session->gpsdata.dop.hdop, - session->gpsdata.dop.vdop); + gpsd_report(session->context->debug, LOG_INF, + "Geographic coordinates %f %g %g %g %g %g\n", + d1, + session->newdata.latitude, + session->newdata.longitude, + session->newdata.altitude, + session->newdata.speed, + session->newdata.track); + gpsd_report(session->context->debug, LOG_INF, + "Dilution of precision %g %g %g %g %g\n", + session->gpsdata.dop.gdop, + session->gpsdata.dop.pdop, + session->gpsdata.dop.tdop, + session->gpsdata.dop.hdop, + session->gpsdata.dop.vdop); break; case 0x21: ul1 = getleu32(buf, OFFSET(1)); ul2 = getleu32(buf, OFFSET(2)); uw1 = getleu16(buf, OFFSET(3)); uw2 = getleu16(buf, OFFSET(3) + 2); - gpsd_report(LOG_INF, "Current receiver telemetry %x %d %d %d\n", ul1, ul2, uw1, uw2); + gpsd_report(session->context->debug, LOG_INF, + "Current receiver telemetry %x %d %d %d\n", + ul1, ul2, uw1, uw2); if(ul1 & (1<<3)) { session->newdata.mode = MODE_2D; } @@ -247,7 +255,7 @@ static gps_mask_t geostar_analyze(struct gps_device_t *session) break; case 0x22: ul1 = getleu32(buf, OFFSET(1)); - gpsd_report(LOG_INF, "SVs in view %d\n", ul1); + gpsd_report(session->context->debug, LOG_INF, "SVs in view %d\n", ul1); session->gpsdata.satellites_visible = (int)ul1; if(ul1 > GEOSTAR_CHANNELS) ul1 = GEOSTAR_CHANNELS; for(i = 0, j = 0; (uint32_t)i < ul1; i++) { @@ -255,7 +263,7 @@ static gps_mask_t geostar_analyze(struct gps_device_t *session) s1 = getles16(buf, OFFSET(3) + i * 3 * 4); s2 = getles16(buf, OFFSET(3) + 2 + i * 3 * 4); s3 = getles16(buf, OFFSET(4) + 2 + i * 3 * 4); - gpsd_report(LOG_INF, "ID %d Az %g El %g SNR %g\n", + gpsd_report(session->context->debug, LOG_INF, "ID %d Az %g El %g SNR %g\n", decode_channel_id(ul2), s1*0.001*RAD_2_DEG, s2*0.001*RAD_2_DEG, s3*0.1); session->gpsdata.PRN[i] = decode_channel_id(ul2); session->gpsdata.azimuth[i] = (int)round((double)s1*0.001 * RAD_2_DEG); @@ -272,46 +280,58 @@ static gps_mask_t geostar_analyze(struct gps_device_t *session) ul1 = getleu32(buf, OFFSET(1)); ul2 = getleu32(buf, OFFSET(2)); ul3 = getleu32(buf, OFFSET(3)); - gpsd_report(LOG_INF, "Receiver power-up message %d %d %d\n", ul1, ul2, ul3); + gpsd_report(session->context->debug, LOG_INF, + "Receiver power-up message %d %d %d\n", ul1, ul2, ul3); break; case 0x3f: ul1 = getleu32(buf, OFFSET(1)); ul2 = getleu32(buf, OFFSET(2)); - gpsd_report(LOG_WARN, "Negative acknowledge %x %d\n", ul1, ul2); + gpsd_report(session->context->debug, LOG_WARN, + "Negative acknowledge %x %d\n", ul1, ul2); break; case 0x40: - gpsd_report(LOG_INF, "Response to Set initial parameters\n"); + gpsd_report(session->context->debug, LOG_INF, + "Response to Set initial parameters\n"); break; case 0x41: - gpsd_report(LOG_INF, "Response to Set serial ports parameters\n"); + gpsd_report(session->context->debug, LOG_INF, + "Response to Set serial ports parameters\n"); break; case 0x42: ul1 = getleu32(buf, OFFSET(1)); ul2 = getleu32(buf, OFFSET(2)); ul3 = getleu32(buf, OFFSET(3)); - gpsd_report(LOG_INF, "Response to Set receiver operation mode %d %d %d\n", + gpsd_report(session->context->debug, LOG_INF, + "Response to Set receiver operation mode %d %d %d\n", ul1, ul2, ul3); break; case 0x43: - gpsd_report(LOG_INF, "Response to Set navigation task solution parameters\n"); + gpsd_report(session->context->debug, LOG_INF, + "Response to Set navigation task solution parameters\n"); break; case 0x44: - gpsd_report(LOG_INF, "Response to Set output data rate\n"); + gpsd_report(session->context->debug, LOG_INF, + "Response to Set output data rate\n"); break; case 0x46: - gpsd_report(LOG_INF, "Response to Assign data protocol to communication port\n"); + gpsd_report(session->context->debug, LOG_INF, + "Response to Assign data protocol to communication port\n"); break; case 0x48: - gpsd_report(LOG_INF, "Response to Set GPS almanac\n"); + gpsd_report(session->context->debug, LOG_INF, + "Response to Set GPS almanac\n"); break; case 0x49: - gpsd_report(LOG_INF, "Response to Set GLONASS almanac\n"); + gpsd_report(session->context->debug, LOG_INF, + "Response to Set GLONASS almanac\n"); break; case 0x4a: - gpsd_report(LOG_INF, "Response to Set GPS ephemeris\n"); + gpsd_report(session->context->debug, LOG_INF, + "Response to Set GPS ephemeris\n"); break; - case 0x4b: - gpsd_report(LOG_INF, "Response to Set GLONASS ephemeris\n"); + case 0x4b: + gpsd_report(session->context->debug, LOG_INF, + "Response to Set GLONASS ephemeris\n"); break; case 0x4c: ul1 = getleu32(buf, OFFSET(1)); @@ -319,60 +339,75 @@ static gps_mask_t geostar_analyze(struct gps_device_t *session) ul3 = getleu32(buf, OFFSET(3)); ul4 = getleu32(buf, OFFSET(4)); ul5 = getleu32(buf, OFFSET(5)); - gpsd_report(LOG_INF, "Response to Set PPS parameters %d %d %d %d %d\n", + gpsd_report(session->context->debug, LOG_INF, + "Response to Set PPS parameters %d %d %d %d %d\n", ul1, ul2, ul3, ul4, ul5); break; case 0x4d: - gpsd_report(LOG_INF, "Response to Enable/disable SV in position fix\n"); + gpsd_report(session->context->debug, LOG_INF, + "Response to Enable/disable SV in position fix\n"); break; case 0x4e: - gpsd_report(LOG_INF, "Response to Enable/disable NMEA messages\n"); + gpsd_report(session->context->debug, LOG_INF, + "Response to Enable/disable NMEA messages\n"); break; case 0x4f: ul1 = getleu32(buf, OFFSET(1)); ul2 = getleu32(buf, OFFSET(2)); - gpsd_report(LOG_INF, "Response to Enable/disable binary messages %x %x\n", + gpsd_report(session->context->debug, LOG_INF, + "Response to Enable/disable binary messages %x %x\n", ul1, ul2); break; case 0x80: - gpsd_report(LOG_INF, "Response to Query initial parameters\n"); + gpsd_report(session->context->debug, LOG_INF, + "Response to Query initial parameters\n"); break; case 0x81: - gpsd_report(LOG_INF, "Response to Query serial ports parameters\n"); + gpsd_report(session->context->debug, LOG_INF, + "Response to Query serial ports parameters\n"); break; case 0x82: ul1 = getleu32(buf, OFFSET(1)); ul2 = getleu32(buf, OFFSET(2)); ul3 = getleu32(buf, OFFSET(3)); - gpsd_report(LOG_INF, "Response to Query receiver operation mode %d %d %d\n", + gpsd_report(session->context->debug, LOG_INF, + "Response to Query receiver operation mode %d %d %d\n", ul1, ul2, ul3); break; case 0x83: - gpsd_report(LOG_INF, "Response to Query navigation task solution parameters\n"); + gpsd_report(session->context->debug, LOG_INF, + "Response to Query navigation task solution parameters\n"); break; case 0x84: - gpsd_report(LOG_INF, "Response to Query output data rate\n"); + gpsd_report(session->context->debug, LOG_INF, + "Response to Query output data rate\n"); break; case 0x86: session->driver.geostar.physical_port = (unsigned int)getleu32(buf, OFFSET(1)); - gpsd_report(LOG_INF, "Response to Query data protocol assignment to communication port\n"); - gpsd_report(LOG_INF, "Connected to physical port %d\n", + gpsd_report(session->context->debug, LOG_INF, + "Response to Query data protocol assignment to communication port\n"); + gpsd_report(session->context->debug, LOG_INF, + "Connected to physical port %d\n", session->driver.geostar.physical_port); break; case 0x88: - gpsd_report(LOG_INF, "Response to Query GPS almanac\n"); + gpsd_report(session->context->debug, LOG_INF, + "Response to Query GPS almanac\n"); break; case 0x89: - gpsd_report(LOG_INF, "Response to Query GLONASS almanac\n"); + gpsd_report(session->context->debug, LOG_INF, + "Response to Query GLONASS almanac\n"); break; case 0x8a: - gpsd_report(LOG_INF, "Response to Query GPS ephemerides\n"); + gpsd_report(session->context->debug, LOG_INF, + "Response to Query GPS ephemerides\n"); break; case 0x8b: d1 = getled64(buf, OFFSET(23)); d2 = getled64(buf, OFFSET(25)); d3 = getled64(buf, OFFSET(27)); - gpsd_report(LOG_INF, "Response to Query GLONASS ephemerides %g %g %g\n", + gpsd_report(session->context->debug, LOG_INF, + "Response to Query GLONASS ephemerides %g %g %g\n", d1, d2, d3); break; case 0x8c: @@ -381,23 +416,28 @@ static gps_mask_t geostar_analyze(struct gps_device_t *session) ul3 = getleu32(buf, OFFSET(3)); ul4 = getleu32(buf, OFFSET(4)); ul5 = getleu32(buf, OFFSET(5)); - gpsd_report(LOG_INF, "Response to Query PPS parameters %d %d %d %d %d\n", + gpsd_report(session->context->debug, LOG_INF, + "Response to Query PPS parameters %d %d %d %d %d\n", ul1, ul2, ul3, ul4, ul5); break; case 0x8d: - gpsd_report(LOG_INF, "Response to Query enable/disable status of the SV in position fix\n"); + gpsd_report(session->context->debug, LOG_INF, + "Response to Query enable/disable status of the SV in position fix\n"); break; case 0x8e: - gpsd_report(LOG_INF, "Response to Query enable NMEA messages\n"); + gpsd_report(session->context->debug, LOG_INF, + "Response to Query enable NMEA messages\n"); break; case 0x8f: ul1 = getleu32(buf, OFFSET(1)); ul2 = getleu32(buf, OFFSET(2)); - gpsd_report(LOG_INF, "Response to Query enable binary messages %x %x\n", + gpsd_report(session->context->debug, LOG_INF, + "Response to Query enable binary messages %x %x\n", ul1, ul2); break; case 0xc0: - gpsd_report(LOG_INF, "Response to Change operation mode command\n"); + gpsd_report(session->context->debug, LOG_INF, + "Response to Change operation mode command\n"); break; case 0xc1: ul4 = getleu32(buf, OFFSET(1)); @@ -408,27 +448,34 @@ static gps_mask_t geostar_analyze(struct gps_device_t *session) (void)snprintf(session->subtype, sizeof(session->subtype), "%d.%d %d.%d.%d %x %c-%d\n", ul4>>16, ul4&0xFFFF, ul1>>9, (ul1>>5)&0xF, ul1&0x1F, ul2, ul3>>24, ul3&0x00FFFFFF); /*@ +formattype @*/ - gpsd_report(LOG_INF, "Response to Request FW version command: %s\n", + gpsd_report(session->context->debug, LOG_INF, + "Response to Request FW version command: %s\n", session->subtype); mask |= DEVICEID_SET; break; case 0xc2: - gpsd_report(LOG_INF, "Response to Restart receiver command\n"); + gpsd_report(session->context->debug, LOG_INF, + "Response to Restart receiver command\n"); break; case 0xc3: - gpsd_report(LOG_INF, "Response to Store parameters to Flash command\n"); + gpsd_report(session->context->debug, LOG_INF, + "Response to Store parameters to Flash command\n"); break; case 0xd0: - gpsd_report(LOG_INF, "Response to Erase Flash sector command\n"); + gpsd_report(session->context->debug, LOG_INF, + "Response to Erase Flash sector command\n"); break; case 0xd1: - gpsd_report(LOG_INF, "Response to Write data to Flash command\n"); + gpsd_report(session->context->debug, LOG_INF, + "Response to Write data to Flash command\n"); break; case 0xd2: - gpsd_report(LOG_INF, "Response to Store Serial Number command\n"); + gpsd_report(session->context->debug, LOG_INF, + "Response to Store Serial Number command\n"); break; default: - gpsd_report(LOG_WARN, "Unhandled GeoStar packet type 0x%02x\n", id); + gpsd_report(session->context->debug, LOG_WARN, + "Unhandled GeoStar packet type 0x%02x\n", id); break; } @@ -549,7 +596,7 @@ static void geostar_mode(struct gps_device_t *session, int mode) /* Switch to binary mode */ (void)nmea_send(session, "$GPSGG,SWPROT"); } else { - gpsd_report(LOG_ERROR, "unknown mode %i requested\n", mode); + gpsd_report(session->context->debug, LOG_ERROR, "unknown mode %i requested\n", mode); } /*@+shiftimplementation@*/ } |