From 6a8330a43b364ac9b7410adf4157d5fe788890cb Mon Sep 17 00:00:00 2001 From: leptun Date: Fri, 30 Aug 2019 17:36:21 +0300 Subject: [PATCH] Toggle "HW Setup"* All toggles from "HW Setup" were changed. This includes: -"Nozzle d." -all "Checks" Also added an option to provide a string from sram (not from progmem) as the toggle argument. This can be useful when toggling numbers or even when toggling sheets in the future. --- Firmware/menu.cpp | 10 ++++---- Firmware/menu.h | 5 ++-- Firmware/messages.c | 7 ++++++ Firmware/messages.h | 7 ++++++ Firmware/ultralcd.cpp | 55 ++++++++++++++++++++----------------------- 5 files changed, 48 insertions(+), 36 deletions(-) diff --git a/Firmware/menu.cpp b/Firmware/menu.cpp index 7dd791b8f..33f9b7482 100755 --- a/Firmware/menu.cpp +++ b/Firmware/menu.cpp @@ -184,11 +184,11 @@ static void menu_draw_item_puts_P(char type_char, const char* str) lcd_printf_P(PSTR("%c%-18.18S%c"), menu_selection_mark(), str, type_char); } -static void menu_draw_toggle_puts_P(const char* str, const char* toggle) +static void menu_draw_toggle_puts_P(const char* str, const char* toggle, const bool fromProgmem) { menu_draw_item_puts_P((toggle == NULL)?LCD_STR_ARROW_RIGHT[0]:LCD_STR_REFRESH[0], str); - lcd_set_cursor(LCD_WIDTH - 3 - strlen_P((toggle == NULL)?_T(MSG_NA):toggle), menu_row); - lcd_printf_P(PSTR("[%S]"), (toggle == NULL)?_T(MSG_NA):toggle); + lcd_set_cursor(LCD_WIDTH - 3 - (fromProgmem?(strlen_P((toggle == NULL)?_T(MSG_NA):toggle)):(strlen(toggle))), menu_row); + lcd_printf_P(fromProgmem?PSTR("[%S]"):PSTR("[%s]"), (toggle == NULL)?_T(MSG_NA):toggle); } //! @brief Format sheet name @@ -374,11 +374,11 @@ uint8_t menu_item_function_P(const char* str, char number, void (*func)(uint8_t) return 0; } -uint8_t menu_item_toggle_P(const char* str, const char* toggle, menu_func_t func) +uint8_t menu_item_toggle_P(const char* str, const char* toggle, menu_func_t func, const bool fromProgmem) { if (menu_item == menu_line) { - if (lcd_draw_update) menu_draw_toggle_puts_P(str, toggle); + if (lcd_draw_update) menu_draw_toggle_puts_P(str, toggle, fromProgmem); if (menu_clicked && (lcd_encoder == menu_item)) { if (toggle == NULL) // print N/A warning message diff --git a/Firmware/menu.h b/Firmware/menu.h index d7676661c..d447581fd 100755 --- a/Firmware/menu.h +++ b/Firmware/menu.h @@ -118,8 +118,9 @@ extern uint8_t menu_item_function_P(const char* str, menu_func_t func); #define MENU_ITEM_FUNCTION_NR_P(str, number, func, fn_par) do { if (menu_item_function_P(str, number, func, fn_par)) return; } while (0) extern uint8_t menu_item_function_P(const char* str, char number, void (*func)(uint8_t), uint8_t fn_par); -#define MENU_ITEM_TOGGLE_P(str, toggle, func) do { if (menu_item_toggle_P(str, toggle, func)) return; } while (0) -extern uint8_t menu_item_toggle_P(const char* str, const char* toggle, menu_func_t func); +#define MENU_ITEM_TOGGLE_P(str, toggle, func) do { if (menu_item_toggle_P(str, toggle, func, true)) return; } while (0) +#define MENU_ITEM_TOGGLE(str, toggle, func) do { if (menu_item_toggle_P(str, toggle, func, false)) return; } while (0) +extern uint8_t menu_item_toggle_P(const char* str, const char* toggle, menu_func_t func, const bool fromProgmem); #define MENU_ITEM_GCODE_P(str, str_gcode) do { if (menu_item_gcode_P(str, str_gcode)) return; } while (0) extern uint8_t menu_item_gcode_P(const char* str, const char* str_gcode); diff --git a/Firmware/messages.c b/Firmware/messages.c index 111ec0b44..d5c504d72 100644 --- a/Firmware/messages.c +++ b/Firmware/messages.c @@ -107,6 +107,13 @@ const char MSG_ON[] PROGMEM_I1 = ISTR("On"); //// const char MSG_NA[] PROGMEM_I1 = ISTR("N/A"); //// const char MSG_AUTO_DEPLETE[] PROGMEM_I1 = ISTR("SpoolJoin"); //// const char MSG_CUTTER[] PROGMEM_I1 = ISTR("Cutter"); //// +const char MSG_NONE[] PROGMEM_I1 = ISTR("None"); //// +const char MSG_WARN[] PROGMEM_I1 = ISTR("Warn"); //// +const char MSG_STRICT[] PROGMEM_I1 = ISTR("Strict"); //// +const char MSG_MODEL[] PROGMEM_I1 = ISTR("Model"); //// +const char MSG_FIRMWARE[] PROGMEM_I1 = ISTR("Firmware"); //// +const char MSG_GCODE[] PROGMEM_I1 = ISTR("Gcode"); //// +const char MSG_NOZZLE_DIAMETER[] PROGMEM_I1 = ISTR("Nozzle d."); //// //not internationalized messages const char MSG_SD_WORKDIR_FAIL[] PROGMEM_N1 = "workDir open failed"; //// diff --git a/Firmware/messages.h b/Firmware/messages.h index b11517177..9c9a99ea9 100644 --- a/Firmware/messages.h +++ b/Firmware/messages.h @@ -107,6 +107,13 @@ extern const char MSG_ON[]; extern const char MSG_NA[]; extern const char MSG_AUTO_DEPLETE[]; extern const char MSG_CUTTER[]; +extern const char MSG_NONE[]; +extern const char MSG_WARN[]; +extern const char MSG_STRICT[]; +extern const char MSG_MODEL[]; +extern const char MSG_FIRMWARE[]; +extern const char MSG_GCODE[]; +extern const char MSG_NOZZLE_DIAMETER[]; //not internationalized messages extern const char MSG_BROWNOUT_RESET[]; diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index f690ea288..f4f3cceb6 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -5332,16 +5332,16 @@ do\ switch(oCheckMode)\ {\ case ClCheckMode::_None:\ - MENU_ITEM_FUNCTION_P(_i("Nozzle [none]"),lcd_check_mode_set);\ + MENU_ITEM_TOGGLE_P(_T(MSG_NOZZLE), _T(MSG_NONE), lcd_check_mode_set);\ break;\ case ClCheckMode::_Warn:\ - MENU_ITEM_FUNCTION_P(_i("Nozzle [warn]"),lcd_check_mode_set);\ + MENU_ITEM_TOGGLE_P(_T(MSG_NOZZLE), _T(MSG_WARN), lcd_check_mode_set);\ break;\ case ClCheckMode::_Strict:\ - MENU_ITEM_FUNCTION_P(_i("Nozzle [strict]"),lcd_check_mode_set);\ + MENU_ITEM_TOGGLE_P(_T(MSG_NOZZLE), _T(MSG_STRICT), lcd_check_mode_set);\ break;\ default:\ - MENU_ITEM_FUNCTION_P(_i("Nozzle [none]"),lcd_check_mode_set);\ + MENU_ITEM_TOGGLE_P(_T(MSG_NOZZLE), _T(MSG_NONE), lcd_check_mode_set);\ }\ }\ while (0) @@ -5375,20 +5375,17 @@ eeprom_update_word((uint16_t*)EEPROM_NOZZLE_DIAMETER_uM,nDiameter); #define SETTINGS_NOZZLE \ do\ {\ + char sNozzleDiam[5];/*enough for two decimals*/\ + float fNozzleDiam;\ switch(oNozzleDiameter)\ - {\ - case ClNozzleDiameter::_Diameter_250:\ - MENU_ITEM_FUNCTION_P(_i("Nozzle d. [0.25]"),lcd_nozzle_diameter_set);\ - break;\ - case ClNozzleDiameter::_Diameter_400:\ - MENU_ITEM_FUNCTION_P(_i("Nozzle d. [0.40]"),lcd_nozzle_diameter_set);\ - break;\ - case ClNozzleDiameter::_Diameter_600:\ - MENU_ITEM_FUNCTION_P(_i("Nozzle d. [0.60]"),lcd_nozzle_diameter_set);\ - break;\ - default:\ - MENU_ITEM_FUNCTION_P(_i("Nozzle d. [0.40]"),lcd_nozzle_diameter_set);\ - }\ + {\ + case ClNozzleDiameter::_Diameter_250: fNozzleDiam = 0.25f; break;\ + case ClNozzleDiameter::_Diameter_400: fNozzleDiam = 0.4f; break;\ + case ClNozzleDiameter::_Diameter_600: fNozzleDiam = 0.6f; break;\ + default: fNozzleDiam = 0.4f; break;\ + }\ + sprintf_P(sNozzleDiam, PSTR("%.2f"), fNozzleDiam);\ + MENU_ITEM_TOGGLE(_T(MSG_NOZZLE_DIAMETER), sNozzleDiam, lcd_nozzle_diameter_set);\ }\ while (0) @@ -5417,16 +5414,16 @@ do\ switch(oCheckModel)\ {\ case ClCheckModel::_None:\ - MENU_ITEM_FUNCTION_P(_i("Model [none]"),lcd_check_model_set);\ + MENU_ITEM_TOGGLE_P(_T(MSG_MODEL), _T(MSG_NONE), lcd_check_model_set);\ break;\ case ClCheckModel::_Warn:\ - MENU_ITEM_FUNCTION_P(_i("Model [warn]"),lcd_check_model_set);\ + MENU_ITEM_TOGGLE_P(_T(MSG_MODEL), _T(MSG_WARN), lcd_check_model_set);\ break;\ case ClCheckModel::_Strict:\ - MENU_ITEM_FUNCTION_P(_i("Model [strict]"),lcd_check_model_set);\ + MENU_ITEM_TOGGLE_P(_T(MSG_MODEL), _T(MSG_STRICT), lcd_check_model_set);\ break;\ default:\ - MENU_ITEM_FUNCTION_P(_i("Model [none]"),lcd_check_model_set);\ + MENU_ITEM_TOGGLE_P(_T(MSG_MODEL), _T(MSG_NONE), lcd_check_model_set);\ }\ }\ while (0) @@ -5456,16 +5453,16 @@ do\ switch(oCheckVersion)\ {\ case ClCheckVersion::_None:\ - MENU_ITEM_FUNCTION_P(_i("Firmware [none]"),lcd_check_version_set);\ + MENU_ITEM_TOGGLE_P(_T(MSG_FIRMWARE), _T(MSG_NONE), lcd_check_version_set);\ break;\ case ClCheckVersion::_Warn:\ - MENU_ITEM_FUNCTION_P(_i("Firmware [warn]"),lcd_check_version_set);\ + MENU_ITEM_TOGGLE_P(_T(MSG_FIRMWARE), _T(MSG_WARN), lcd_check_version_set);\ break;\ case ClCheckVersion::_Strict:\ - MENU_ITEM_FUNCTION_P(_i("Firmware [strict]"),lcd_check_version_set);\ + MENU_ITEM_TOGGLE_P(_T(MSG_FIRMWARE), _T(MSG_STRICT), lcd_check_version_set);\ break;\ default:\ - MENU_ITEM_FUNCTION_P(_i("Firmware [none]"),lcd_check_version_set);\ + MENU_ITEM_TOGGLE_P(_T(MSG_FIRMWARE), _T(MSG_NONE), lcd_check_version_set);\ }\ }\ while (0) @@ -5495,16 +5492,16 @@ do\ switch(oCheckGcode)\ {\ case ClCheckGcode::_None:\ - MENU_ITEM_FUNCTION_P(_i("Gcode [none]"),lcd_check_gcode_set);\ + MENU_ITEM_TOGGLE_P(_T(MSG_GCODE), _T(MSG_NONE), lcd_check_gcode_set);\ break;\ case ClCheckGcode::_Warn:\ - MENU_ITEM_FUNCTION_P(_i("Gcode [warn]"),lcd_check_gcode_set);\ + MENU_ITEM_TOGGLE_P(_T(MSG_GCODE), _T(MSG_WARN), lcd_check_gcode_set);\ break;\ case ClCheckGcode::_Strict:\ - MENU_ITEM_FUNCTION_P(_i("Gcode [strict]"),lcd_check_gcode_set);\ + MENU_ITEM_TOGGLE_P(_T(MSG_GCODE), _T(MSG_STRICT), lcd_check_gcode_set);\ break;\ default:\ - MENU_ITEM_FUNCTION_P(_i("Gcode [none]"),lcd_check_gcode_set);\ + MENU_ITEM_TOGGLE_P(_T(MSG_GCODE), _T(MSG_NONE), lcd_check_gcode_set);\ }\ }\ while (0)