diff options
author | uvok | 2025-07-21 10:07:49 +0200 |
---|---|---|
committer | uvok | 2025-07-21 10:07:49 +0200 |
commit | 8befcb826878558c348e82d9d3c120ca19a5490c (patch) | |
tree | a7865bab460d3f5d3ceb400f1ba45b90e59d15fb /src | |
parent | ab8efec6002d4612b996e982c8fe17a527711991 (diff) |
Remove pin 0 poilling
Diffstat (limited to 'src')
-rw-r--r-- | src/gpio.cpp | 38 | ||||
-rw-r--r-- | src/main.cpp | 26 |
2 files changed, 23 insertions, 41 deletions
diff --git a/src/gpio.cpp b/src/gpio.cpp index 6746a48..7f473ec 100644 --- a/src/gpio.cpp +++ b/src/gpio.cpp @@ -5,8 +5,6 @@ #include <Arduino.h> -#define BUTTON_PIN 0 - #if UVOK_EPAP_BOARD == BOARD_ESP32_CROWPANEL // Elecrow #define EXIT_KEY 1 @@ -62,7 +60,7 @@ void de::uvok::badge::gpio_init(void) gpio_task_stuff.queue_handle = xQueueCreateStatic(4, sizeof(pin_notification_t), &(gpio_task_stuff.queue_storage[0]), &gpio_task_stuff.queue); #if UVOK_EPAP_BOARD == BOARD_ESP32_CROWPANEL - uint8_t inPins[] = {EXIT_KEY, HOME_KEY, NEXT_KEY, OK_KEY, PRV_KEY}; + uint8_t inPins[] = {BOOT_KEY, EXIT_KEY, HOME_KEY, NEXT_KEY, OK_KEY, PRV_KEY}; for (uint8_t p : inPins) { pinMode(p, GPIO_MODE_INPUT); @@ -73,41 +71,19 @@ void de::uvok::badge::gpio_init(void) #endif } -static volatile uint8_t event; +static volatile uint32_t event; // "Poll task", for button 0. -long de::uvok::badge::gpio_poll(void) +de::uvok::badge::gpio_poll_result_t de::uvok::badge::gpio_poll(void) { - static unsigned long pressedTime = 0; - static unsigned long releasedTime = 0; - - int x = 0; - static int lastState = HIGH; - int buttonState = digitalRead(BUTTON_PIN); - long pressDuration = 0; - if (lastState == HIGH && buttonState == LOW) - { - Serial.println("``\\__"); - pressedTime = millis(); - lastState = LOW; - } - else if (lastState == LOW && buttonState == HIGH) - { - lastState = HIGH; - Serial.println("__/``"); - releasedTime = millis(); - - pressDuration = releasedTime - pressedTime; - }; - if (event) { - uint8_t r = event; + uint32_t r = event; event = 0; - return r; + return {.duration_ms = (r >> 8), .pin_number = (r & 0xff), .has_data = true}; } - return pressDuration; + return {0}; } //! GPIO task loop, read / handle queue. @@ -134,7 +110,7 @@ static void gpio_loop(void *ctx) continue; LOG_F(" Handling\n"); - event = pin; + event = ((inputs[pin].released - inputs[pin].pressed) << 8) | (pin & 0xff); } } } diff --git a/src/main.cpp b/src/main.cpp index 52b3af8..2153324 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -50,26 +50,32 @@ void loop() { static uint32_t lastActivity; - uint16_t pressDuration = de::uvok::badge::gpio_poll(); - if (pressDuration < 64) + auto gpio_result = de::uvok::badge::gpio_poll(); + if (gpio_result.has_data) { + LOG_F("Pin %d for %u ms\n", gpio_result.pin_number, gpio_result.duration_ms); uint8_t newNum = UINT8_MAX; - if (pressDuration == NEXT_KEY) + switch (gpio_result.pin_number) + { + case NEXT_KEY: de::uvok::badge::display_next(); - if (pressDuration == PRV_KEY) + break; + case PRV_KEY: de::uvok::badge::display_prev(); - if (pressDuration == OK_KEY) + break; + case OK_KEY: newNum = de::uvok::badge::display_refresh(); + break; + case BOOT_KEY: + de::uvok::badge::ble_advertise(); + break; + } if (newNum != UINT8_MAX) { de::uvok::badge::ble_set_image(newNum); - lastActivity = millis(); } - } - else if (pressDuration > PRESS_TIME_BLE_ADV) - { - de::uvok::badge::ble_advertise(); + lastActivity = millis(); } |