rrlp-ephemeris: Add support for filling ReferenceTime IE

Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
diff --git a/gps.h b/gps.h
index 03d643f..241b9d7 100644
--- a/gps.h
+++ b/gps.h
@@ -151,12 +151,20 @@
 };
 
 
+/* 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_almanac		almanac;
 	struct gps_ephemeris		ephemeris;
 	struct gps_ref_pos		ref_pos;
+	struct gps_ref_time		ref_time;
 };
 
 
diff --git a/rrlp.c b/rrlp.c
index 5e55d1d..e60c3ab 100644
--- a/rrlp.c
+++ b/rrlp.c
@@ -430,16 +430,17 @@
 {
 	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;
 }