Handle buttons & encoders in View, not Model

This commit is contained in:
2023-03-07 21:58:28 +01:00
parent 38d3d765ad
commit d26339e265
19 changed files with 257 additions and 165 deletions

View File

@ -0,0 +1,36 @@
#include "STWButtonController.hpp"
#include "main.h"
#include "tx_api.h"
#include "ui.h"
void STWButtonController::init() {}
bool STWButtonController::sample(uint8_t &key) {
ButtonMessage msg;
if (tx_queue_receive(&gui_button_queue, &msg, TX_NO_WAIT) == TX_SUCCESS) {
switch (msg.kind) {
case UMK_BTN_RELEASED:
key = KEY_BTN1 + msg.number;
break;
case UMK_ENC_CW: {
if (msg.number == 0) {
key = KEY_ENC1_CW;
} else {
key = KEY_ENC2_CW;
}
break;
}
case UMK_ENC_CCW:
if (msg.number == 0) {
key = KEY_ENC1_CCW;
} else {
key = KEY_ENC2_CCW;
}
}
HAL_GPIO_TogglePin(STATUS2_GPIO_Port, STATUS2_Pin);
return true;
}
return false;
}

View File

@ -25,8 +25,8 @@ void ui_thread_entry(ULONG _) {
uint32_t now = HAL_GetTick();
if (state == GPIO_PIN_RESET && now - button_change_times[i]) {
// Button release event!
UIMessage msg = {.kind = UMK_BTN_RELEASED, .number = i};
tx_queue_send(&ui_queue, &msg, TX_NO_WAIT);
ButtonMessage msg = {.kind = UMK_BTN_RELEASED, .number = i};
tx_queue_send(&gui_button_queue, &msg, TX_NO_WAIT);
}
button_change_times[i] = now;
button_states[i] = state;
@ -52,7 +52,7 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {
uint16_t pin_a, pin_b;
int idx_a, idx_b;
UIMessage msg;
ButtonMessage msg;
if (GPIO_Pin == ENC1A_Pin || GPIO_Pin == ENC1B_Pin) {
pin_a = ENC1A_Pin;
pin_b = ENC1B_Pin;
@ -92,6 +92,6 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {
// This shouldn't happen. Ignore this event.
return;
}
tx_queue_send(&ui_queue, &msg, TX_NO_WAIT);
tx_queue_send(&gui_button_queue, &msg, TX_NO_WAIT);
}
}