diff --git a/stm-firmware/button.c b/stm-firmware/button.c index ec6a3fb..30939ec 100644 --- a/stm-firmware/button.c +++ b/stm-firmware/button.c @@ -29,6 +29,7 @@ static volatile uint64_t IN_SECTION(.ccm.bss) to_active_timestamp; static volatile enum button_state IN_SECTION(.ccm.bss) int_state; +static volatile enum button_state IN_SECTION(.ccm.bss) override_state; void button_init() { @@ -40,6 +41,7 @@ void button_init() to_active_timestamp = 0ULL; int_state = BUTTON_IDLE; + override_state = BUTTON_IDLE; SYSCFG->EXTICR[1] |= 0x3; EXTI->IMR |= (1U<<4); @@ -53,6 +55,12 @@ enum button_state button_read_event() uint64_t time_delta; enum button_state temp_state; + if (override_state != BUTTON_IDLE) { + temp_state = override_state; + override_state = BUTTON_IDLE; + return temp_state; + } + if (BUTTON_PORT->IDR & (1U<