altosdroid: initial implementation of telemetry logging.
[fw/altos] / src / cc1111 / ao_button.c
index 77a8dde8b6918f4bbaeb49e7b4199d0c2b20ef84..69f3475fe660d43125073a40b19118f3f545c07d 100644 (file)
@@ -36,11 +36,17 @@ static __code struct {
 
 #define NUM_BUTTONS    ((sizeof ao_buttons) / sizeof (ao_buttons[0]))
 
+static __xdata uint16_t ao_button_tick[NUM_BUTTONS];
+
 static void
 ao_button_insert(char n)
 {
-       ao_fifo_insert(ao_button_fifo, n);
-       ao_wakeup(&ao_button_fifo);
+       uint16_t        now = ao_time();
+       if ((now - ao_button_tick[n]) > 20) {
+               ao_button_tick[n] = now;
+               ao_fifo_insert(ao_button_fifo, n);
+               ao_wakeup(&ao_button_fifo);
+       }
 }
 
 static void
@@ -77,6 +83,15 @@ ao_button_get(void) __critical
        return b;
 }
 
+void
+ao_button_clear(void) __critical
+{
+       char b;
+
+       while (!ao_fifo_empty(ao_button_fifo))
+               ao_fifo_remove(ao_button_fifo, b);
+}
+
 void
 ao_p0_isr(void) ao_arch_interrupt(13)
 {