summaryrefslogtreecommitdiff
path: root/driver_sirf.c
diff options
context:
space:
mode:
authorGary E. Miller <gem@rellim.com>2018-06-17 21:52:17 -0700
committerGary E. Miller <gem@rellim.com>2018-06-17 21:52:17 -0700
commita40408ec2be69806a7d876396dddaca728e6f6dd (patch)
treecf4959351ee6dff771328843b73018acfcb5c488 /driver_sirf.c
parent2e4d7a0efa57518d3fb0eec45f0c809d99280f4a (diff)
downloadgpsd-a40408ec2be69806a7d876396dddaca728e6f6dd.tar.gz
driver_sirf: Report ECEF in TPV.
Diffstat (limited to 'driver_sirf.c')
-rw-r--r--driver_sirf.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/driver_sirf.c b/driver_sirf.c
index a43d79cf..793ce0a0 100644
--- a/driver_sirf.c
+++ b/driver_sirf.c
@@ -703,13 +703,17 @@ static gps_mask_t sirf_msg_navsol(struct gps_device_t *session,
* we get that data from the svinfo packet.
*/
/* position/velocity is bytes 1-18 */
+ session->newdata.ecef.x = (double)getbes32(buf, 1) * 1.0,
+ session->newdata.ecef.y = (double)getbes32(buf, 5) * 1.0,
+ session->newdata.ecef.z = (double)getbes32(buf, 9) * 1.0,
+ session->newdata.ecef.vx = (double)getbes16(buf, 13) / 8.0,
+ session->newdata.ecef.vy = (double)getbes16(buf, 15) / 8.0,
+ session->newdata.ecef.vz = (double)getbes16(buf, 17) / 8.0;
+
ecef_to_wgs84fix(&session->newdata, &session->gpsdata.separation,
- (double)getbes32(buf, 1) * 1.0,
- (double)getbes32(buf, 5) * 1.0,
- (double)getbes32(buf, 9) * 1.0,
- (double)getbes16(buf, 13) / 8.0,
- (double)getbes16(buf, 15) / 8.0,
- (double)getbes16(buf, 17) / 8.0);
+ session->newdata.ecef.x, session->newdata.ecef.y,
+ session->newdata.ecef.z, session->newdata.ecef.vx,
+ session->newdata.ecef.vy, session->newdata.ecef.vz);
/* fix status is byte 19 */
navtype = (unsigned short)getub(buf, 19);
session->gpsdata.status = STATUS_NO_FIX;
@@ -747,9 +751,8 @@ static gps_mask_t sirf_msg_navsol(struct gps_device_t *session,
session->gpsdata.dop.hdop = (double)getub(buf, 20) / 5.0;
/* clear computed DOPs so they get recomputed. */
session->gpsdata.dop.tdop = NAN;
- mask |=
- TIME_SET | LATLON_SET | ALTITUDE_SET | TRACK_SET |
- SPEED_SET | STATUS_SET | MODE_SET | DOP_SET | USED_IS;
+ mask |= TIME_SET | LATLON_SET | ALTITUDE_SET | TRACK_SET | ECEF_SET
+ | VECEF_SET | SPEED_SET | STATUS_SET | MODE_SET | DOP_SET | USED_IS;
if ( 3 <= session->gpsdata.satellites_visible ) {
mask |= NTPTIME_IS;
}