From 679d4534cbde050b825e22c879594b1e061d5dd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mario=20H=C3=BCttel?= Date: Sun, 14 Jun 2020 14:45:58 +0200 Subject: [PATCH] Add formatted prinbt function for LCD menu and use systick vonversion in uptime shell command --- .../include/reflow-controller/ui/menu.h | 2 ++ stm-firmware/reflow-menu.c | 23 ++++--------------- stm-firmware/shell.c | 12 +++++++++- stm-firmware/ui/menu.c | 16 ++++++++++++- 4 files changed, 33 insertions(+), 20 deletions(-) diff --git a/stm-firmware/include/reflow-controller/ui/menu.h b/stm-firmware/include/reflow-controller/ui/menu.h index eb1f9eb..4ba3093 100644 --- a/stm-firmware/include/reflow-controller/ui/menu.h +++ b/stm-firmware/include/reflow-controller/ui/menu.h @@ -68,6 +68,8 @@ void menu_entry_enter(struct lcd_menu *menu, menu_func_t entry, bool handle_imme void menu_lcd_output(struct lcd_menu *menu, uint8_t row_num, const char *text); +void menu_lcd_outputf(struct lcd_menu *menu, uint8_t row_num, const char *format, ...); + void menu_list_display(struct menu_list *list, uint32_t top_row, uint32_t bottom_row); int16_t menu_get_rotary_delta(const struct lcd_menu *menu); diff --git a/stm-firmware/reflow-menu.c b/stm-firmware/reflow-menu.c index b1de29c..1e94aad 100644 --- a/stm-firmware/reflow-menu.c +++ b/stm-firmware/reflow-menu.c @@ -115,7 +115,6 @@ static void reflow_menu_about(struct lcd_menu *menu, enum menu_entry_func_entry uint32_t uptime_days; int16_t rot_delta; enum button_state push_button; - char buff[20]; if (entry_type == MENU_ENTRY_FIRST_ENTER) { uptime_secs = 0ULL; @@ -124,17 +123,7 @@ static void reflow_menu_about(struct lcd_menu *menu, enum menu_entry_func_entry button_ready = false; menu_display_clear(menu); menu_ack_rotary_delta(menu); -/* menu->update_display(0, LCD_SHIMATTA_STRING " Reflow"); - snprintf(buff, sizeof(buff), "%.*s", LCD_CHAR_WIDTH, xstr(GIT_VER)); - menu->update_display(1, buff); - if (strlen(xstr(GIT_VER)) > LCD_CHAR_WIDTH) { - snprintf(buff, sizeof(buff), "%s", &xstr(GIT_VER)[LCD_CHAR_WIDTH]); - menu->update_display(2, buff); - } - - menu->update_display(3, __DATE__); -*/ } - + } switch (page) { case 0: @@ -145,11 +134,9 @@ static void reflow_menu_about(struct lcd_menu *menu, enum menu_entry_func_entry break; case 1: menu_lcd_output(menu, 0, "Version Number:"); - snprintf(buff, sizeof(buff), "%.*s", LCD_CHAR_WIDTH, xstr(GIT_VER)); - menu_lcd_output(menu, 1, buff); + menu_lcd_outputf(menu, 1, "%.*s", LCD_CHAR_WIDTH, xstr(GIT_VER)); if (strlen(xstr(GIT_VER)) > LCD_CHAR_WIDTH) { - snprintf(buff, sizeof(buff), "%s", &xstr(GIT_VER)[LCD_CHAR_WIDTH]); - menu_lcd_output(menu, 2, buff); + menu_lcd_outputf(menu, 2, "%s", &xstr(GIT_VER)[LCD_CHAR_WIDTH]); } menu_lcd_output(menu, 3, "<-About Uptime->"); break; @@ -158,8 +145,8 @@ static void reflow_menu_about(struct lcd_menu *menu, enum menu_entry_func_entry if (new_uptime_secs != uptime_secs) { uptime_secs = new_uptime_secs; menu_lcd_output(menu, 0, "Uptime:"); - snprintf(buff, sizeof(buff), "%lu days %02lu:%02lu:%02lu", uptime_days, uptime_hours, uptime_mins, uptime_secs); - menu_lcd_output(menu, 1, buff); + menu_lcd_outputf(menu, 1, "%lu days %02lu:%02lu:%02lu", + uptime_days, uptime_hours, uptime_mins, uptime_secs); menu_lcd_output(menu, 3, "<-Version"); } break; diff --git a/stm-firmware/shell.c b/stm-firmware/shell.c index 2c939ac..1ed4b85 100644 --- a/stm-firmware/shell.c +++ b/stm-firmware/shell.c @@ -189,8 +189,18 @@ static shellmatta_retCode_t shell_cmd_uptime(const shellmatta_handle_t handle, { (void)arguments; (void)length; + uint32_t days; + uint32_t hours; + uint32_t mins; + uint32_t secs; - shellmatta_printf(handle, "Uptime: %llu secs", global_tick_ms/1000); + systick_get_uptime_from_tick(&days, &hours, &mins, &secs); + + shellmatta_printf(handle, "Uptime: %u day%s %02u:%02u:%02u", + days, (days == 1 ? "" : "s"), + hours, + mins, + secs); return SHELLMATTA_OK; } diff --git a/stm-firmware/ui/menu.c b/stm-firmware/ui/menu.c index cd29de9..3d41080 100644 --- a/stm-firmware/ui/menu.c +++ b/stm-firmware/ui/menu.c @@ -21,6 +21,7 @@ #include #include #include +#include void menu_handle(struct lcd_menu *menu, int16_t rotary_encoder_delta, enum button_state push_button) { @@ -96,6 +97,18 @@ void menu_lcd_output(struct lcd_menu *menu, uint8_t row_num, const char *text) menu->update_display(row_num, text); } +void menu_lcd_outputf(struct lcd_menu *menu, uint8_t row_num, const char *format, ...) +{ + char buff[64]; + va_list valist; + + va_start(valist, format); + vsnprintf(buff, sizeof(buff), format, valist); + buff[sizeof(buff) - 1] = '\0'; + menu_lcd_output(menu, row_num, buff); + va_end(valist); +} + void menu_list_display(struct menu_list *list, uint32_t top_row, uint32_t bottom_row) { uint8_t row_count; @@ -146,7 +159,8 @@ void menu_list_display(struct menu_list *list, uint32_t top_row, uint32_t bottom if (current_idx >= list->entry_count) break; - snprintf(workbuff, sizeof(workbuff), "%c%s", (current_idx == list->currently_selected ? '>' : ' '), list->entry_names[current_idx]); + snprintf(workbuff, sizeof(workbuff), "%c%s", (current_idx == list->currently_selected ? '>' : ' '), + list->entry_names[current_idx]); workbuff[sizeof(workbuff)-1] = 0; list->update_display((uint8_t)current_row, workbuff); }