summaryrefslogtreecommitdiff
path: root/tsip.c
diff options
context:
space:
mode:
authorEric S. Raymond <esr@thyrsus.com>2006-02-18 13:51:35 +0000
committerEric S. Raymond <esr@thyrsus.com>2006-02-18 13:51:35 +0000
commit8ce187ffcfb394eeae8c166eb6fc2abb254262b3 (patch)
tree38f6f4613f0e748ecf5b45673692abdcb29d6c1b /tsip.c
parent6504f1f29e830537d2df1f4014416508e455b84a (diff)
downloadgpsd-8ce187ffcfb394eeae8c166eb6fc2abb254262b3.tar.gz
Jason von Nieda's TSIP patch.
Diffstat (limited to 'tsip.c')
-rw-r--r--tsip.c30
1 files changed, 23 insertions, 7 deletions
diff --git a/tsip.c b/tsip.c
index e440d734..09c8e335 100644
--- a/tsip.c
+++ b/tsip.c
@@ -3,7 +3,6 @@
* by Rob Janssen, PE1CHL.
*/
#include <stdio.h>
-#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <math.h>
@@ -221,8 +220,19 @@ static gps_mask_t tsip_analyze(struct gps_device_t *session)
case 0x46: /* Health of Receiver */
if (len != 2)
break;
+ session->driver.tsip.last_46 = now;
u1 = getub(buf,0); /* Status code */
u2 = getub(buf,1); /* Antenna/Battery */
+ if (u1) {
+ session->gpsdata.status = STATUS_NO_FIX;
+ mask |= STATUS_SET;
+ }
+ else {
+ if (session->gpsdata.status < STATUS_FIX) {
+ session->gpsdata.status = STATUS_FIX;
+ mask |= STATUS_SET;
+ }
+ }
gpsd_report(4, "Receiver health %02x %02x\n",u1,u2);
break;
case 0x47: /* Signal Levels for all Satellites */
@@ -318,7 +328,7 @@ static gps_mask_t tsip_analyze(struct gps_device_t *session)
f5 = getf(buf,16); /* time-of-fix */
session->gpsdata.newdata.climb = f3;
/*@ -evalorder @*/
- session->gpsdata.newdata.speed = sqrt(pow(f2,2) + pow(f1,2));
+ session->gpsdata.newdata.speed = sqrt(pow(f2,2) + pow(f1,2)) * MPS_TO_KNOTS;
/*@ +evalorder @*/
if ((session->gpsdata.newdata.track = atan2(f1,f2) * RAD_2_DEG) < 0)
session->gpsdata.newdata.track += 360.0;
@@ -390,15 +400,15 @@ static gps_mask_t tsip_analyze(struct gps_device_t *session)
switch (u1 & 7) /* dimension */
{
case 3:
- session->gpsdata.status = STATUS_FIX;
+ //session->gpsdata.status = STATUS_FIX;
session->gpsdata.newdata.mode = MODE_2D;
break;
case 4:
- session->gpsdata.status = STATUS_FIX;
+ //session->gpsdata.status = STATUS_FIX;
session->gpsdata.newdata.mode = MODE_3D;
break;
default:
- session->gpsdata.status = STATUS_NO_FIX;
+ //session->gpsdata.status = STATUS_NO_FIX;
session->gpsdata.newdata.mode = MODE_NO_FIX;
break;
}
@@ -524,7 +534,7 @@ static gps_mask_t tsip_analyze(struct gps_device_t *session)
d2 = s2 * d5; /* north velocity m/s */
session->gpsdata.newdata.climb = s3 * d5; /* up velocity m/s */
/*@ -evalorder @*/
- session->gpsdata.newdata.speed = sqrt(pow(d2,2) + pow(d1,2));
+ session->gpsdata.newdata.speed = sqrt(pow(d2,2) + pow(d1,2)) * MPS_TO_KNOTS;
/*@ +evalorder @*/
if ((session->gpsdata.newdata.track = atan2(d1,d2) * RAD_2_DEG) < 0)
session->gpsdata.newdata.track += 360.0;
@@ -599,7 +609,7 @@ static gps_mask_t tsip_analyze(struct gps_device_t *session)
d2 = s3 * d5; /* north velocity m/s */
session->gpsdata.newdata.climb = s4 * d5; /* up velocity m/s */
/*@ -evalorder @*/
- session->gpsdata.newdata.speed = sqrt(pow(d2,2) + pow(d1,2));
+ session->gpsdata.newdata.speed = sqrt(pow(d2,2) + pow(d1,2)) * MPS_TO_KNOTS;
/*@ +evalorder @*/
if ((session->gpsdata.newdata.track = atan2(d1,d2) * RAD_2_DEG) < 0)
session->gpsdata.newdata.track += 360.0;
@@ -650,6 +660,12 @@ static gps_mask_t tsip_analyze(struct gps_device_t *session)
session->driver.tsip.last_5c = now;
}
+ if ((now - session->driver.tsip.last_46) > 5) {
+ /* Request Health of Receiver */
+ (void)tsip_write(session->gpsdata.gps_fd, 0x26, buf, 0);
+ session->driver.tsip.last_46 = now;
+ }
+
return mask;
}