Add limit to scrolling of flag list in LCD gui

This commit is contained in:
Mario Hüttel 2020-11-17 00:31:24 +01:00
parent e60da5b23f
commit d176389711

View File

@ -222,6 +222,7 @@ static void reflow_menu_err_flags(struct lcd_menu *menu, enum menu_entry_func_en
static void *my_parent = NULL; static void *my_parent = NULL;
static uint8_t offset; static uint8_t offset;
static uint64_t timestamp; static uint64_t timestamp;
static bool end_of_list_reached = true;
bool state; bool state;
enum button_state push_button; enum button_state push_button;
int16_t rot; int16_t rot;
@ -232,6 +233,7 @@ static void reflow_menu_err_flags(struct lcd_menu *menu, enum menu_entry_func_en
bool try_ack = false; bool try_ack = false;
enum safety_flag flag; enum safety_flag flag;
bool button_ready; bool button_ready;
const char *err_flag_prefix = "ERR_FLAG_";
push_button = menu_get_button_state(menu); push_button = menu_get_button_state(menu);
rot = menu_get_rotary_delta(menu); rot = menu_get_rotary_delta(menu);
@ -240,6 +242,7 @@ static void reflow_menu_err_flags(struct lcd_menu *menu, enum menu_entry_func_en
if (entry_type == MENU_ENTRY_FIRST_ENTER) { if (entry_type == MENU_ENTRY_FIRST_ENTER) {
my_parent = parent; my_parent = parent;
offset = 0; offset = 0;
end_of_list_reached = true;
} }
} else { } else {
if (push_button == BUTTON_IDLE && rot == 0) { if (push_button == BUTTON_IDLE && rot == 0) {
@ -259,7 +262,8 @@ static void reflow_menu_err_flags(struct lcd_menu *menu, enum menu_entry_func_en
if (rot >= 4 || rot <= -4) { if (rot >= 4 || rot <= -4) {
menu_ack_rotary_delta(menu); menu_ack_rotary_delta(menu);
if (rot > 0) { if (rot > 0) {
offset++; if (!end_of_list_reached)
offset++;
} else { } else {
if (offset > 0) if (offset > 0)
offset--; offset--;
@ -276,16 +280,20 @@ static void reflow_menu_err_flags(struct lcd_menu *menu, enum menu_entry_func_en
if (state) { if (state) {
if (line_counter >= 0 && line_counter < 4) { if (line_counter >= 0 && line_counter < 4) {
safety_controller_get_flag_name_by_index(i, name, sizeof(name)); safety_controller_get_flag_name_by_index(i, name, sizeof(name));
if (!strncmp(name, "ERR_FLAG_", 9)) { if (!strncmp(name, err_flag_prefix, 9)) {
skip_err_flag_prefix = true; skip_err_flag_prefix = true;
} else { } else {
skip_err_flag_prefix = false; skip_err_flag_prefix = false;
} }
menu_lcd_outputf(menu, line_counter, "%s", (skip_err_flag_prefix ? &name[9] : name)); menu_lcd_outputf(menu, line_counter, "%s",
(skip_err_flag_prefix ? &name[9] : name));
} }
line_counter++; line_counter++;
} }
} }
end_of_list_reached = (line_counter > 4 ? false : true);
timestamp = systick_get_global_tick(); timestamp = systick_get_global_tick();
} }