Fixed button handler
This commit is contained in:
parent
423511bffc
commit
542ee83c04
|
@ -2,9 +2,10 @@
|
||||||
#include "mgos_gpio.h"
|
#include "mgos_gpio.h"
|
||||||
#include "mgos_timers.h"
|
#include "mgos_timers.h"
|
||||||
#include "buttonHandler.h"
|
#include "buttonHandler.h"
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
#define ON_BOARD_BUTTON_PIN 5
|
#define ON_BOARD_BUTTON_PIN 0
|
||||||
#define MAX_TIME_BETWEEN_MULTIPLE_BUTTON_PRESS_EVENTS 200
|
#define MAX_TIME_BETWEEN_MULTIPLE_BUTTON_PRESS_EVENTS 0.3 /* seconds */
|
||||||
|
|
||||||
static double lastButtonPressTime = 0;
|
static double lastButtonPressTime = 0;
|
||||||
static uint8_t buttonPressCounter = 0;
|
static uint8_t buttonPressCounter = 0;
|
||||||
|
@ -31,7 +32,7 @@ void add_button_press_callback(int numberPressed, button_press_callback cb) {
|
||||||
|
|
||||||
static void multiPressButtonHandler(void *arg) {
|
static void multiPressButtonHandler(void *arg) {
|
||||||
(void) arg;
|
(void) arg;
|
||||||
LOG(LL_DEBUG, ("multiPressButtonHandler called after %d presses", buttonPressCounter));
|
LOG(LL_DEBUG, ("multiPressButtonHandler called after %d presses, uptime=%f", buttonPressCounter, mgos_uptime()));
|
||||||
multiPressTimerId = 0; // timer used only once, thus we clear it
|
multiPressTimerId = 0; // timer used only once, thus we clear it
|
||||||
for (int i=0; i<callbacksRegistered; ++i) {
|
for (int i=0; i<callbacksRegistered; ++i) {
|
||||||
if (callbacks[i].numberPressed == buttonPressCounter) {
|
if (callbacks[i].numberPressed == buttonPressCounter) {
|
||||||
|
@ -39,6 +40,7 @@ static void multiPressButtonHandler(void *arg) {
|
||||||
callbacks[i].callback(buttonPressCounter);
|
callbacks[i].callback(buttonPressCounter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
buttonPressCounter = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void buttonHandler(int pin, void *arg) {
|
static void buttonHandler(int pin, void *arg) {
|
||||||
|
@ -48,12 +50,13 @@ static void buttonHandler(int pin, void *arg) {
|
||||||
if (mgos_uptime() - lastButtonPressTime < MAX_TIME_BETWEEN_MULTIPLE_BUTTON_PRESS_EVENTS) {
|
if (mgos_uptime() - lastButtonPressTime < MAX_TIME_BETWEEN_MULTIPLE_BUTTON_PRESS_EVENTS) {
|
||||||
++buttonPressCounter;
|
++buttonPressCounter;
|
||||||
} else {
|
} else {
|
||||||
buttonPressCounter = 0;
|
buttonPressCounter = 1;
|
||||||
}
|
}
|
||||||
|
// LOG(LL_DEBUG, ("buttonHandler, lastButtonPressTime=%f, uptime=%f", lastButtonPressTime, mgos_uptime()));
|
||||||
lastButtonPressTime = mgos_uptime();
|
lastButtonPressTime = mgos_uptime();
|
||||||
// at this point we do not know if more press events will come that we need to count, therefore we wait before we act
|
// at this point we do not know if more press events will come that we need to count, therefore we wait before we act
|
||||||
if (multiPressTimerId != 0) mgos_clear_timer(multiPressTimerId);
|
if (multiPressTimerId != 0) mgos_clear_timer(multiPressTimerId);
|
||||||
multiPressTimerId = mgos_set_timer(MAX_TIME_BETWEEN_MULTIPLE_BUTTON_PRESS_EVENTS + 1, 0, multiPressButtonHandler, NULL);
|
multiPressTimerId = mgos_set_timer(floor(1000 * MAX_TIME_BETWEEN_MULTIPLE_BUTTON_PRESS_EVENTS), 0, multiPressButtonHandler, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void init_button_handler() {
|
void init_button_handler() {
|
||||||
|
|
Loading…
Reference in New Issue