summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoruvok2025-07-21 10:07:49 +0200
committeruvok2025-07-21 10:07:49 +0200
commit8befcb826878558c348e82d9d3c120ca19a5490c (patch)
treea7865bab460d3f5d3ceb400f1ba45b90e59d15fb /src
parentab8efec6002d4612b996e982c8fe17a527711991 (diff)
Remove pin 0 poilling
Diffstat (limited to 'src')
-rw-r--r--src/gpio.cpp38
-rw-r--r--src/main.cpp26
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();
}