summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2014-11-06 16:02:47 -0800
committerKeith Packard <keithp@keithp.com>2014-11-06 16:03:42 -0800
commitd3dd45b060c996153ff8195bd371e9e1f3b15efb (patch)
treeb362816d3ff2e68d56b486546768f281dfa0e2e0
parent2313cdacefb2139bc68cd98e782c54d706af0704 (diff)
altos: Use other TeleDongle LED for CRC-invalid packet reporting
Instead of blinking out some fake-o RSSI indication, just blink the red LED when a packet with a bad CRC is received. Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r--src/kernel/ao.h1
-rw-r--r--src/kernel/ao_monitor.c11
2 files changed, 11 insertions, 1 deletions
diff --git a/src/kernel/ao.h b/src/kernel/ao.h
index 48b06490..16d600aa 100644
--- a/src/kernel/ao.h
+++ b/src/kernel/ao.h
@@ -652,6 +652,7 @@ union ao_monitor {
extern __xdata union ao_monitor ao_monitor_ring[AO_MONITOR_RING];
#define ao_monitor_ring_next(n) (((n) + 1) & (AO_MONITOR_RING - 1))
+#define ao_monitor_ring_prev(n) (((n) - 1) & (AO_MONITOR_RING - 1))
extern __data uint8_t ao_monitoring;
extern __data uint8_t ao_monitor_head;
diff --git a/src/kernel/ao_monitor.c b/src/kernel/ao_monitor.c
index 2d75c41c..cba0d80a 100644
--- a/src/kernel/ao_monitor.c
+++ b/src/kernel/ao_monitor.c
@@ -94,9 +94,18 @@ __xdata struct ao_task ao_monitor_blink_task;
void
ao_monitor_blink(void)
{
+#ifdef AO_MONITOR_BAD
+ uint8_t *recv;
+#endif
for (;;) {
ao_sleep(DATA_TO_XDATA(&ao_monitor_head));
- ao_led_for(AO_MONITOR_LED, AO_MS_TO_TICKS(100));
+#ifdef AO_MONITOR_BAD
+ recv = (uint8_t *) &ao_monitor_ring[ao_monitor_ring_prev(ao_monitor_head)];
+ if (ao_monitoring && !(recv[ao_monitoring + 1] & AO_RADIO_STATUS_CRC_OK))
+ ao_led_for(AO_MONITOR_BAD, AO_MS_TO_TICKS(100));
+ else
+#endif
+ ao_led_for(AO_MONITOR_LED, AO_MS_TO_TICKS(100));
}
}
#endif