aboutsummaryrefslogtreecommitdiffstats
path: root/rrlp-ephemeris
diff options
context:
space:
mode:
authorSylvain Munaut <tnt@246tNt.com>2009-12-28 15:47:21 +0100
committerHarald Welte <laforge@gnumonks.org>2010-01-07 10:22:24 +0100
commitb74cbcf7ec94f0d927f94e8152f6a8c395fd6e3a (patch)
tree4fa21061f655dd7a7dc05995e858108997961012 /rrlp-ephemeris
parenta17324c7fe86497879f3e4891b2ecbcc63d972d6 (diff)
rrlp-ephemeris: Add support for filling ReferenceTime IE
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
Diffstat (limited to 'rrlp-ephemeris')
-rw-r--r--rrlp-ephemeris/gps.h9
-rw-r--r--rrlp-ephemeris/rrlp.c9
2 files changed, 14 insertions, 4 deletions
diff --git a/rrlp-ephemeris/gps.h b/rrlp-ephemeris/gps.h
index 03d643fb4..241b9d743 100644
--- a/rrlp-ephemeris/gps.h
+++ b/rrlp-ephemeris/gps.h
@@ -151,12 +151,20 @@ struct gps_ref_pos { /* WSG84 ellipsoid */
};
+/* Reference time */
+struct gps_ref_time {
+ int wn; /* GPS week number */
+ double tow; /* in seconds */
+};
+
+
/* All assist data */
#define GPS_FIELD_IONOSPHERE (1<<0)
#define GPS_FIELD_UTC (1<<1)
#define GPS_FIELD_ALMANAC (1<<2)
#define GPS_FIELD_EPHEMERIS (1<<3)
#define GPS_FIELD_REFPOS (1<<4)
+#define GPS_FIELD_REFTIME (1<<5)
struct gps_assist_data {
int fields;
@@ -165,6 +173,7 @@ struct gps_assist_data {
struct gps_almanac almanac;
struct gps_ephemeris ephemeris;
struct gps_ref_pos ref_pos;
+ struct gps_ref_time ref_time;
};
diff --git a/rrlp-ephemeris/rrlp.c b/rrlp-ephemeris/rrlp.c
index 5e55d1d3a..e60c3ab01 100644
--- a/rrlp-ephemeris/rrlp.c
+++ b/rrlp-ephemeris/rrlp.c
@@ -430,16 +430,17 @@ _rrlp_add_reference_time(
{
struct ReferenceTime *rrlp_reftime;
- /* FIXME: Check if info is in gps_ad */
+ if (!(gps_ad->fields & GPS_FIELD_REFTIME))
+ return -EINVAL;
rrlp_reftime = calloc(1, sizeof(*rrlp_reftime));
if (!rrlp_reftime)
return -ENOMEM;
rrlp_gps_ad->controlHeader.referenceTime = rrlp_reftime;
- /* FIXME */
-// rrlp_reftime.gpsTime.gpsTOW23b = g_gps_tow / 80; /* 23 bits */
-// rrlp_reftime.gpsTime.gpsWeek = g_gps_week & 0x3ff; /* 10 bits */
+ rrlp_reftime->gpsTime.gpsWeek = gps_ad->ref_time.wn & 0x3ff; /* 10b */
+ rrlp_reftime->gpsTime.gpsTOW23b =
+ ((int)floor(gps_ad->ref_time.tow / 0.08)) & 0x7fffff; /* 23b */
return 0;
}