summaryrefslogtreecommitdiff
path: root/driver_sirf.c
diff options
context:
space:
mode:
authorGary E. Miller <gem@rellim.com>2019-03-13 15:18:00 -0700
committerGary E. Miller <gem@rellim.com>2019-03-13 15:18:00 -0700
commit21e5566f79ad82cb018fbde2f765530b85420302 (patch)
tree66bfe429c25e262aa3fa6cead4e30f1eb370c9af /driver_sirf.c
parent7ca53f9d99fd6e4398f5a922a7684ee48962e5b5 (diff)
downloadgpsd-21e5566f79ad82cb018fbde2f765530b85420302.tar.gz
driver_nmea0183 and more: Decode $PSRFEPE, and epd.
Turns out epd also came from SiRF, but never made it to TPV. Regressions changed to show new epd data.
Diffstat (limited to 'driver_sirf.c')
-rw-r--r--driver_sirf.c49
1 files changed, 25 insertions, 24 deletions
diff --git a/driver_sirf.c b/driver_sirf.c
index 07dd195a..1c587c44 100644
--- a/driver_sirf.c
+++ b/driver_sirf.c
@@ -604,6 +604,7 @@ static gps_mask_t sirf_msg_67_1(struct gps_device_t *session,
uint32_t sv_list_4;
uint32_t sv_list_5;
uint32_t additional_info;
+ int debug_base = LOG_PROG;
if (len < 126)
return 0;
@@ -649,10 +650,10 @@ static gps_mask_t sirf_msg_67_1(struct gps_device_t *session,
mask |= TIME_SET;
datum = getub(buf, 33);
- clk_bias = getbes64(buf, 34);
- clk_bias_error = getbeu32(buf, 42);
- clk_offset = getbes32(buf, 46);
- clk_offset_error = getbeu32(buf, 50);
+ clk_bias = getbes64(buf, 34) / 100.0;
+ clk_bias_error = getbeu32(buf, 42) / 100.0;
+ clk_offset = getbes32(buf, 46) / 100.0;
+ clk_offset_error = getbeu32(buf, 50) / 100.0;
session->newdata.latitude = getbes32(buf, 54) * 1e-7;
session->newdata.longitude = getbes32(buf, 58) * 1e-7;
alt_ellips = getbes32(buf, 62);
@@ -693,15 +694,15 @@ static gps_mask_t sirf_msg_67_1(struct gps_device_t *session,
if (!(solution_info & 0x01000)) {
/* sog - speed over ground m/s * 100 */
- session->newdata.speed = getbeu16(buf, 70) * 1e-2;
+ session->newdata.speed = getbeu16(buf, 70) / 100.0;
mask |= SPEED_SET;
}
/* cog - course over ground fm true north deg * 100 */
- session->newdata.track = getbeu16(buf, 72) * 1e-2;
+ session->newdata.track = getbeu16(buf, 72) / 100.0;
mask |= TRACK_SET;
/* climb_rate - vertical velocity m/s * 100 */
- session->newdata.climb = getbes16(buf, 74) * 1e-2;
+ session->newdata.climb = getbes16(buf, 74) / 100.0;
if (session->newdata.mode == MODE_3D)
mask |= ALTITUDE_SET | CLIMB_SET;
@@ -709,15 +710,15 @@ static gps_mask_t sirf_msg_67_1(struct gps_device_t *session,
heading_rate = getbes16(buf, 76); /* rate of change cog deg/s * 100 */
distance_travel = getbeu32(buf, 78); /* distance traveled m * 100 */
/* heading_error error of cog deg * 100 */
- session->newdata.epd = getbes16(buf, 82) * 1e-2;
+ session->newdata.epd = getbeu16(buf, 82) / 100.0;
/* distance traveled error in m * 100 */
- distance_travel_error = getbeu16(buf, 84);
+ distance_travel_error = getbeu16(buf, 84) / 100.0;
ehpe = getbeu32(buf, 86); /* Estimated horizontal position error * 100 */
/* Estimated vertical position error * 100 */
- session->newdata.epv = getbeu16(buf, 90) * 1e-2;
+ session->newdata.epv = getbeu16(buf, 90) / 100.0;
/* Estimated horizontal velocity error * 100 */
- session->newdata.eps = getbeu16(buf, 94) * 1e-2;
+ session->newdata.eps = getbeu16(buf, 94) / 100.0;
mask |= SPEEDERR_SET;
session->gpsdata.dop.gdop = (int)getub(buf, 96) / 5.0;
@@ -737,44 +738,44 @@ static gps_mask_t sirf_msg_67_1(struct gps_device_t *session,
mask |= REPORT_IS; /* send it */
- if (session->context->errout.debug >= LOG_IO) {
+ if (session->context->errout.debug >= debug_base) {
/* skip all the pushing and popping, unless needed */
- gpsd_log(&session->context->errout, LOG_IO,
+ gpsd_log(&session->context->errout, debug_base,
"GPS Week %d, tow %d.%03d, time %ld.%09ld\n",
gps_week, gps_tow, gps_tow_sub_ms, now.tv_sec, now.tv_nsec);
- gpsd_log(&session->context->errout, LOG_IO,
+ gpsd_log(&session->context->errout, debug_base,
"UTC time %.9f leaps %u, datum %u\n",
session->newdata.time, session->context->leap_seconds, datum);
- gpsd_log(&session->context->errout, LOG_IO,
+ gpsd_log(&session->context->errout, debug_base,
"solution_info %08x\n", solution_info);
- gpsd_log(&session->context->errout, LOG_IO,
+ gpsd_log(&session->context->errout, debug_base,
"lat %.7f lon %.7f alte %d msl %.2f\n",
session->newdata.latitude, session->newdata.longitude,
alt_ellips, session->newdata.altitude);
- gpsd_log(&session->context->errout, LOG_IO,
+ gpsd_log(&session->context->errout, debug_base,
"speed %.2f track %.2f climb %.2f heading_rate %d\n",
session->newdata.speed, session->newdata.track,
session->newdata.climb, heading_rate);
- gpsd_log(&session->context->errout, LOG_IO,
+ gpsd_log(&session->context->errout, debug_base,
"time_bias %d time_accuracy %u, time_source %u\n",
time_bias, time_accuracy, time_source);
- gpsd_log(&session->context->errout, LOG_IO,
+ gpsd_log(&session->context->errout, debug_base,
"distance_travel %u distance_travel_error %d\n",
distance_travel, distance_travel_error);
- gpsd_log(&session->context->errout, LOG_IO,
+ gpsd_log(&session->context->errout, debug_base,
"clk_bias %.2f clk_bias_error %u\n",
clk_bias / 100.0, clk_bias_error);
- gpsd_log(&session->context->errout, LOG_IO,
+ gpsd_log(&session->context->errout, debug_base,
"clk_offset %d clk_offset_error %u\n",
clk_offset, clk_offset_error);
- gpsd_log(&session->context->errout, LOG_IO,
+ gpsd_log(&session->context->errout, debug_base,
"ehpe %d epv %.2f eps %.2f epd %.2f num_svs_in_sol %u\n", ehpe,
session->newdata.epv, session->newdata.eps, session->newdata.epd,
num_svs_in_sol);
- gpsd_log(&session->context->errout, LOG_IO,
+ gpsd_log(&session->context->errout, debug_base,
"sv_list_1 %08x sv_list_2 %08x sv_list_3 %08x\n",
sv_list_1, sv_list_2, sv_list_3);
- gpsd_log(&session->context->errout, LOG_IO,
+ gpsd_log(&session->context->errout, debug_base,
"sv_list_4 %08x sv_list_5 %08x add_info %08x\n",
sv_list_4, sv_list_5, additional_info);
}