From ec6f8377e1d09e01a3e41dc298d6c88925de56ce Mon Sep 17 00:00:00 2001 From: "Jan \"Yenya\" Kasprzak" Date: Thu, 30 Aug 2012 01:19:46 +0200 Subject: [PATCH] buttons: long/short keypress detection --- buttons.c | 38 ++++++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/buttons.c b/buttons.c index 83664c7..b58ca2a 100644 --- a/buttons.c +++ b/buttons.c @@ -18,6 +18,16 @@ void init_buttons() extern unsigned char led1_counter; +static void inline long_press(unsigned char n) +{ + led_set_status(2); +} + +static void inline short_press(unsigned char n) +{ + led_set_status(1); +} + void timer_check_buttons() { unsigned char pinb = PINB; @@ -28,32 +38,36 @@ void timer_check_buttons() }; for (i = 0; i < N_BUTTONS; i++) { if (!port_states[i]) { // is pressed - if (button_pressed[i]) { // been already pressed - // TODO long button press - /* - uint16_t duration = jiffies - button_start[i]; - if (duration > 10 && duration < 40) { - gpio_set(GPIO_LED2, 1); - } - */ - } else { // begin of button press + if (button_pressed[i] == 0) { + // begin of button press button_pressed[i] = 1; button_start[i] = jiffies; +#if 0 // log_byte(0xC0); // log_word(jiffies); +#endif + } else if (button_pressed[i] == 1) { + // been already pressed + uint16_t duration = jiffies - button_start[i]; + if (duration > 80) { + // long button press + button_pressed[i] = 2; + long_press(i); + } } } else { // is not pressed if (button_pressed[i]) { // just depressed uint16_t duration = jiffies - button_start[i]; +#if 1 log_byte(0xC1); log_word(duration); log_flush(); - // led_set_number_pattern(N_PWMLEDS, 1 + (duration >> 3)); +#endif button_pressed[i] = 0; + if (duration > 6 && duration < 30) + short_press(i); } } - - break; // FIXME - delete this when btn1 is ready } } -- 2.39.3