Add cancel button event.

Signed-off-by: Pol Henarejos <pol.henarejos@cttc.es>
This commit is contained in:
Pol Henarejos
2026-06-01 01:40:31 +02:00
parent eb26a96d3b
commit 49edef1d3f
4 changed files with 19 additions and 9 deletions

View File

@@ -40,6 +40,7 @@ bool is_req_button_pending(void) {
} }
bool cancel_button = false; bool cancel_button = false;
bool touch_accept_button = false;
#if !defined(ENABLE_EMULATION) #if !defined(ENABLE_EMULATION)
#ifdef ESP_PLATFORM #ifdef ESP_PLATFORM
@@ -94,7 +95,7 @@ static bool button_pressed_state = false;
static uint32_t button_pressed_time = 0; static uint32_t button_pressed_time = 0;
static uint8_t button_press = 0; static uint8_t button_press = 0;
bool button_wait(void) { int button_wait(void) {
/* Disabled by default. As LED may not be properly configured, /* Disabled by default. As LED may not be properly configured,
it will not be possible to indicate button press unless it it will not be possible to indicate button press unless it
is commissioned. */ is commissioned. */
@@ -103,7 +104,7 @@ bool button_wait(void) {
button_timeout = phy_data.up_btn * 1000; button_timeout = phy_data.up_btn * 1000;
} }
if (button_timeout == 0) { if (button_timeout == 0) {
return false; return 0;
} }
signal_user_presence_request_data_t data = { signal_user_presence_request_data_t data = {
.timeout = button_timeout / 1000, .timeout = button_timeout / 1000,
@@ -137,14 +138,14 @@ bool button_wait(void) {
req_button_pending = false; req_button_pending = false;
if (timeout) { if (timeout) {
signal_emit(SIGNAL_USER_PRESENCE_TIMEOUT); signal_emit(SIGNAL_USER_PRESENCE_TIMEOUT);
return 1;
} }
else if (cancel_button) { else if (cancel_button) {
signal_emit(SIGNAL_USER_PRESENCE_CANCELLED); signal_emit(SIGNAL_USER_PRESENCE_CANCELLED);
return 2;
} }
else { signal_emit(SIGNAL_USER_PRESENCE_COMPLETED);
signal_emit(SIGNAL_USER_PRESENCE_COMPLETED); return 0;
}
return timeout || cancel_button;
} }
#endif #endif
@@ -170,4 +171,3 @@ void button_task(void) {
} }
#endif #endif
} }

View File

@@ -25,7 +25,9 @@
#define BOOT_PIN GPIO_NUM_0 #define BOOT_PIN GPIO_NUM_0
#endif #endif
extern bool button_wait(void); extern int button_wait(void);
extern void button_task(void); extern void button_task(void);
extern bool cancel_button;
extern bool touch_accept_button;
#endif // BUTTON_H #endif // BUTTON_H

View File

@@ -347,7 +347,14 @@ int card_status(uint8_t itf) {
} }
#ifndef ENABLE_EMULATION #ifndef ENABLE_EMULATION
else if (m == EV_PRESS_BUTTON) { else if (m == EV_PRESS_BUTTON) {
uint32_t flag = button_wait() ? EV_BUTTON_TIMEOUT : EV_BUTTON_PRESSED; int ret = button_wait();
uint32_t flag = EV_BUTTON_PRESSED;
if (ret == 1) { //timeout
flag = EV_BUTTON_TIMEOUT;
}
else if (ret == 2) { //cancelled
flag = EV_BUTTON_CANCELLED;
}
queue_try_add(&usb_to_card_q, &flag); queue_try_add(&usb_to_card_q, &flag);
} }
#endif #endif

View File

@@ -49,6 +49,7 @@
#define EV_EXIT 8 #define EV_EXIT 8
#define EV_BUTTON_TIMEOUT 16 #define EV_BUTTON_TIMEOUT 16
#define EV_BUTTON_PRESSED 32 #define EV_BUTTON_PRESSED 32
#define EV_BUTTON_CANCELLED 64
enum { ITF_INVALID = 0xFF }; enum { ITF_INVALID = 0xFF };