From: Jan "Yenya" Kasprzak Date: Wed, 29 Aug 2012 23:19:46 +0000 (+0200) Subject: buttons: long/short keypress detection X-Git-Tag: gedasymbols-20120913~28 X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=commitdiff_plain;h=ec6f8377e1d09e01a3e41dc298d6c88925de56ce;p=bike-lights.git buttons: long/short keypress detection --- 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 } }