diff options
Diffstat (limited to 'src/cc1111/ao_button.c')
| -rw-r--r-- | src/cc1111/ao_button.c | 19 | 
1 files changed, 17 insertions, 2 deletions
diff --git a/src/cc1111/ao_button.c b/src/cc1111/ao_button.c index 77a8dde8..69f3475f 100644 --- a/src/cc1111/ao_button.c +++ b/src/cc1111/ao_button.c @@ -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 @@ -78,6 +84,15 @@ ao_button_get(void) __critical  }  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)  {  	P0IF = 0;  | 
