]> www.fi.muni.cz Git - bike-lights.git/commitdiff
buttons: long/short keypress detection
authorJan "Yenya" Kasprzak <kas@fi.muni.cz>
Wed, 29 Aug 2012 23:19:46 +0000 (01:19 +0200)
committerJan "Yenya" Kasprzak <kas@fi.muni.cz>
Fri, 31 Aug 2012 21:08:11 +0000 (23:08 +0200)
buttons.c

index 83664c70f9a3e085a7985c1eca041669c5f6a948..b58ca2adade9d384e17659da9202df9508fdf438 100644 (file)
--- 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
        }
 }