From 7c4f66181fa5c7e6277edfd684a333ef256611b0 Mon Sep 17 00:00:00 2001 From: Marek Bel Date: Tue, 14 May 2019 15:47:25 +0200 Subject: [PATCH 1/5] Generate menu item texts Load filament and Eject filament during runtime to conserve flash. --- Firmware/menu.cpp | 42 +++++++++++++++++++++++++++++++++++++++--- Firmware/menu.h | 3 +++ Firmware/messages.c | 3 ++- Firmware/messages.h | 1 + Firmware/mmu.cpp | 2 +- Firmware/ultralcd.cpp | 40 ++++++++++++++++------------------------ lang/lang_en.txt | 30 ------------------------------ lang/lang_en_cz.txt | 40 ---------------------------------------- lang/lang_en_de.txt | 39 --------------------------------------- lang/lang_en_es.txt | 40 ---------------------------------------- lang/lang_en_fr.txt | 40 ---------------------------------------- lang/lang_en_it.txt | 40 ---------------------------------------- lang/lang_en_pl.txt | 40 ---------------------------------------- 13 files changed, 62 insertions(+), 298 deletions(-) diff --git a/Firmware/menu.cpp b/Firmware/menu.cpp index 6467cb41..e8404354 100755 --- a/Firmware/menu.cpp +++ b/Firmware/menu.cpp @@ -168,11 +168,19 @@ int menu_draw_item_printf_P(char type_char, const char* format, ...) } */ -static int menu_draw_item_puts_P(char type_char, const char* str) +static void menu_draw_item_puts_P(char type_char, const char* str) { lcd_set_cursor(0, menu_row); - int cnt = lcd_printf_P(PSTR("%c%-18.18S%c"), (lcd_encoder == menu_item)?'>':' ', str, type_char); - return cnt; + lcd_printf_P(PSTR("%c%-18.18S%c"), (lcd_encoder == menu_item)?'>':' ', str, type_char); +} + +static int menu_draw_item_puts_P(char type_char, const char* str, char num) +{ + lcd_set_cursor(0, menu_row); + lcd_printf_P(PSTR("%c%-.16S "), (lcd_encoder == menu_item)?'>':' ', str); + lcd_putc(num); + lcd_set_cursor(19, menu_row); + lcd_putc(type_char); } /* @@ -250,6 +258,34 @@ uint8_t menu_item_function_P(const char* str, menu_func_t func) return 0; } +//! @brief Menu item function taking single parameter +//! +//! Ideal for numbered lists calling functions with number parameter. +//! @param str Item caption +//! @param number aditional character to be added after str, e.g. number +//! @param func pointer to function taking uint8_t with no return value +//! @param fn_par value to be passed to function +//! @retval 0 +//! @retval 1 Item was clicked +uint8_t menu_item_function_P(const char* str, char number, void (*func)(uint8_t), uint8_t fn_par) +{ + if (menu_item == menu_line) + { + if (lcd_draw_update) menu_draw_item_puts_P(' ', str, number); + if (menu_clicked && (lcd_encoder == menu_item)) + { + menu_clicked = false; + lcd_consume_click(); + lcd_update_enabled = 0; + if (func) func(fn_par); + lcd_update_enabled = 1; + return menu_item_ret(); + } + } + menu_item++; + return 0; +} + uint8_t menu_item_gcode_P(const char* str, const char* str_gcode) { if (menu_item == menu_line) diff --git a/Firmware/menu.h b/Firmware/menu.h index 667f8675..7ddfe3f2 100755 --- a/Firmware/menu.h +++ b/Firmware/menu.h @@ -87,6 +87,9 @@ extern uint8_t menu_item_back_P(const char* str); #define MENU_ITEM_FUNCTION_P(str, func) do { if (menu_item_function_P(str, func)) return; } while (0) 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_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 e4a24ce1..d5a10b48 100644 --- a/Firmware/messages.c +++ b/Firmware/messages.c @@ -48,8 +48,9 @@ const char MSG_HEATING_COMPLETE[] PROGMEM_I1 = ISTR("Heating done."); ////c=20 const char MSG_HOMEYZ[] PROGMEM_I1 = ISTR("Calibrate Z"); //// const char MSG_CHOOSE_EXTRUDER[] PROGMEM_I1 = ISTR("Choose extruder:"); ////c=20 r=1 const char MSG_CHOOSE_FILAMENT[] PROGMEM_I1 = ISTR("Choose filament:"); ////c=20 r=1 -const char MSG_LOAD_FILAMENT[] PROGMEM_I1 = ISTR("Load filament"); ////c=17 +const char MSG_LOAD_FILAMENT[] PROGMEM_I1 = ISTR("Load filament"); //// Number 1 to 5 is added behind text e.g. "Load filament 1" c=16 const char MSG_LOADING_FILAMENT[] PROGMEM_I1 = ISTR("Loading filament"); ////c=20 +const char MSG_EJECT_FILAMENT[] PROGMEM_I1 = ISTR("Eject filament"); //// Number 1 to 5 is added behind text e.g. "Eject filament 1" c=16 const char MSG_M117_V2_CALIBRATION[] PROGMEM_I1 = ISTR("M117 First layer cal."); ////c=25 r=1 const char MSG_MAIN[] PROGMEM_I1 = ISTR("Main"); //// const char MSG_BACK[] PROGMEM_I1 = ISTR("Back"); //// diff --git a/Firmware/messages.h b/Firmware/messages.h index 752195e9..dd6062be 100644 --- a/Firmware/messages.h +++ b/Firmware/messages.h @@ -125,6 +125,7 @@ extern const char MSG_ENDSTOP_OPEN[]; extern const char MSG_POWERUP[]; extern const char MSG_ERR_STOPPED[]; extern const char MSG_ENDSTOP_HIT[]; +extern const char MSG_EJECT_FILAMENT[]; #if defined(__cplusplus) } diff --git a/Firmware/mmu.cpp b/Firmware/mmu.cpp index ef5b021c..79bcb1b4 100644 --- a/Firmware/mmu.cpp +++ b/Firmware/mmu.cpp @@ -1353,7 +1353,7 @@ void mmu_show_warning() void lcd_mmu_load_to_nozzle(uint8_t filament_nr) { -//-// +menu_back(); bFilamentAction=false; // NOT in "mmu_load_to_nozzle_menu()" if (degHotend0() > EXTRUDE_MINTEMP) { diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index a82c347c..8f9e705f 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -5923,35 +5923,28 @@ static void fil_load_menu() MENU_BEGIN(); MENU_ITEM_BACK_P(_T(MSG_MAIN)); MENU_ITEM_FUNCTION_P(_i("Load all"), load_all);////MSG_LOAD_ALL c=17 - MENU_ITEM_FUNCTION_P(_i("Load filament 1"), extr_adj_0);////MSG_LOAD_FILAMENT_1 c=17 - MENU_ITEM_FUNCTION_P(_i("Load filament 2"), extr_adj_1);////MSG_LOAD_FILAMENT_2 c=17 - MENU_ITEM_FUNCTION_P(_i("Load filament 3"), extr_adj_2);////MSG_LOAD_FILAMENT_3 c=17 - MENU_ITEM_FUNCTION_P(_i("Load filament 4"), extr_adj_3);////MSG_LOAD_FILAMENT_4 c=17 + MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '1', extr_adj, 0);////MSG_LOAD_FILAMENT_1 c=16 + MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '2', extr_adj, 1);////MSG_LOAD_FILAMENT_2 c=17 + MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '3', extr_adj, 2);////MSG_LOAD_FILAMENT_3 c=17 + MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '4', extr_adj, 3);////MSG_LOAD_FILAMENT_4 c=17 if (mmu_enabled) - MENU_ITEM_FUNCTION_P(_i("Load filament 5"), extr_adj_4); + MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '5', extr_adj, 3); MENU_END(); } -template -static void mmu_load_to_nozzle() -{ - menu_back(); - lcd_mmu_load_to_nozzle(filament); -} - static void mmu_load_to_nozzle_menu() { if(bFilamentAction) { MENU_BEGIN(); MENU_ITEM_BACK_P(_T(MSG_MAIN)); - MENU_ITEM_FUNCTION_P(_i("Load filament 1"), mmu_load_to_nozzle<0>); - MENU_ITEM_FUNCTION_P(_i("Load filament 2"), mmu_load_to_nozzle<1>); - MENU_ITEM_FUNCTION_P(_i("Load filament 3"), mmu_load_to_nozzle<2>); - MENU_ITEM_FUNCTION_P(_i("Load filament 4"), mmu_load_to_nozzle<3>); - MENU_ITEM_FUNCTION_P(_i("Load filament 5"), mmu_load_to_nozzle<4>); + MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '1', lcd_mmu_load_to_nozzle, 0); + MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '2', lcd_mmu_load_to_nozzle, 1); + MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '3', lcd_mmu_load_to_nozzle, 2); + MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '4', lcd_mmu_load_to_nozzle, 3); + MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '5', lcd_mmu_load_to_nozzle, 4); MENU_END(); } else { @@ -5966,8 +5959,7 @@ else { } } -template -static void mmu_eject_filament() +static void mmu_eject_filament(uint8_t filament) { menu_back(); mmu_eject_filament(filament, true); @@ -5979,11 +5971,11 @@ static void mmu_fil_eject_menu() { MENU_BEGIN(); MENU_ITEM_BACK_P(_T(MSG_MAIN)); - MENU_ITEM_FUNCTION_P(_i("Eject filament 1"), mmu_eject_filament<0>); - MENU_ITEM_FUNCTION_P(_i("Eject filament 2"), mmu_eject_filament<1>); - MENU_ITEM_FUNCTION_P(_i("Eject filament 3"), mmu_eject_filament<2>); - MENU_ITEM_FUNCTION_P(_i("Eject filament 4"), mmu_eject_filament<3>); - MENU_ITEM_FUNCTION_P(_i("Eject filament 5"), mmu_eject_filament<4>); + MENU_ITEM_FUNCTION_NR_P(_T(MSG_EJECT_FILAMENT), '1', mmu_eject_filament, 0); + MENU_ITEM_FUNCTION_NR_P(_T(MSG_EJECT_FILAMENT), '2', mmu_eject_filament, 1); + MENU_ITEM_FUNCTION_NR_P(_T(MSG_EJECT_FILAMENT), '3', mmu_eject_filament, 2); + MENU_ITEM_FUNCTION_NR_P(_T(MSG_EJECT_FILAMENT), '4', mmu_eject_filament, 3); + MENU_ITEM_FUNCTION_NR_P(_T(MSG_EJECT_FILAMENT), '5', mmu_eject_filament, 4); MENU_END(); } else diff --git a/lang/lang_en.txt b/lang/lang_en.txt index dedc258d..3de507cb 100644 --- a/lang/lang_en.txt +++ b/lang/lang_en.txt @@ -166,21 +166,6 @@ #MSG_EJECT_FILAMENT c=17 r=1 "Eject filament" -#MSG_EJECT_FILAMENT1 c=17 r=1 -"Eject filament 1" - -#MSG_EJECT_FILAMENT2 c=17 r=1 -"Eject filament 2" - -#MSG_EJECT_FILAMENT3 c=17 r=1 -"Eject filament 3" - -#MSG_EJECT_FILAMENT4 c=17 r=1 -"Eject filament 4" - -#MSG_EJECT_FILAMENT5 c=17 r=1 -"Eject filament 5" - # "Eject" @@ -928,35 +913,20 @@ #MSG_LOAD_ALL c=17 "Load all" -#MSG_LOAD_FILAMENT_1 c=17 -"Load filament 1" - # "XYZ calibration failed. Bed calibration point was not found." # "XYZ calibration failed. Front calibration points not reachable." -#MSG_LOAD_FILAMENT_2 c=17 -"Load filament 2" - # "XYZ calibration failed. Right front calibration point not reachable." -#MSG_LOAD_FILAMENT_3 c=17 -"Load filament 3" - # "Y distance from min" # "Y-correct" -#MSG_LOAD_FILAMENT_4 c=17 -"Load filament 4" - -#MSG_LOAD_FILAMENT_5 c=17 -"Load filament 5" - #MSG_OFF " [off]" diff --git a/lang/lang_en_cz.txt b/lang/lang_en_cz.txt index 51d16f56..9db15b02 100644 --- a/lang/lang_en_cz.txt +++ b/lang/lang_en_cz.txt @@ -222,26 +222,6 @@ "Eject filament" "Vysunout filament" -#MSG_EJECT_FILAMENT1 c=17 r=1 -"Eject filament 1" -"Vysunout filament 1" - -#MSG_EJECT_FILAMENT2 c=17 r=1 -"Eject filament 2" -"Vysunout filament 2" - -#MSG_EJECT_FILAMENT3 c=17 r=1 -"Eject filament 3" -"Vysunout filament 3" - -#MSG_EJECT_FILAMENT4 c=17 r=1 -"Eject filament 4" -"Vysunout filament 4" - -#MSG_EJECT_FILAMENT5 c=17 r=1 -"Eject filament 5" -"Vysunout filament 5" - # "Eject" "Vysunout" @@ -1238,10 +1218,6 @@ "Load all" "Zavest vse" -#MSG_LOAD_FILAMENT_1 c=17 -"Load filament 1" -"Zavest filament 1" - # "XYZ calibration failed. Bed calibration point was not found." "Kalibrace XYZ selhala. Kalibracni bod podlozky nenalezen." @@ -1250,18 +1226,10 @@ "XYZ calibration failed. Front calibration points not reachable." "Kalibrace XYZ selhala. Predni kalibracni body moc vpredu. Srovnejte tiskarnu." -#MSG_LOAD_FILAMENT_2 c=17 -"Load filament 2" -"Zavest filament 2" - # "XYZ calibration failed. Right front calibration point not reachable." "Kalibrace XYZ selhala. Pravy predni bod moc vpredu. Srovnejte tiskarnu." -#MSG_LOAD_FILAMENT_3 c=17 -"Load filament 3" -"Zavest filament 3" - # "Y distance from min" "Y vzdalenost od min" @@ -1270,14 +1238,6 @@ "Y-correct" "Korekce Y" -#MSG_LOAD_FILAMENT_4 c=17 -"Load filament 4" -"Zavest filament 4" - -#MSG_LOAD_FILAMENT_5 c=17 -"Load filament 5" -"Zavest filament 5" - #MSG_OFF " [off]" "\x00" diff --git a/lang/lang_en_de.txt b/lang/lang_en_de.txt index 48da055f..66995f4e 100644 --- a/lang/lang_en_de.txt +++ b/lang/lang_en_de.txt @@ -222,26 +222,6 @@ "Eject filament" "Filamentauswurf" -#MSG_EJECT_FILAMENT1 c=17 r=1 -"Eject filament 1" -"Filamentauswurf 1" - -#MSG_EJECT_FILAMENT2 c=17 r=1 -"Eject filament 2" -"Fil.2 auswerfen" - -#MSG_EJECT_FILAMENT3 c=17 r=1 -"Eject filament 3" -"Fil.3 auswerfen" - -#MSG_EJECT_FILAMENT4 c=17 r=1 -"Eject filament 4" -"Fil.4 auswerfen" - -#MSG_EJECT_FILAMENT5 c=17 r=1 -"Eject filament 5" -"Fil.5 auswerfen" - # "Eject" "Auswurf" @@ -1238,10 +1218,6 @@ "Load all" "Alle laden" -#MSG_LOAD_FILAMENT_1 c=17 -"Load filament 1" -"Filament 1 laden" - # "XYZ calibration failed. Bed calibration point was not found." "XYZ-Kalibrierung fehlgeschlagen. Bett-Kalibrierpunkt nicht gefunden." @@ -1250,17 +1226,10 @@ "XYZ calibration failed. Front calibration points not reachable." "XYZ-Kalibrierung fehlgeschlagen. Vordere Kalibrierpunkte nicht erreichbar." -#MSG_LOAD_FILAMENT_2 c=17 -"Load filament 2" -"Filament 2 laden" - # "XYZ calibration failed. Right front calibration point not reachable." "XYZ-Kalibrierung fehlgeschlagen. Rechter vorderer Kalibrierpunkt ist nicht erreichbar." -#MSG_LOAD_FILAMENT_3 c=17 -"Load filament 3" -"Filament 3 laden" # "Y distance from min" @@ -1270,14 +1239,6 @@ "Y-correct" "Y-Korrektur" -#MSG_LOAD_FILAMENT_4 c=17 -"Load filament 4" -"Filament 4 laden" - -#MSG_LOAD_FILAMENT_5 c=17 -"Load filament 5" -"Filament 5 laden" - #MSG_OFF " [off]" "\x00" diff --git a/lang/lang_en_es.txt b/lang/lang_en_es.txt index 3d8b17dc..05757313 100644 --- a/lang/lang_en_es.txt +++ b/lang/lang_en_es.txt @@ -222,26 +222,6 @@ "Eject filament" "Expulsar filamento" -#MSG_EJECT_FILAMENT1 c=17 r=1 -"Eject filament 1" -"Expulsar filamento 1" - -#MSG_EJECT_FILAMENT2 c=17 r=1 -"Eject filament 2" -"Expulsar filamento 2" - -#MSG_EJECT_FILAMENT3 c=17 r=1 -"Eject filament 3" -"Expulsar filamento 3" - -#MSG_EJECT_FILAMENT4 c=17 r=1 -"Eject filament 4" -"Expulsar filamento 4" - -#MSG_EJECT_FILAMENT5 c=17 r=1 -"Eject filament 5" -"Expulsar filamento 5" - # "Eject" "Expulsar" @@ -1238,10 +1218,6 @@ "Load all" "Intr. todos fil." -#MSG_LOAD_FILAMENT_1 c=17 -"Load filament 1" -"Introducir fil. 1" - # "XYZ calibration failed. Bed calibration point was not found." "Calibracion XYZ fallada. Puntos de calibracion en la base no encontrados." @@ -1250,18 +1226,10 @@ "XYZ calibration failed. Front calibration points not reachable." "Calibracion XYZ fallada. Puntos frontales no alcanzables." -#MSG_LOAD_FILAMENT_2 c=17 -"Load filament 2" -"Introducir fil. 2" - # "XYZ calibration failed. Right front calibration point not reachable." "Calibracion XYZ fallad. Punto frontal derecho no alcanzable." -#MSG_LOAD_FILAMENT_3 c=17 -"Load filament 3" -"Introducir fil. 3" - # "Y distance from min" "Distancia en Y desde el min" @@ -1270,14 +1238,6 @@ "Y-correct" "Y-correcion" -#MSG_LOAD_FILAMENT_4 c=17 -"Load filament 4" -"Introducir fil. 4" - -#MSG_LOAD_FILAMENT_5 c=17 -"Load filament 5" -"Cargar filamento 5" - #MSG_OFF " [off]" "\x00" diff --git a/lang/lang_en_fr.txt b/lang/lang_en_fr.txt index 7e91c029..9dd3d489 100644 --- a/lang/lang_en_fr.txt +++ b/lang/lang_en_fr.txt @@ -222,26 +222,6 @@ "Eject filament" "Ejecter le fil." -#MSG_EJECT_FILAMENT1 c=17 r=1 -"Eject filament 1" -"Ejecter fil. 1" - -#MSG_EJECT_FILAMENT2 c=17 r=1 -"Eject filament 2" -"Ejecter fil. 2" - -#MSG_EJECT_FILAMENT3 c=17 r=1 -"Eject filament 3" -"Ejecter fil. 3" - -#MSG_EJECT_FILAMENT4 c=17 r=1 -"Eject filament 4" -"Ejecter fil. 4" - -#MSG_EJECT_FILAMENT5 c=17 r=1 -"Eject filament 5" -"Ejecter fil. 5" - # "Eject" "Ejecter" @@ -1238,10 +1218,6 @@ "Load all" "Tout charger" -#MSG_LOAD_FILAMENT_1 c=17 -"Load filament 1" -"Charger fil. 1" - # "XYZ calibration failed. Bed calibration point was not found." "Echec calibration XYZ. Le point de calibration du plateau n'a pas ete trouve." @@ -1250,18 +1226,10 @@ "XYZ calibration failed. Front calibration points not reachable." "Echec calibration XYZ. Les points de calibration avant ne sont pas atteignables." -#MSG_LOAD_FILAMENT_2 c=17 -"Load filament 2" -"Charger fil. 2" - # "XYZ calibration failed. Right front calibration point not reachable." "Echec calibration XYZ. Le point de calibration avant droit n'est pas atteignable." -#MSG_LOAD_FILAMENT_3 c=17 -"Load filament 3" -"Charger fil. 3" - # "Y distance from min" "Distance Y du min" @@ -1270,14 +1238,6 @@ "Y-correct" "Correction-Y" -#MSG_LOAD_FILAMENT_4 c=17 -"Load filament 4" -"Charger fil. 4" - -#MSG_LOAD_FILAMENT_5 c=17 -"Load filament 5" -"Charger fil. 5" - #MSG_OFF " [off]" "\x00" diff --git a/lang/lang_en_it.txt b/lang/lang_en_it.txt index 12a12fa9..45bddac7 100644 --- a/lang/lang_en_it.txt +++ b/lang/lang_en_it.txt @@ -222,26 +222,6 @@ "Eject filament" "Espelli filamento " -#MSG_EJECT_FILAMENT1 c=17 r=1 -"Eject filament 1" -"Espelli filamento 1" - -#MSG_EJECT_FILAMENT2 c=17 r=1 -"Eject filament 2" -"Espellere filamento 2" - -#MSG_EJECT_FILAMENT3 c=17 r=1 -"Eject filament 3" -"Espelli filamento 3" - -#MSG_EJECT_FILAMENT4 c=17 r=1 -"Eject filament 4" -"Espellere filamento 4" - -#MSG_EJECT_FILAMENT5 c=17 r=1 -"Eject filament 5" -"Espelli filamento 5" - # "Eject" "Espellere" @@ -1238,10 +1218,6 @@ "Load all" "Caricare tutti" -#MSG_LOAD_FILAMENT_1 c=17 -"Load filament 1" -"Caricare fil. 1" - # "XYZ calibration failed. Bed calibration point was not found." "Calibrazione XYZ fallita. Il punto di calibrazione sul letto non e' stato trovato." @@ -1250,18 +1226,10 @@ "XYZ calibration failed. Front calibration points not reachable." "Calibrazione XYZ fallita. Punti anteriori non raggiungibili." -#MSG_LOAD_FILAMENT_2 c=17 -"Load filament 2" -"Caricare fil. 2" - # "XYZ calibration failed. Right front calibration point not reachable." "Calibrazione XYZ fallita. Punto anteriore destro non raggiungibile." -#MSG_LOAD_FILAMENT_3 c=17 -"Load filament 3" -"Carica fil. 3" - # "Y distance from min" "Distanza Y dal min" @@ -1270,14 +1238,6 @@ "Y-correct" "Correzione-Y" -#MSG_LOAD_FILAMENT_4 c=17 -"Load filament 4" -"Caricare fil. 4" - -#MSG_LOAD_FILAMENT_5 c=17 -"Load filament 5" -"Caricare fil. 5" - #MSG_OFF " [off]" "\x00" diff --git a/lang/lang_en_pl.txt b/lang/lang_en_pl.txt index bdac8819..d0937dd8 100644 --- a/lang/lang_en_pl.txt +++ b/lang/lang_en_pl.txt @@ -222,26 +222,6 @@ "Eject filament" "Wysun filament" -#MSG_EJECT_FILAMENT1 c=17 r=1 -"Eject filament 1" -"Wysun filament 1" - -#MSG_EJECT_FILAMENT2 c=17 r=1 -"Eject filament 2" -"Wysun filament 2" - -#MSG_EJECT_FILAMENT3 c=17 r=1 -"Eject filament 3" -"Wysun filament 3" - -#MSG_EJECT_FILAMENT4 c=17 r=1 -"Eject filament 4" -"Wysun filament 4" - -#MSG_EJECT_FILAMENT5 c=17 r=1 -"Eject filament 5" -"Wysun filament 5" - # "Eject" "Wysun" @@ -1238,10 +1218,6 @@ "Load all" "Zalad. wszystkie" -#MSG_LOAD_FILAMENT_1 c=17 -"Load filament 1" -"Zaladuj fil. 1" - # "XYZ calibration failed. Bed calibration point was not found." "Kalibracja XYZ nieudana. Nie znaleziono punktow kalibracyjnych." @@ -1250,18 +1226,10 @@ "XYZ calibration failed. Front calibration points not reachable." "Kalibr. XYZ nieudana. Przednie punkty kalibr. nieosiagalne. Nalezy poprawic montaz drukarki." -#MSG_LOAD_FILAMENT_2 c=17 -"Load filament 2" -"Zaladuj fil. 2" - # "XYZ calibration failed. Right front calibration point not reachable." "Kalibr. XYZ nieudana. Prawy przedni punkt nieosiagalny. Nalezy poprawic montaz drukarki." -#MSG_LOAD_FILAMENT_3 c=17 -"Load filament 3" -"Zaladuj fil. 3" - # "Y distance from min" "Dystans od 0 w osi Y" @@ -1270,14 +1238,6 @@ "Y-correct" "Korekcja Y" -#MSG_LOAD_FILAMENT_4 c=17 -"Load filament 4" -"Zaladuj fil. 4" - -#MSG_LOAD_FILAMENT_5 c=17 -"Load filament 5" -"Laduj filament 5" - #MSG_OFF " [off]" "\x00" From 6495a8fa5874f4166c505c93e47032275115954b Mon Sep 17 00:00:00 2001 From: Marek Bel Date: Tue, 14 May 2019 16:10:04 +0200 Subject: [PATCH 2/5] Decrease flash reserved for secondary language. --- Firmware/config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Firmware/config.h b/Firmware/config.h index faf4b7b0..a712839b 100644 --- a/Firmware/config.h +++ b/Firmware/config.h @@ -49,7 +49,7 @@ //#define LANG_MODE 0 // primary language only #define LANG_MODE 1 // sec. language support -#define LANG_SIZE_RESERVED 0x2900 // reserved space for secondary language (10496 bytes) +#define LANG_SIZE_RESERVED 0x2800 // reserved space for secondary language (10240 bytes) #endif //_CONFIG_H From 150787efbd7b0f470425521b272efd1bce1d5aca Mon Sep 17 00:00:00 2001 From: Marek Bel Date: Tue, 14 May 2019 16:25:29 +0200 Subject: [PATCH 3/5] Generate menu item texts Cut filament during runtime to conserve flash. --- Firmware/messages.c | 1 + Firmware/messages.h | 1 + Firmware/mmu.cpp | 1 + Firmware/ultralcd.cpp | 16 +++++----------- 4 files changed, 8 insertions(+), 11 deletions(-) diff --git a/Firmware/messages.c b/Firmware/messages.c index d5a10b48..53ec20e8 100644 --- a/Firmware/messages.c +++ b/Firmware/messages.c @@ -51,6 +51,7 @@ const char MSG_CHOOSE_FILAMENT[] PROGMEM_I1 = ISTR("Choose filament:"); ////c=20 const char MSG_LOAD_FILAMENT[] PROGMEM_I1 = ISTR("Load filament"); //// Number 1 to 5 is added behind text e.g. "Load filament 1" c=16 const char MSG_LOADING_FILAMENT[] PROGMEM_I1 = ISTR("Loading filament"); ////c=20 const char MSG_EJECT_FILAMENT[] PROGMEM_I1 = ISTR("Eject filament"); //// Number 1 to 5 is added behind text e.g. "Eject filament 1" c=16 +const char MSG_CUT_FILAMENT[] PROGMEM_I1 = ISTR("Cut filament"); //// Number 1 to 5 is added behind text e.g. "Cut filament 1" c=16 const char MSG_M117_V2_CALIBRATION[] PROGMEM_I1 = ISTR("M117 First layer cal."); ////c=25 r=1 const char MSG_MAIN[] PROGMEM_I1 = ISTR("Main"); //// const char MSG_BACK[] PROGMEM_I1 = ISTR("Back"); //// diff --git a/Firmware/messages.h b/Firmware/messages.h index dd6062be..d74412fc 100644 --- a/Firmware/messages.h +++ b/Firmware/messages.h @@ -126,6 +126,7 @@ extern const char MSG_POWERUP[]; extern const char MSG_ERR_STOPPED[]; extern const char MSG_ENDSTOP_HIT[]; extern const char MSG_EJECT_FILAMENT[]; +extern const char MSG_CUT_FILAMENT[]; #if defined(__cplusplus) } diff --git a/Firmware/mmu.cpp b/Firmware/mmu.cpp index 79bcb1b4..68e36cbc 100644 --- a/Firmware/mmu.cpp +++ b/Firmware/mmu.cpp @@ -1387,6 +1387,7 @@ bFilamentAction=false; // NOT in "mmu_load_to_nozzle_ #ifdef MMU_HAS_CUTTER void mmu_cut_filament(uint8_t filament_nr) { + menu_back(); bFilamentAction=false; // NOT in "mmu_load_to_nozzle_menu()" if (degHotend0() > EXTRUDE_MINTEMP) { diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 8f9e705f..632a7798 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -5992,12 +5992,6 @@ static void mmu_fil_eject_menu() } #ifdef MMU_HAS_CUTTER -template -static void mmu_cut_filament() -{ - menu_back(); - mmu_cut_filament(filament); -} static void mmu_cut_filament_menu() { @@ -6005,11 +5999,11 @@ if(bFilamentAction) { MENU_BEGIN(); MENU_ITEM_BACK_P(_T(MSG_MAIN)); - MENU_ITEM_FUNCTION_P(_i("Cut filament 1"), mmu_cut_filament<0>); - MENU_ITEM_FUNCTION_P(_i("Cut filament 2"), mmu_cut_filament<1>); - MENU_ITEM_FUNCTION_P(_i("Cut filament 3"), mmu_cut_filament<2>); - MENU_ITEM_FUNCTION_P(_i("Cut filament 4"), mmu_cut_filament<3>); - MENU_ITEM_FUNCTION_P(_i("Cut filament 5"), mmu_cut_filament<4>); + MENU_ITEM_FUNCTION_NR_P(_T(MSG_EJECT_FILAMENT), 1, mmu_cut_filament, 0); + MENU_ITEM_FUNCTION_NR_P(_T(MSG_EJECT_FILAMENT), 2, mmu_cut_filament, 1); + MENU_ITEM_FUNCTION_NR_P(_T(MSG_EJECT_FILAMENT), 3, mmu_cut_filament, 2); + MENU_ITEM_FUNCTION_NR_P(_T(MSG_EJECT_FILAMENT), 4, mmu_cut_filament, 3); + MENU_ITEM_FUNCTION_NR_P(_T(MSG_EJECT_FILAMENT), 5, mmu_cut_filament, 4); MENU_END(); } else { From 4de93ca19ce5afd83f3cd3c0d224d56791338390 Mon Sep 17 00:00:00 2001 From: Marek Bel Date: Tue, 14 May 2019 16:43:33 +0200 Subject: [PATCH 4/5] Fix eject filament menu items numbering. --- Firmware/ultralcd.cpp | 68 +++++++++++++++++++++---------------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 632a7798..d793c7ee 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -5920,43 +5920,43 @@ static void lcd_disable_farm_mode() static void fil_load_menu() { - MENU_BEGIN(); - MENU_ITEM_BACK_P(_T(MSG_MAIN)); + MENU_BEGIN(); + MENU_ITEM_BACK_P(_T(MSG_MAIN)); MENU_ITEM_FUNCTION_P(_i("Load all"), load_all);////MSG_LOAD_ALL c=17 MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '1', extr_adj, 0);////MSG_LOAD_FILAMENT_1 c=16 MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '2', extr_adj, 1);////MSG_LOAD_FILAMENT_2 c=17 MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '3', extr_adj, 2);////MSG_LOAD_FILAMENT_3 c=17 MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '4', extr_adj, 3);////MSG_LOAD_FILAMENT_4 c=17 - if (mmu_enabled) - MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '5', extr_adj, 3); + if (mmu_enabled) + MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '5', extr_adj, 3); - MENU_END(); + MENU_END(); } static void mmu_load_to_nozzle_menu() { if(bFilamentAction) { - MENU_BEGIN(); - MENU_ITEM_BACK_P(_T(MSG_MAIN)); - MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '1', lcd_mmu_load_to_nozzle, 0); - MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '2', lcd_mmu_load_to_nozzle, 1); - MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '3', lcd_mmu_load_to_nozzle, 2); - MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '4', lcd_mmu_load_to_nozzle, 3); - MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '5', lcd_mmu_load_to_nozzle, 4); - MENU_END(); + MENU_BEGIN(); + MENU_ITEM_BACK_P(_T(MSG_MAIN)); + MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '1', lcd_mmu_load_to_nozzle, 0); + MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '2', lcd_mmu_load_to_nozzle, 1); + MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '3', lcd_mmu_load_to_nozzle, 2); + MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '4', lcd_mmu_load_to_nozzle, 3); + MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '5', lcd_mmu_load_to_nozzle, 4); + MENU_END(); } else { eFilamentAction=e_FILAMENT_ACTION_mmuLoad; bFilamentFirstRun=false; if(target_temperature[0]>=EXTRUDE_MINTEMP) - { + { bFilamentPreheatState=true; mFilamentItem(target_temperature[0],target_temperature_bed); - } - else mFilamentMenu(); - } + } + else mFilamentMenu(); + } } static void mmu_eject_filament(uint8_t filament) @@ -5997,25 +5997,25 @@ static void mmu_cut_filament_menu() { if(bFilamentAction) { - MENU_BEGIN(); - MENU_ITEM_BACK_P(_T(MSG_MAIN)); - MENU_ITEM_FUNCTION_NR_P(_T(MSG_EJECT_FILAMENT), 1, mmu_cut_filament, 0); - MENU_ITEM_FUNCTION_NR_P(_T(MSG_EJECT_FILAMENT), 2, mmu_cut_filament, 1); - MENU_ITEM_FUNCTION_NR_P(_T(MSG_EJECT_FILAMENT), 3, mmu_cut_filament, 2); - MENU_ITEM_FUNCTION_NR_P(_T(MSG_EJECT_FILAMENT), 4, mmu_cut_filament, 3); - MENU_ITEM_FUNCTION_NR_P(_T(MSG_EJECT_FILAMENT), 5, mmu_cut_filament, 4); - MENU_END(); + MENU_BEGIN(); + MENU_ITEM_BACK_P(_T(MSG_MAIN)); + MENU_ITEM_FUNCTION_NR_P(_T(MSG_EJECT_FILAMENT), '1', mmu_cut_filament, 0); + MENU_ITEM_FUNCTION_NR_P(_T(MSG_EJECT_FILAMENT), '2', mmu_cut_filament, 1); + MENU_ITEM_FUNCTION_NR_P(_T(MSG_EJECT_FILAMENT), '3', mmu_cut_filament, 2); + MENU_ITEM_FUNCTION_NR_P(_T(MSG_EJECT_FILAMENT), '4', mmu_cut_filament, 3); + MENU_ITEM_FUNCTION_NR_P(_T(MSG_EJECT_FILAMENT), '5', mmu_cut_filament, 4); + MENU_END(); } else { - eFilamentAction=e_FILAMENT_ACTION_mmuCut; - bFilamentFirstRun=false; - if(target_temperature[0]>=EXTRUDE_MINTEMP) - { - bFilamentPreheatState=true; - mFilamentItem(target_temperature[0],target_temperature_bed); - } - else mFilamentMenu(); - } + eFilamentAction=e_FILAMENT_ACTION_mmuCut; + bFilamentFirstRun=false; + if(target_temperature[0]>=EXTRUDE_MINTEMP) + { + bFilamentPreheatState=true; + mFilamentItem(target_temperature[0],target_temperature_bed); + } + else mFilamentMenu(); + } } #endif //MMU_HAS_CUTTER From 66d20f0297112066a1eff074d311208d2bf99509 Mon Sep 17 00:00:00 2001 From: Marek Bel Date: Tue, 14 May 2019 16:45:15 +0200 Subject: [PATCH 5/5] Fix code formatting (indentation). --- Firmware/mmu.cpp | 59 ++++++++++++++++++++++--------------------- Firmware/ultralcd.cpp | 53 ++++++++++++++++++++------------------ 2 files changed, 58 insertions(+), 54 deletions(-) diff --git a/Firmware/mmu.cpp b/Firmware/mmu.cpp index 68e36cbc..78356432 100644 --- a/Firmware/mmu.cpp +++ b/Firmware/mmu.cpp @@ -1353,35 +1353,36 @@ void mmu_show_warning() void lcd_mmu_load_to_nozzle(uint8_t filament_nr) { -menu_back(); -bFilamentAction=false; // NOT in "mmu_load_to_nozzle_menu()" - if (degHotend0() > EXTRUDE_MINTEMP) - { - tmp_extruder = filament_nr; - lcd_update_enable(false); - lcd_clear(); - lcd_set_cursor(0, 1); lcd_puts_P(_T(MSG_LOADING_FILAMENT)); - lcd_print(" "); - lcd_print(tmp_extruder + 1); - mmu_command(MmuCmd::T0 + tmp_extruder); - manage_response(true, true, MMU_TCODE_MOVE); - mmu_continue_loading(false); - mmu_extruder = tmp_extruder; //filament change is finished - mmu_load_to_nozzle(); - load_filament_final_feed(); - st_synchronize(); - custom_message_type = CUSTOM_MSG_TYPE_F_LOAD; - lcd_setstatuspgm(_T(MSG_LOADING_FILAMENT)); - lcd_return_to_status(); - lcd_update_enable(true); - lcd_load_filament_color_check(); - lcd_setstatuspgm(_T(WELCOME_MSG)); - custom_message_type = CUSTOM_MSG_TYPE_STATUS; - } - else - { - show_preheat_nozzle_warning(); - } + menu_back(); + bFilamentAction = false; // NOT in "mmu_load_to_nozzle_menu()" + if (degHotend0() > EXTRUDE_MINTEMP) + { + tmp_extruder = filament_nr; + lcd_update_enable(false); + lcd_clear(); + lcd_set_cursor(0, 1); + lcd_puts_P(_T(MSG_LOADING_FILAMENT)); + lcd_print(" "); + lcd_print(tmp_extruder + 1); + mmu_command(MmuCmd::T0 + tmp_extruder); + manage_response(true, true, MMU_TCODE_MOVE); + mmu_continue_loading(false); + mmu_extruder = tmp_extruder; //filament change is finished + mmu_load_to_nozzle(); + load_filament_final_feed(); + st_synchronize(); + custom_message_type = CUSTOM_MSG_TYPE_F_LOAD; + lcd_setstatuspgm(_T(MSG_LOADING_FILAMENT)); + lcd_return_to_status(); + lcd_update_enable(true); + lcd_load_filament_color_check(); + lcd_setstatuspgm(_T(WELCOME_MSG)); + custom_message_type = CUSTOM_MSG_TYPE_STATUS; + } + else + { + show_preheat_nozzle_warning(); + } } #ifdef MMU_HAS_CUTTER diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index d793c7ee..5fc74c38 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -5922,22 +5922,23 @@ static void fil_load_menu() { MENU_BEGIN(); MENU_ITEM_BACK_P(_T(MSG_MAIN)); - MENU_ITEM_FUNCTION_P(_i("Load all"), load_all);////MSG_LOAD_ALL c=17 - MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '1', extr_adj, 0);////MSG_LOAD_FILAMENT_1 c=16 - MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '2', extr_adj, 1);////MSG_LOAD_FILAMENT_2 c=17 - MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '3', extr_adj, 2);////MSG_LOAD_FILAMENT_3 c=17 - MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '4', extr_adj, 3);////MSG_LOAD_FILAMENT_4 c=17 + MENU_ITEM_FUNCTION_P(_i("Load all"), load_all); ////MSG_LOAD_ALL c=17 + MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '1', extr_adj, 0); ////MSG_LOAD_FILAMENT_1 c=16 + MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '2', extr_adj, 1); ////MSG_LOAD_FILAMENT_2 c=17 + MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '3', extr_adj, 2); ////MSG_LOAD_FILAMENT_3 c=17 + MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '4', extr_adj, 3); ////MSG_LOAD_FILAMENT_4 c=17 if (mmu_enabled) + { MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '5', extr_adj, 3); - + } MENU_END(); } static void mmu_load_to_nozzle_menu() { -if(bFilamentAction) -{ + if (bFilamentAction) + { MENU_BEGIN(); MENU_ITEM_BACK_P(_T(MSG_MAIN)); MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '1', lcd_mmu_load_to_nozzle, 0); @@ -5946,14 +5947,15 @@ if(bFilamentAction) MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '4', lcd_mmu_load_to_nozzle, 3); MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '5', lcd_mmu_load_to_nozzle, 4); MENU_END(); -} -else { - eFilamentAction=e_FILAMENT_ACTION_mmuLoad; - bFilamentFirstRun=false; - if(target_temperature[0]>=EXTRUDE_MINTEMP) + } + else { - bFilamentPreheatState=true; - mFilamentItem(target_temperature[0],target_temperature_bed); + eFilamentAction = e_FILAMENT_ACTION_mmuLoad; + bFilamentFirstRun = false; + if (target_temperature[0] >= EXTRUDE_MINTEMP) + { + bFilamentPreheatState = true; + mFilamentItem(target_temperature[0], target_temperature_bed); } else mFilamentMenu(); } @@ -5967,7 +5969,7 @@ static void mmu_eject_filament(uint8_t filament) static void mmu_fil_eject_menu() { - if(bFilamentAction) + if (bFilamentAction) { MENU_BEGIN(); MENU_ITEM_BACK_P(_T(MSG_MAIN)); @@ -5980,12 +5982,12 @@ static void mmu_fil_eject_menu() } else { - eFilamentAction=e_FILAMENT_ACTION_mmuEject; - bFilamentFirstRun=false; - if(target_temperature[0]>=EXTRUDE_MINTEMP) + eFilamentAction = e_FILAMENT_ACTION_mmuEject; + bFilamentFirstRun = false; + if (target_temperature[0] >= EXTRUDE_MINTEMP) { - bFilamentPreheatState=true; - mFilamentItem(target_temperature[0],target_temperature_bed); + bFilamentPreheatState = true; + mFilamentItem(target_temperature[0], target_temperature_bed); } else mFilamentMenu(); } @@ -5995,8 +5997,8 @@ static void mmu_fil_eject_menu() static void mmu_cut_filament_menu() { -if(bFilamentAction) -{ + if(bFilamentAction) + { MENU_BEGIN(); MENU_ITEM_BACK_P(_T(MSG_MAIN)); MENU_ITEM_FUNCTION_NR_P(_T(MSG_EJECT_FILAMENT), '1', mmu_cut_filament, 0); @@ -6005,8 +6007,9 @@ if(bFilamentAction) MENU_ITEM_FUNCTION_NR_P(_T(MSG_EJECT_FILAMENT), '4', mmu_cut_filament, 3); MENU_ITEM_FUNCTION_NR_P(_T(MSG_EJECT_FILAMENT), '5', mmu_cut_filament, 4); MENU_END(); -} -else { + } + else + { eFilamentAction=e_FILAMENT_ACTION_mmuCut; bFilamentFirstRun=false; if(target_temperature[0]>=EXTRUDE_MINTEMP)