summaryrefslogtreecommitdiff
path: root/src/ao_gps_report.c
diff options
context:
space:
mode:
authorBdale Garbee <bdale@gag.com>2009-08-19 00:49:24 -0600
committerBdale Garbee <bdale@gag.com>2009-08-19 00:49:24 -0600
commit4486d9156e19e4280b42bcd422d81d04f2d04a92 (patch)
treed0313710d9040f63c6cb2f5f3d4b11c6208525f7 /src/ao_gps_report.c
parentdd09f0bc2b950c00f3b489878cd69ad8a003f46c (diff)
parent33edd62992a32b0ec8ca66d879fa300871db5937 (diff)
Merge branch 'master' of ssh://git.gag.com/scm/git/fw/altos0.5
Diffstat (limited to 'src/ao_gps_report.c')
-rw-r--r--src/ao_gps_report.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/ao_gps_report.c b/src/ao_gps_report.c
index dce12adb..acf8bb40 100644
--- a/src/ao_gps_report.c
+++ b/src/ao_gps_report.c
@@ -52,10 +52,41 @@ ao_gps_report(void)
}
}
+void
+ao_gps_tracking_report(void)
+{
+ static __xdata struct ao_log_record gps_log;
+ static __xdata struct ao_gps_tracking_data gps_tracking_data;
+ uint8_t c, n;
+
+ for (;;) {
+ ao_sleep(&ao_gps_tracking_data);
+ ao_mutex_get(&ao_gps_mutex);
+ memcpy(&gps_tracking_data, &ao_gps_tracking_data, sizeof (struct ao_gps_tracking_data));
+ ao_mutex_put(&ao_gps_mutex);
+
+ if (!(n = gps_tracking_data.channels))
+ continue;
+
+ gps_log.tick = ao_time();
+ gps_log.type = AO_LOG_GPS_SAT;
+ for (c = 0; c < n; c++)
+ if ((gps_log.u.gps_sat.svid = gps_tracking_data.sats[c].svid) &&
+ (gps_log.u.gps_sat.state = gps_tracking_data.sats[c].state))
+ {
+ gps_log.u.gps_sat.c_n = gps_tracking_data.sats[c].c_n_1;
+ gps_log.u.gps_sat.unused = 0;
+ ao_log_data(&gps_log);
+ }
+ }
+}
+
__xdata struct ao_task ao_gps_report_task;
+__xdata struct ao_task ao_gps_tracking_report_task;
void
ao_gps_report_init(void)
{
ao_add_task(&ao_gps_report_task, ao_gps_report, "gps_report");
+ ao_add_task(&ao_gps_tracking_report_task, ao_gps_tracking_report, "gps_tracking_report");
}