update buttons
This commit is contained in:
parent
0913466808
commit
d4bb9ab825
@ -7,11 +7,13 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define NUM_BUTTONS 7
|
#define NUM_BUTTONS 9
|
||||||
#define NUM_ENCS 2
|
#define NUM_ENCS 2
|
||||||
#define BUTTON_MIN_INTERVAL 50 // ms
|
#define BUTTON_MIN_INTERVAL 50 // ms
|
||||||
#define ENC_MAX_PHASE 50 // ms
|
#define ENC_MAX_PHASE 50 // ms
|
||||||
|
|
||||||
|
#define DRS_BUTTON_IDX (8)
|
||||||
|
|
||||||
typedef enum { UMK_BTN_PRESSED, UMK_ENC_CW, UMK_ENC_CCW } ButtonMessageKind;
|
typedef enum { UMK_BTN_PRESSED, UMK_ENC_CW, UMK_ENC_CCW } ButtonMessageKind;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -11,16 +11,17 @@
|
|||||||
#include "vehicle.h"
|
#include "vehicle.h"
|
||||||
#include "vehicle_state.h"
|
#include "vehicle_state.h"
|
||||||
|
|
||||||
#define DRS_BUTTON_IDX (6)
|
|
||||||
#define DRS_PRESS_WAIT_CYCLES (10)
|
#define DRS_PRESS_WAIT_CYCLES (10)
|
||||||
static int drs_press_buf_cycles = 0;
|
static int drs_press_buf_cycles = 0;
|
||||||
|
|
||||||
void ui_thread_entry(ULONG _) {
|
void ui_thread_entry(ULONG _) {
|
||||||
GPIO_TypeDef *button_ports[NUM_BUTTONS] = {BTN1_GPIO_Port, BTN2_GPIO_Port,
|
GPIO_TypeDef *button_ports[NUM_BUTTONS] = {
|
||||||
BTN3_GPIO_Port, BTN4_GPIO_Port,
|
BTN1_GPIO_Port, BTN2_GPIO_Port, BTN3_GPIO_Port,
|
||||||
BTN5_GPIO_Port, BTN6_GPIO_Port, SW_DRS_GPIO_Port};
|
BTN4_GPIO_Port, BTN5_GPIO_Port, BTN6_GPIO_Port,
|
||||||
|
BTN7_GPIO_Port, BTN8_GPIO_Port, SW_DRS_GPIO_Port};
|
||||||
uint16_t button_pins[NUM_BUTTONS] = {BTN1_Pin, BTN2_Pin, BTN3_Pin,
|
uint16_t button_pins[NUM_BUTTONS] = {BTN1_Pin, BTN2_Pin, BTN3_Pin,
|
||||||
BTN4_Pin, BTN5_Pin, BTN6_Pin, SW_DRS_Pin};
|
BTN4_Pin, BTN5_Pin, BTN6_Pin,
|
||||||
|
BTN7_Pin, BTN8_Pin, SW_DRS_Pin};
|
||||||
GPIO_PinState button_states[NUM_BUTTONS] = {GPIO_PIN_RESET};
|
GPIO_PinState button_states[NUM_BUTTONS] = {GPIO_PIN_RESET};
|
||||||
uint32_t button_press_times[NUM_BUTTONS] = {HAL_GetTick()};
|
uint32_t button_press_times[NUM_BUTTONS] = {HAL_GetTick()};
|
||||||
|
|
||||||
@ -28,8 +29,11 @@ void ui_thread_entry(ULONG _) {
|
|||||||
int press_event = -1;
|
int press_event = -1;
|
||||||
for (int i = 0; i < NUM_BUTTONS; i++) {
|
for (int i = 0; i < NUM_BUTTONS; i++) {
|
||||||
GPIO_PinState state = HAL_GPIO_ReadPin(button_ports[i], button_pins[i]);
|
GPIO_PinState state = HAL_GPIO_ReadPin(button_ports[i], button_pins[i]);
|
||||||
|
// if button state changed (newly pressed or released)
|
||||||
if (state != button_states[i]) {
|
if (state != button_states[i]) {
|
||||||
uint32_t now = HAL_GetTick();
|
uint32_t now = HAL_GetTick();
|
||||||
|
// if button is pressed and last press was at least BUTTON_MIN_INTERVAL
|
||||||
|
// ago
|
||||||
if (state == GPIO_PIN_SET &&
|
if (state == GPIO_PIN_SET &&
|
||||||
now - button_press_times[i] >= BUTTON_MIN_INTERVAL) {
|
now - button_press_times[i] >= BUTTON_MIN_INTERVAL) {
|
||||||
// Button press event!
|
// Button press event!
|
||||||
@ -41,11 +45,9 @@ void ui_thread_entry(ULONG _) {
|
|||||||
button_states[i] = state;
|
button_states[i] = state;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// FIXME: The right button doesn't work :(
|
|
||||||
|
|
||||||
// if ((press_event == 1 || press_event == 2) && button_states[1] &&
|
// if button 4 (left encoder) is pressed, change to next screen
|
||||||
// button_states[2]) {
|
if (press_event == 4 && button_states[4]) {
|
||||||
if (press_event == 1 && button_states[1]) {
|
|
||||||
tx_event_flags_set(&gui_update_events, GUI_UPDATE_NEXT_SCREEN, TX_OR);
|
tx_event_flags_set(&gui_update_events, GUI_UPDATE_NEXT_SCREEN, TX_OR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -95,9 +95,8 @@ void vehicle_broadcast_param(ParamType param, int32_t value) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void vehicle_broadcast_buttons(GPIO_PinState *button_states) {
|
void vehicle_broadcast_buttons(GPIO_PinState *button_states) {
|
||||||
uint8_t data = (button_states[0] << 2) | (button_states[1] << 0) |
|
uint8_t data = (button_states[DRS_BUTTON_IDX] << 0) |
|
||||||
(button_states[2] << 1) | (button_states[3] << 3) |
|
(button_states[6] << 1) | (button_states[7] << 2);
|
||||||
(button_states[6] << 4);
|
|
||||||
ftcan_transmit(CAN_ID_STW_BUTTONS, &data, 1);
|
ftcan_transmit(CAN_ID_STW_BUTTONS, &data, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user