From 524121141ab1168dffb33b40e2582c7602164236 Mon Sep 17 00:00:00 2001 From: Marek Bel Date: Wed, 19 Jun 2019 15:54:24 +0200 Subject: [PATCH 01/16] Remove commented out code. This code is of unknown genesis and purpose. It was added in commit "3.0.10 sync" two years ago and it was already commented out in that moment. --- Firmware/ultralcd.cpp | 49 ------------------------------------------- 1 file changed, 49 deletions(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 608b8c29..52e5988d 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -6321,55 +6321,6 @@ static void lcd_main_menu() MENU_ITEM_FUNCTION_P(PSTR("recover print"), recover_print); MENU_ITEM_FUNCTION_P(PSTR("power panic"), uvlo_); #endif //TMC2130_DEBUG - - /* if (farm_mode && !IS_SD_PRINTING ) - { - - int tempScrool = 0; - if (lcd_draw_update == 0 && LCD_CLICKED == 0) - //_delay(100); - return; // nothing to do (so don't thrash the SD card) - uint16_t fileCnt = card.getnrfilenames(); - - card.getWorkDirName(); - if (card.filename[0] == '/') - { -#if SDCARDDETECT == -1 - MENU_ITEM_FUNCTION_P(_T(MSG_REFRESH), lcd_sd_refresh); -#endif - } else { - MENU_ITEM_FUNCTION_P(PSTR(LCD_STR_FOLDER ".."), lcd_sd_updir); - } - - for (uint16_t i = 0; i < fileCnt; i++) - { - if (menu_item == menu_line) - { -#ifndef SDCARD_RATHERRECENTFIRST - card.getfilename(i); -#else - card.getfilename(fileCnt - 1 - i); -#endif - if (card.filenameIsDir) - { - MENU_ITEM_SDDIR(_T(MSG_CARD_MENU), card.filename, card.longFilename); - } else { - - MENU_ITEM_SDFILE(_T(MSG_CARD_MENU), card.filename, card.longFilename); - - - - - } - } else { - MENU_ITEM_DUMMY(); - } - } - - MENU_ITEM_BACK_P(PSTR("- - - - - - - - -")); - - - }*/ if ( ( IS_SD_PRINTING || is_usb_printing || (lcd_commands_type == LcdCommands::Layer1Cal)) && (current_position[Z_AXIS] < Z_HEIGHT_HIDE_LIVE_ADJUST_MENU) && !homing_flag && !mesh_bed_leveling_flag) { From 46a5f8328350cd87a62492c348f93e565ec5d780 Mon Sep 17 00:00:00 2001 From: Marek Bel Date: Wed, 19 Jun 2019 18:30:12 +0200 Subject: [PATCH 02/16] Disable language check warnings of type "[W]: No display definition on line". Those warnings were masking all other much more useful build process output. --- lang/lang-build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lang/lang-build.sh b/lang/lang-build.sh index e528ff94..b8c2476e 100755 --- a/lang/lang-build.sh +++ b/lang/lang-build.sh @@ -82,7 +82,7 @@ generate_binary() rm -f lang_$1.dat LNG=$1 #check lang dictionary - /usr/bin/env python lang-check.py $1 + /usr/bin/env python lang-check.py $1 --no-warning #create lang_xx.tmp - different processing for 'en' language if [ "$1" = "en" ]; then #remove comments and empty lines From 0a48082609f2252f49ae1dadd2ee4c12bb43cdf9 Mon Sep 17 00:00:00 2001 From: Marek Bel Date: Thu, 20 Jun 2019 16:40:53 +0200 Subject: [PATCH 03/16] Add steel sheet profile selector. --- Firmware/Marlin_main.cpp | 16 +++++++++++++++- Firmware/eeprom.h | 26 ++++++++++++++++++++++++-- Firmware/menu.cpp | 26 ++++++++++++++++++++++++++ Firmware/menu.h | 5 +++++ Firmware/ultralcd.cpp | 15 +++++++++++++++ 5 files changed, 85 insertions(+), 3 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index c8f5feb6..ddb9b203 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -1076,6 +1076,7 @@ void setup() SERIAL_ECHO_START; printf_P(PSTR(" " FW_VERSION_FULL "\n")); + //SERIAL_ECHOPAIR("Active sheet before:", static_cast(eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)))); #ifdef DEBUG_SEC_LANG lang_table_header_t header; @@ -1437,6 +1438,20 @@ void setup() if (eeprom_read_word((uint16_t*)EEPROM_MMU_LOAD_FAIL_TOT) == 0xffff) eeprom_update_word((uint16_t *)EEPROM_MMU_LOAD_FAIL_TOT, 0); if (eeprom_read_byte((uint8_t*)EEPROM_MMU_FAIL) == 0xff) eeprom_update_byte((uint8_t *)EEPROM_MMU_FAIL, 0); if (eeprom_read_byte((uint8_t*)EEPROM_MMU_LOAD_FAIL) == 0xff) eeprom_update_byte((uint8_t *)EEPROM_MMU_LOAD_FAIL, 0); + if (eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)) == 0xff) eeprom_update_byte(&(EEPROM_Sheets_base->active_sheet), 0); + for (uint_least8_t i = 0; i < (sizeof(Sheets::s)/sizeof(Sheets::s[0])); ++i) + { + bool is_uninitialized = true; + for (uint_least8_t j = 0; j < (sizeof(Sheet::name)/sizeof(Sheet::name[0])); ++j) + { + if (0xff != eeprom_read_byte(&(EEPROM_Sheets_base->s[i].name[j]))) is_uninitialized = false; + } + if(is_uninitialized) + { + eeprom_write_byte(&(EEPROM_Sheets_base->s[i].name[0]), i + '1'); + eeprom_write_byte(&(EEPROM_Sheets_base->s[i].name[1]), '\0'); + } + } #ifdef SNMM if (eeprom_read_dword((uint32_t*)EEPROM_BOWDEN_LENGTH) == 0x0ffffffff) { //bowden length used for SNMM @@ -1650,7 +1665,6 @@ void setup() #ifdef WATCHDOG wdt_enable(WDTO_4S); #endif //WATCHDOG - } diff --git a/Firmware/eeprom.h b/Firmware/eeprom.h index f8f944c6..989f6a39 100644 --- a/Firmware/eeprom.h +++ b/Firmware/eeprom.h @@ -1,6 +1,8 @@ #ifndef EEPROM_H #define EEPROM_H +#include + // The total size of the EEPROM is // 4096 for the Atmega2560 #define EEPROM_TOP 4096 @@ -167,8 +169,28 @@ #define EEPROM_NOZZLE_DIAMETER (EEPROM_CHECK_MODE-1) // uint8 #define EEPROM_NOZZLE_DIAMETER_uM (EEPROM_NOZZLE_DIAMETER-2) // uint16 +typedef struct +{ + char name[7]; +} Sheet; + +typedef struct +{ + Sheet s[3]; + uint8_t active_sheet; +} Sheets; +// sizeof(Sheets). Do not change it unless EEPROM_Sheets_base is last item in EEPROM. +// Otherwise it would move following items. +#define EEPROM_SHEETS_SIZEOF 22 + +static Sheets * const EEPROM_Sheets_base = (Sheets*)(EEPROM_NOZZLE_DIAMETER - EEPROM_SHEETS_SIZEOF); + +#ifdef __cplusplus +static_assert(sizeof(Sheets) == EEPROM_SHEETS_SIZEOF, "Sizeof(Sheets) is not EEPROM_SHEETS_SIZEOF."); +#endif + //This is supposed to point to last item to allow EEPROM overrun check. Please update when adding new items. -#define EEPROM_LAST_ITEM EEPROM_NOZZLE_DIAMETER_uM +#define EEPROM_LAST_ITEM ((uint16_t)EEPROM_Sheets_base) // !!!!! // !!!!! this is end of EEPROM section ... all updates MUST BE inserted before this mark !!!!! @@ -189,7 +211,7 @@ #ifdef __cplusplus #include "ConfigurationStore.h" static_assert(EEPROM_FIRMWARE_VERSION_END < 20, "Firmware version EEPROM address conflicts with EEPROM_M500_base"); -static M500_conf * const EEPROM_M500_base = reinterpret_cast(20); //offset for storing settings using M500 +static constexpr M500_conf * const EEPROM_M500_base = reinterpret_cast(20); //offset for storing settings using M500 static_assert(((sizeof(M500_conf) + 20) < EEPROM_LAST_ITEM), "M500_conf address space conflicts with previous items."); #endif diff --git a/Firmware/menu.cpp b/Firmware/menu.cpp index e0364056..71ddd1ba 100755 --- a/Firmware/menu.cpp +++ b/Firmware/menu.cpp @@ -174,6 +174,17 @@ static void menu_draw_item_puts_P(char type_char, const char* str) lcd_printf_P(PSTR("%c%-18.18S%c"), (lcd_encoder == menu_item)?'>':' ', str, type_char); } +static void menu_draw_item_puts_P(char type_char, const char *str_P, const Sheet &sheet) +{ + lcd_set_cursor(0, menu_row); + char buffer[19]; + uint_least8_t index = sprintf_P(buffer, PSTR("%.10S "), str_P); + eeprom_read_block(&(buffer[index]), sheet.name, 7); + index += 7; + buffer[index] = '\0'; + lcd_printf_P(PSTR("%c%-18.18s%c"), (lcd_encoder == menu_item)?'>':' ', buffer, type_char); +} + static void menu_draw_item_puts_P(char type_char, const char* str, char num) { lcd_set_cursor(0, menu_row); @@ -224,6 +235,21 @@ uint8_t menu_item_submenu_P(const char* str, menu_func_t submenu) return 0; } +uint8_t menu_item_submenu_P(const char* str_P, const Sheet &sheet, menu_func_t submenu) +{ + if (menu_item == menu_line) + { + if (lcd_draw_update) menu_draw_item_puts_P(LCD_STR_ARROW_RIGHT[0], str_P, sheet); + if (menu_clicked && (lcd_encoder == menu_item)) + { + menu_submenu(submenu); + return menu_item_ret(); + } + } + menu_item++; + return 0; +} + uint8_t menu_item_back_P(const char* str) { if (menu_item == menu_line) diff --git a/Firmware/menu.h b/Firmware/menu.h index 5f73e18b..1e425287 100755 --- a/Firmware/menu.h +++ b/Firmware/menu.h @@ -3,6 +3,7 @@ #define _MENU_H #include +#include "eeprom.h" #define MENU_DATA_SIZE 32 @@ -99,6 +100,10 @@ extern uint8_t menu_item_text_P(const char* str); #define MENU_ITEM_SUBMENU_P(str, submenu) do { if (menu_item_submenu_P(str, submenu)) return; } while (0) extern uint8_t menu_item_submenu_P(const char* str, menu_func_t submenu); +#define MENU_ITEM_SUBMENU_P_E(str_P, eeprom_address_7b, submenu) do { if (menu_item_submenu_P(str_P, eeprom_address_7b, submenu)) return; } while (0) +extern uint8_t menu_item_submenu_P(const char *str_P, const Sheet &sheet, menu_func_t submenu); + + #define MENU_ITEM_BACK_P(str) do { if (menu_item_back_P(str)) return; } while (0) extern uint8_t menu_item_back_P(const char* str); diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 52e5988d..b057af50 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -6300,6 +6300,15 @@ void lcd_resume_print() isPrintPaused = false; } +static void lcd_sheet_menu() +{ + uint_least8_t sheet_index = eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)); + sheet_index++; + if (sheet_index >= (sizeof(Sheets::s)/sizeof(Sheets::s[0]))) sheet_index = 0; + eeprom_update_byte(&(EEPROM_Sheets_base->active_sheet), sheet_index); + menu_back(); +} + static void lcd_main_menu() { @@ -6334,8 +6343,14 @@ static void lcd_main_menu() } else { MENU_ITEM_SUBMENU_P(_i("Preheat"), lcd_preheat_menu);////MSG_PREHEAT + do + { + if (menu_item_submenu_P(_i("Sheet"), EEPROM_Sheets_base->s[(eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)))], lcd_sheet_menu)) return; + } while (0); } + + #ifdef SDSUPPORT if (card.cardOK || lcd_commands_type == LcdCommands::Layer1Cal) { From 19a474eaa5298cf2aceae713daeaf0fa38bf1870 Mon Sep 17 00:00:00 2001 From: Marek Bel Date: Thu, 20 Jun 2019 18:00:29 +0200 Subject: [PATCH 04/16] Fix compiler warnings. --- Firmware/Marlin_main.cpp | 29 +--------------- Firmware/eeprom.cpp | 74 ++++++++++++++++++++++++++++++++++++++++ Firmware/eeprom.h | 2 ++ 3 files changed, 77 insertions(+), 28 deletions(-) create mode 100644 Firmware/eeprom.cpp diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index ddb9b203..bbf5bae0 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -1425,34 +1425,7 @@ void setup() printf_P(PSTR("Card NG!\n")); #endif //DEBUG_SD_SPEED_TEST - if (eeprom_read_byte((uint8_t*)EEPROM_POWER_COUNT) == 0xff) eeprom_write_byte((uint8_t*)EEPROM_POWER_COUNT, 0); - if (eeprom_read_byte((uint8_t*)EEPROM_CRASH_COUNT_X) == 0xff) eeprom_write_byte((uint8_t*)EEPROM_CRASH_COUNT_X, 0); - if (eeprom_read_byte((uint8_t*)EEPROM_CRASH_COUNT_Y) == 0xff) eeprom_write_byte((uint8_t*)EEPROM_CRASH_COUNT_Y, 0); - if (eeprom_read_byte((uint8_t*)EEPROM_FERROR_COUNT) == 0xff) eeprom_write_byte((uint8_t*)EEPROM_FERROR_COUNT, 0); - if (eeprom_read_word((uint16_t*)EEPROM_POWER_COUNT_TOT) == 0xffff) eeprom_write_word((uint16_t*)EEPROM_POWER_COUNT_TOT, 0); - if (eeprom_read_word((uint16_t*)EEPROM_CRASH_COUNT_X_TOT) == 0xffff) eeprom_write_word((uint16_t*)EEPROM_CRASH_COUNT_X_TOT, 0); - if (eeprom_read_word((uint16_t*)EEPROM_CRASH_COUNT_Y_TOT) == 0xffff) eeprom_write_word((uint16_t*)EEPROM_CRASH_COUNT_Y_TOT, 0); - if (eeprom_read_word((uint16_t*)EEPROM_FERROR_COUNT_TOT) == 0xffff) eeprom_write_word((uint16_t*)EEPROM_FERROR_COUNT_TOT, 0); - - if (eeprom_read_word((uint16_t*)EEPROM_MMU_FAIL_TOT) == 0xffff) eeprom_update_word((uint16_t *)EEPROM_MMU_FAIL_TOT, 0); - if (eeprom_read_word((uint16_t*)EEPROM_MMU_LOAD_FAIL_TOT) == 0xffff) eeprom_update_word((uint16_t *)EEPROM_MMU_LOAD_FAIL_TOT, 0); - if (eeprom_read_byte((uint8_t*)EEPROM_MMU_FAIL) == 0xff) eeprom_update_byte((uint8_t *)EEPROM_MMU_FAIL, 0); - if (eeprom_read_byte((uint8_t*)EEPROM_MMU_LOAD_FAIL) == 0xff) eeprom_update_byte((uint8_t *)EEPROM_MMU_LOAD_FAIL, 0); - if (eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)) == 0xff) eeprom_update_byte(&(EEPROM_Sheets_base->active_sheet), 0); - for (uint_least8_t i = 0; i < (sizeof(Sheets::s)/sizeof(Sheets::s[0])); ++i) - { - bool is_uninitialized = true; - for (uint_least8_t j = 0; j < (sizeof(Sheet::name)/sizeof(Sheet::name[0])); ++j) - { - if (0xff != eeprom_read_byte(&(EEPROM_Sheets_base->s[i].name[j]))) is_uninitialized = false; - } - if(is_uninitialized) - { - eeprom_write_byte(&(EEPROM_Sheets_base->s[i].name[0]), i + '1'); - eeprom_write_byte(&(EEPROM_Sheets_base->s[i].name[1]), '\0'); - } - } - + eeprom_init(); #ifdef SNMM if (eeprom_read_dword((uint32_t*)EEPROM_BOWDEN_LENGTH) == 0x0ffffffff) { //bowden length used for SNMM int _z = BOWDEN_LENGTH; diff --git a/Firmware/eeprom.cpp b/Firmware/eeprom.cpp new file mode 100644 index 00000000..74c086fa --- /dev/null +++ b/Firmware/eeprom.cpp @@ -0,0 +1,74 @@ +//! @file +//! @date Jun 20, 2019 +//! @author Marek Běl + +#include "eeprom.h" + +#include +#include + +#if 0 +template +static T eeprom_read(T *address); + +template<> +char eeprom_read(char *address) +{ + return eeprom_read_byte(reinterpret_cast(address)); +} +#endif + +template +static void eeprom_write(T *address, T value); + +template<> +void eeprom_write(char *addres, char value) +{ + eeprom_write_byte(reinterpret_cast(addres), static_cast(value)); +} + + +template +static bool eeprom_is_uninitialized(T *address); + +template <> +bool eeprom_is_uninitialized(char *address) +{ + return (0xff == eeprom_read_byte(reinterpret_cast(address))); +} + +void eeprom_init() +{ + if (eeprom_read_byte((uint8_t*)EEPROM_POWER_COUNT) == 0xff) eeprom_write_byte((uint8_t*)EEPROM_POWER_COUNT, 0); + if (eeprom_read_byte((uint8_t*)EEPROM_CRASH_COUNT_X) == 0xff) eeprom_write_byte((uint8_t*)EEPROM_CRASH_COUNT_X, 0); + if (eeprom_read_byte((uint8_t*)EEPROM_CRASH_COUNT_Y) == 0xff) eeprom_write_byte((uint8_t*)EEPROM_CRASH_COUNT_Y, 0); + if (eeprom_read_byte((uint8_t*)EEPROM_FERROR_COUNT) == 0xff) eeprom_write_byte((uint8_t*)EEPROM_FERROR_COUNT, 0); + if (eeprom_read_word((uint16_t*)EEPROM_POWER_COUNT_TOT) == 0xffff) eeprom_write_word((uint16_t*)EEPROM_POWER_COUNT_TOT, 0); + if (eeprom_read_word((uint16_t*)EEPROM_CRASH_COUNT_X_TOT) == 0xffff) eeprom_write_word((uint16_t*)EEPROM_CRASH_COUNT_X_TOT, 0); + if (eeprom_read_word((uint16_t*)EEPROM_CRASH_COUNT_Y_TOT) == 0xffff) eeprom_write_word((uint16_t*)EEPROM_CRASH_COUNT_Y_TOT, 0); + if (eeprom_read_word((uint16_t*)EEPROM_FERROR_COUNT_TOT) == 0xffff) eeprom_write_word((uint16_t*)EEPROM_FERROR_COUNT_TOT, 0); + + if (eeprom_read_word((uint16_t*)EEPROM_MMU_FAIL_TOT) == 0xffff) eeprom_update_word((uint16_t *)EEPROM_MMU_FAIL_TOT, 0); + if (eeprom_read_word((uint16_t*)EEPROM_MMU_LOAD_FAIL_TOT) == 0xffff) eeprom_update_word((uint16_t *)EEPROM_MMU_LOAD_FAIL_TOT, 0); + if (eeprom_read_byte((uint8_t*)EEPROM_MMU_FAIL) == 0xff) eeprom_update_byte((uint8_t *)EEPROM_MMU_FAIL, 0); + if (eeprom_read_byte((uint8_t*)EEPROM_MMU_LOAD_FAIL) == 0xff) eeprom_update_byte((uint8_t *)EEPROM_MMU_LOAD_FAIL, 0); + if (eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)) == 0xff) eeprom_update_byte(&(EEPROM_Sheets_base->active_sheet), 0); + for (uint_least8_t i = 0; i < (sizeof(Sheets::s)/sizeof(Sheets::s[0])); ++i) + { + bool is_uninitialized = true; + for (uint_least8_t j = 0; j < (sizeof(Sheet::name)/sizeof(Sheet::name[0])); ++j) + { + if (!eeprom_is_uninitialized(&(EEPROM_Sheets_base->s[i].name[j]))) is_uninitialized = false; + } + if(is_uninitialized) + { + eeprom_write(&(EEPROM_Sheets_base->s[i].name[0]), static_cast(i + '1')); + eeprom_write(&(EEPROM_Sheets_base->s[i].name[1]), '\0'); + } + } + +} + + + + diff --git a/Firmware/eeprom.h b/Firmware/eeprom.h index 989f6a39..4b16c81b 100644 --- a/Firmware/eeprom.h +++ b/Firmware/eeprom.h @@ -3,6 +3,8 @@ #include +void eeprom_init(); + // The total size of the EEPROM is // 4096 for the Atmega2560 #define EEPROM_TOP 4096 From e6fbac08ed8a76b457854db80afb129443bbb123 Mon Sep 17 00:00:00 2001 From: Marek Bel Date: Fri, 21 Jun 2019 15:44:56 +0200 Subject: [PATCH 05/16] Move sheet selector to submenu. --- Firmware/menu.h | 2 +- Firmware/messages.c | 1 + Firmware/messages.h | 1 + Firmware/ultralcd.cpp | 41 ++++++++++++++++++++++++++++++++--------- 4 files changed, 35 insertions(+), 10 deletions(-) diff --git a/Firmware/menu.h b/Firmware/menu.h index 1e425287..e7e42b68 100755 --- a/Firmware/menu.h +++ b/Firmware/menu.h @@ -100,7 +100,7 @@ extern uint8_t menu_item_text_P(const char* str); #define MENU_ITEM_SUBMENU_P(str, submenu) do { if (menu_item_submenu_P(str, submenu)) return; } while (0) extern uint8_t menu_item_submenu_P(const char* str, menu_func_t submenu); -#define MENU_ITEM_SUBMENU_P_E(str_P, eeprom_address_7b, submenu) do { if (menu_item_submenu_P(str_P, eeprom_address_7b, submenu)) return; } while (0) +#define MENU_ITEM_SUBMENU_P_E(str_P, sheet, submenu) do { if (menu_item_submenu_P(str_P, sheet, submenu)) return; } while (0) extern uint8_t menu_item_submenu_P(const char *str_P, const Sheet &sheet, menu_func_t submenu); diff --git a/Firmware/messages.c b/Firmware/messages.c index 53ec20e8..804b0f50 100644 --- a/Firmware/messages.c +++ b/Firmware/messages.c @@ -55,6 +55,7 @@ const char MSG_CUT_FILAMENT[] PROGMEM_I1 = ISTR("Cut filament"); //// Number 1 t 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"); //// +const char MSG_SHEET[] PROGMEM_I1 = ISTR("Sheet"); ////c=10 const char MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE1[] PROGMEM_I1 = ISTR("Measuring reference height of calibration point"); ////c=60 const char MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE2[] PROGMEM_I1 = ISTR(" of 9"); ////c=14 const char MSG_MENU_CALIBRATION[] PROGMEM_I1 = ISTR("Calibration"); //// diff --git a/Firmware/messages.h b/Firmware/messages.h index d74412fc..bbfc1065 100644 --- a/Firmware/messages.h +++ b/Firmware/messages.h @@ -54,6 +54,7 @@ extern const char MSG_LOADING_FILAMENT[]; extern const char MSG_M117_V2_CALIBRATION[]; extern const char MSG_MAIN[]; extern const char MSG_BACK[]; +extern const char MSG_SHEET[]; extern const char MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE1[]; extern const char MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE2[]; extern const char MSG_MENU_CALIBRATION[]; diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index b057af50..f37f5565 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -6300,13 +6300,39 @@ void lcd_resume_print() isPrintPaused = false; } +static void lcd_select_sheet_0_menu() +{ + eeprom_update_byte(&(EEPROM_Sheets_base->active_sheet), 0); + menu_back(3); +} +static void lcd_select_sheet_1_menu() +{ + eeprom_update_byte(&(EEPROM_Sheets_base->active_sheet), 1); + menu_back(3); +} +static void lcd_select_sheet_2_menu() +{ + eeprom_update_byte(&(EEPROM_Sheets_base->active_sheet), 2); + menu_back(3); +} + +static void lcd_select_sheet_menu() +{ + MENU_BEGIN(); + MENU_ITEM_BACK_P(_T(MSG_SHEET)); + MENU_ITEM_SUBMENU_P_E(_T(MSG_SHEET), EEPROM_Sheets_base->s[0], lcd_select_sheet_0_menu); + MENU_ITEM_SUBMENU_P_E(_T(MSG_SHEET), EEPROM_Sheets_base->s[1], lcd_select_sheet_1_menu); + MENU_ITEM_SUBMENU_P_E(_T(MSG_SHEET), EEPROM_Sheets_base->s[2], lcd_select_sheet_2_menu); + MENU_END(); +} + static void lcd_sheet_menu() { - uint_least8_t sheet_index = eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)); - sheet_index++; - if (sheet_index >= (sizeof(Sheets::s)/sizeof(Sheets::s[0]))) sheet_index = 0; - eeprom_update_byte(&(EEPROM_Sheets_base->active_sheet), sheet_index); - menu_back(); + MENU_BEGIN(); + MENU_ITEM_BACK_P(_T(MSG_MAIN)); + MENU_ITEM_SUBMENU_P(_i("Select"), lcd_select_sheet_menu); + + MENU_END(); } static void lcd_main_menu() @@ -6343,10 +6369,7 @@ static void lcd_main_menu() } else { MENU_ITEM_SUBMENU_P(_i("Preheat"), lcd_preheat_menu);////MSG_PREHEAT - do - { - if (menu_item_submenu_P(_i("Sheet"), EEPROM_Sheets_base->s[(eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)))], lcd_sheet_menu)) return; - } while (0); + MENU_ITEM_SUBMENU_P_E(_T(MSG_SHEET), EEPROM_Sheets_base->s[(eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)))], lcd_sheet_menu); } From b67ec501b4a8af76bd889d9e398abc32bcc6b428 Mon Sep 17 00:00:00 2001 From: Marek Bel Date: Mon, 24 Jun 2019 17:11:13 +0200 Subject: [PATCH 06/16] Add rename sheet menu. --- Firmware/ultralcd.cpp | 47 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index f37f5565..db1f043b 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -6326,11 +6326,56 @@ static void lcd_select_sheet_menu() MENU_END(); } +static void lcd_rename_sheet_menu() +{ + struct MenuData + { + bool initialized; + uint8_t selected; + char name[sizeof(Sheet::name)]; + }; + static_assert(sizeof(menu_data)>= sizeof(MenuData),"MenuData doesn't fit into menu_data"); + MenuData* menuData = (MenuData*)&(menu_data[0]); + + if (!menuData->initialized) + { + eeprom_read_block(menuData->name, EEPROM_Sheets_base->s[(eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)))].name, sizeof(Sheet::name)); + lcd_encoder = menuData->name[0]; + menuData->initialized = true; + } + if (lcd_encoder < '\x20') lcd_encoder = '\x20'; + if (lcd_encoder > '\x7F') lcd_encoder = '\x7F'; + + menuData->name[menuData->selected] = lcd_encoder; + lcd_set_cursor(0,0); + for (uint_least8_t i = 0; i < sizeof(Sheet::name); ++i) + { + lcd_putc(menuData->name[i]); + } + lcd_set_cursor(menuData->selected, 1); + lcd_putc('^'); + if (lcd_clicked()) + { + if ((menuData->selected + 1u) < sizeof(Sheet::name)) + { + lcd_encoder = menuData->name[++(menuData->selected)]; + } + else + { + eeprom_update_block(menuData->name, + EEPROM_Sheets_base->s[(eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)))].name, + sizeof(Sheet::name)); + menu_back(); + } + } +} + static void lcd_sheet_menu() { MENU_BEGIN(); MENU_ITEM_BACK_P(_T(MSG_MAIN)); - MENU_ITEM_SUBMENU_P(_i("Select"), lcd_select_sheet_menu); + MENU_ITEM_SUBMENU_P(_i("Select"), lcd_select_sheet_menu); //// c=18 + MENU_ITEM_SUBMENU_P(_i("Rename"), lcd_rename_sheet_menu); //// c=18 MENU_END(); } From ebdeb991341c7857968808ee8d45891e9fcc03db Mon Sep 17 00:00:00 2001 From: Marek Bel Date: Tue, 25 Jun 2019 18:55:25 +0200 Subject: [PATCH 07/16] Add menu to show sheet live adjust Z value. --- Firmware/messages.c | 2 +- Firmware/ultralcd.cpp | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Firmware/messages.c b/Firmware/messages.c index 804b0f50..5f30a54a 100644 --- a/Firmware/messages.c +++ b/Firmware/messages.c @@ -10,7 +10,7 @@ //internationalized messages const char MSG_AUTO_HOME[] PROGMEM_I1 = ISTR("Auto home"); //// const char MSG_AUTO_MODE_ON[] PROGMEM_I1 = ISTR("Mode [auto power]"); //// -const char MSG_BABYSTEP_Z[] PROGMEM_I1 = ISTR("Live adjust Z"); //// +const char MSG_BABYSTEP_Z[] PROGMEM_I1 = ISTR("Live adjust Z"); //// c=18 const char MSG_BABYSTEP_Z_NOT_SET[] PROGMEM_I1 = ISTR("Distance between tip of the nozzle and the bed surface has not been set yet. Please follow the manual, chapter First steps, section First layer calibration."); ////c=20 r=12 const char MSG_BED[] PROGMEM_I1 = ISTR("Bed"); //// const char MSG_BED_DONE[] PROGMEM_I1 = ISTR("Bed done"); //// diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index db1f043b..367a8cdf 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -6376,6 +6376,7 @@ static void lcd_sheet_menu() MENU_ITEM_BACK_P(_T(MSG_MAIN)); MENU_ITEM_SUBMENU_P(_i("Select"), lcd_select_sheet_menu); //// c=18 MENU_ITEM_SUBMENU_P(_i("Rename"), lcd_rename_sheet_menu); //// c=18 + MENU_ITEM_SUBMENU_P(_T(MSG_BABYSTEP_Z), lcd_babystep_z); //TODO show value associated with sheet, not global legacy value MENU_END(); } From 20dd1110f6db3c4a0969158567a609d68f66ae06 Mon Sep 17 00:00:00 2001 From: Marek Bel Date: Tue, 25 Jun 2019 19:43:10 +0200 Subject: [PATCH 08/16] Remove unused parameters of function _lcd_babystep(int axis, chonst char *msg). Saves 24B of flash memory. --- Firmware/ultralcd.cpp | 59 +++++++++++++++++-------------------------- 1 file changed, 23 insertions(+), 36 deletions(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 367a8cdf..b734187d 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -3068,13 +3068,13 @@ static void lcd_move_z() { * other value leads to storing Z_AXIS * @param msg text to be displayed */ -static void _lcd_babystep(int axis, const char *msg) +static void lcd_babystep_z() { typedef struct - { // 19bytes total - int8_t status; // 1byte - int babystepMem[3]; // 6bytes - float babystepMemMM[3]; // 12bytes + { + int8_t status; + int babystepMemZ; + float babystepMemMMZ; } _menu_data_t; static_assert(sizeof(menu_data)>= sizeof(_menu_data_t),"_menu_data_t doesn't fit into menu_data"); _menu_data_t* _md = (_menu_data_t*)&(menu_data[0]); @@ -3085,17 +3085,13 @@ static void _lcd_babystep(int axis, const char *msg) _md->status = 1; check_babystep(); - EEPROM_read_B(EEPROM_BABYSTEP_X, &_md->babystepMem[0]); - EEPROM_read_B(EEPROM_BABYSTEP_Y, &_md->babystepMem[1]); - EEPROM_read_B(EEPROM_BABYSTEP_Z, &_md->babystepMem[2]); + EEPROM_read_B(EEPROM_BABYSTEP_Z, &_md->babystepMemZ); // same logic as in babystep_load if (calibration_status() >= CALIBRATION_STATUS_LIVE_ADJUST) - _md->babystepMem[2] = 0; + _md->babystepMemZ = 0; - _md->babystepMemMM[0] = _md->babystepMem[0]/cs.axis_steps_per_unit[X_AXIS]; - _md->babystepMemMM[1] = _md->babystepMem[1]/cs.axis_steps_per_unit[Y_AXIS]; - _md->babystepMemMM[2] = _md->babystepMem[2]/cs.axis_steps_per_unit[Z_AXIS]; + _md->babystepMemMMZ = _md->babystepMemZ/cs.axis_steps_per_unit[Z_AXIS]; lcd_draw_update = 1; //SERIAL_ECHO("Z baby step: "); //SERIAL_ECHO(_md->babystepMem[2]); @@ -3106,19 +3102,18 @@ static void _lcd_babystep(int axis, const char *msg) if (lcd_encoder != 0) { if (homing_flag) lcd_encoder = 0; - _md->babystepMem[axis] += (int)lcd_encoder; - if (axis == 2) - { - if (_md->babystepMem[axis] < Z_BABYSTEP_MIN) _md->babystepMem[axis] = Z_BABYSTEP_MIN; //-3999 -> -9.99 mm - else if (_md->babystepMem[axis] > Z_BABYSTEP_MAX) _md->babystepMem[axis] = Z_BABYSTEP_MAX; //0 - else - { - CRITICAL_SECTION_START - babystepsTodo[axis] += (int)lcd_encoder; - CRITICAL_SECTION_END - } - } - _md->babystepMemMM[axis] = _md->babystepMem[axis]/cs.axis_steps_per_unit[axis]; + _md->babystepMemZ += (int)lcd_encoder; + + if (_md->babystepMemZ < Z_BABYSTEP_MIN) _md->babystepMemZ = Z_BABYSTEP_MIN; //-3999 -> -9.99 mm + else if (_md->babystepMemZ > Z_BABYSTEP_MAX) _md->babystepMemZ = Z_BABYSTEP_MAX; //0 + else + { + CRITICAL_SECTION_START + babystepsTodo[Z_AXIS] += (int)lcd_encoder; + CRITICAL_SECTION_END + } + + _md->babystepMemMMZ = _md->babystepMemZ/cs.axis_steps_per_unit[Z_AXIS]; _delay(50); lcd_encoder = 0; lcd_draw_update = 1; @@ -3126,26 +3121,18 @@ static void _lcd_babystep(int axis, const char *msg) if (lcd_draw_update) { lcd_set_cursor(0, 1); - menu_draw_float13(msg, _md->babystepMemMM[axis]); + menu_draw_float13(_i("Adjusting Z:"), _md->babystepMemMMZ); ////MSG_BABYSTEPPING_Z c=15 Beware: must include the ':' as its last character } if (LCD_CLICKED || menu_leaving) { // Only update the EEPROM when leaving the menu. - EEPROM_save_B( - (axis == X_AXIS) ? EEPROM_BABYSTEP_X : ((axis == Y_AXIS) ? EEPROM_BABYSTEP_Y : EEPROM_BABYSTEP_Z), - &_md->babystepMem[axis]); - if(Z_AXIS == axis) calibration_status_store(CALIBRATION_STATUS_CALIBRATED); + EEPROM_save_B(EEPROM_BABYSTEP_Z, &_md->babystepMemZ); + calibration_status_store(CALIBRATION_STATUS_CALIBRATED); } if (LCD_CLICKED) menu_back(); } -static void lcd_babystep_z() -{ - _lcd_babystep(Z_AXIS, (_i("Adjusting Z:")));////MSG_BABYSTEPPING_Z c=15 Beware: must include the ':' as its last character -} - - typedef struct { // 12bytes + 9bytes = 21bytes total menu_data_edit_t reserved; //12 bytes reserved for number editing functions From 4a16fe69023a7299e37eb2e6c8c4ab706973c9d7 Mon Sep 17 00:00:00 2001 From: Marek Bel Date: Wed, 26 Jun 2019 14:10:12 +0200 Subject: [PATCH 09/16] Save z_offset, bed_temp and pinda_temp with sheet calibration. --- Firmware/Marlin_main.cpp | 10 ++++++---- Firmware/eeprom.cpp | 3 ++- Firmware/eeprom.h | 7 +++++-- Firmware/mesh_bed_calibration.cpp | 5 +++-- Firmware/ultralcd.cpp | 15 ++++++++++++--- 5 files changed, 28 insertions(+), 12 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index bbf5bae0..d9e210b6 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -1492,7 +1492,6 @@ void setup() SilentModeMenu_MMU = 1; eeprom_write_byte((uint8_t*)EEPROM_MMU_STEALTH, SilentModeMenu_MMU); } - check_babystep(); //checking if Z babystep is in allowed range #if !defined(DEBUG_DISABLE_FANCHECK) && defined(FANCHECK) && defined(TACH_1) && TACH_1 >-1 setup_fan_interrupt(); @@ -8146,12 +8145,15 @@ static void wait_for_heater(long codenum, uint8_t extruder) { void check_babystep() { - int babystep_z; - EEPROM_read_B(EEPROM_BABYSTEP_Z, &babystep_z); + int babystep_z = eeprom_read_word(reinterpret_cast(&(EEPROM_Sheets_base-> + s[(eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)))].z_offset))); + if ((babystep_z < Z_BABYSTEP_MIN) || (babystep_z > Z_BABYSTEP_MAX)) { babystep_z = 0; //if babystep value is out of min max range, set it to 0 SERIAL_ECHOLNPGM("Z live adjust out of range. Setting to 0"); - EEPROM_save_B(EEPROM_BABYSTEP_Z, &babystep_z); + eeprom_write_word(reinterpret_cast(&(EEPROM_Sheets_base-> + s[(eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)))].z_offset)), + babystep_z); lcd_show_fullscreen_message_and_wait_P(PSTR("Z live adjust out of range. Setting to 0. Click to continue.")); lcd_update_enable(true); } diff --git a/Firmware/eeprom.cpp b/Firmware/eeprom.cpp index 74c086fa..a677241c 100644 --- a/Firmware/eeprom.cpp +++ b/Firmware/eeprom.cpp @@ -3,6 +3,7 @@ //! @author Marek Běl #include "eeprom.h" +#include "Marlin.h" #include #include @@ -66,7 +67,7 @@ void eeprom_init() eeprom_write(&(EEPROM_Sheets_base->s[i].name[1]), '\0'); } } - + check_babystep(); } diff --git a/Firmware/eeprom.h b/Firmware/eeprom.h index 4b16c81b..5e73c353 100644 --- a/Firmware/eeprom.h +++ b/Firmware/eeprom.h @@ -173,7 +173,10 @@ void eeprom_init(); typedef struct { - char name[7]; + char name[7]; //!< Can be null terminated, doesn't need to be null terminated + int16_t z_offset; //!< Z_BABYSTEP_MIN .. Z_BABYSTEP_MAX = Z_BABYSTEP_MIN*2/1000 [mm] .. Z_BABYSTEP_MAX*2/1000 [mm] + uint8_t bed_temp; //!< 0 .. 254 [°C] + uint8_t pinda_temp; //!< 0 .. 254 [°C] } Sheet; typedef struct @@ -183,7 +186,7 @@ typedef struct } Sheets; // sizeof(Sheets). Do not change it unless EEPROM_Sheets_base is last item in EEPROM. // Otherwise it would move following items. -#define EEPROM_SHEETS_SIZEOF 22 +#define EEPROM_SHEETS_SIZEOF 34 static Sheets * const EEPROM_Sheets_base = (Sheets*)(EEPROM_NOZZLE_DIAMETER - EEPROM_SHEETS_SIZEOF); diff --git a/Firmware/mesh_bed_calibration.cpp b/Firmware/mesh_bed_calibration.cpp index 91dadaef..1edac56b 100644 --- a/Firmware/mesh_bed_calibration.cpp +++ b/Firmware/mesh_bed_calibration.cpp @@ -3031,7 +3031,8 @@ void babystep_load() check_babystep(); //checking if babystep is in allowed range, otherwise setting babystep to 0 // End of G80: Apply the baby stepping value. - EEPROM_read_B(EEPROM_BABYSTEP_Z, &babystepLoadZ); + babystepLoadZ = eeprom_read_word(reinterpret_cast(&(EEPROM_Sheets_base-> + s[(eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)))].z_offset))); #if 0 SERIAL_ECHO("Z baby step: "); @@ -3186,4 +3187,4 @@ void mbl_interpolation(uint8_t meas_points) { } } } -} \ No newline at end of file +} diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index b734187d..eef9465c 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -3073,7 +3073,7 @@ static void lcd_babystep_z() typedef struct { int8_t status; - int babystepMemZ; + int16_t babystepMemZ; float babystepMemMMZ; } _menu_data_t; static_assert(sizeof(menu_data)>= sizeof(_menu_data_t),"_menu_data_t doesn't fit into menu_data"); @@ -3085,7 +3085,8 @@ static void lcd_babystep_z() _md->status = 1; check_babystep(); - EEPROM_read_B(EEPROM_BABYSTEP_Z, &_md->babystepMemZ); + _md->babystepMemZ = eeprom_read_word(reinterpret_cast(&(EEPROM_Sheets_base-> + s[(eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)))].z_offset))); // same logic as in babystep_load if (calibration_status() >= CALIBRATION_STATUS_LIVE_ADJUST) @@ -3126,7 +3127,15 @@ static void lcd_babystep_z() if (LCD_CLICKED || menu_leaving) { // Only update the EEPROM when leaving the menu. - EEPROM_save_B(EEPROM_BABYSTEP_Z, &_md->babystepMemZ); + eeprom_update_word(reinterpret_cast(&(EEPROM_Sheets_base-> + s[(eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)))].z_offset)), + _md->babystepMemZ); + eeprom_update_byte(&(EEPROM_Sheets_base->s[(eeprom_read_byte( + &(EEPROM_Sheets_base->active_sheet)))].bed_temp), + target_temperature_bed); + eeprom_update_byte(&(EEPROM_Sheets_base->s[(eeprom_read_byte( + &(EEPROM_Sheets_base->active_sheet)))].pinda_temp), + current_temperature_pinda); calibration_status_store(CALIBRATION_STATUS_CALIBRATED); } if (LCD_CLICKED) menu_back(); From 53dbcdd85237f54df8615fa55668ff1e41797dd1 Mon Sep 17 00:00:00 2001 From: Marek Bel Date: Wed, 26 Jun 2019 15:23:55 +0200 Subject: [PATCH 10/16] Display sheet name when adjusting Z. Costs 130B of flash. --- Firmware/menu.cpp | 22 ++++++++++++++++------ Firmware/menu.h | 7 +++++++ Firmware/ultralcd.cpp | 6 +++++- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/Firmware/menu.cpp b/Firmware/menu.cpp index 71ddd1ba..2e8e3e8a 100755 --- a/Firmware/menu.cpp +++ b/Firmware/menu.cpp @@ -174,15 +174,25 @@ static void menu_draw_item_puts_P(char type_char, const char* str) lcd_printf_P(PSTR("%c%-18.18S%c"), (lcd_encoder == menu_item)?'>':' ', str, type_char); } +//! @brief Format sheet name after PROGMEM text +//! +//! @param[in] str_P Pointer to string in PROGMEM +//! @param[in] sheet_E Sheet in EEPROM +//! @param[out] buffer for formatted output +void menu_format_sheet_P_E(const char *str_P, const Sheet &sheet_E, SheetFormatBuffer &buffer) +{ + uint_least8_t index = sprintf_P(buffer.c, PSTR("%.10S "), str_P); + eeprom_read_block(&(buffer.c[index]), sheet_E.name, 7); + index += 7; + buffer.c[index] = '\0'; +} + static void menu_draw_item_puts_P(char type_char, const char *str_P, const Sheet &sheet) { lcd_set_cursor(0, menu_row); - char buffer[19]; - uint_least8_t index = sprintf_P(buffer, PSTR("%.10S "), str_P); - eeprom_read_block(&(buffer[index]), sheet.name, 7); - index += 7; - buffer[index] = '\0'; - lcd_printf_P(PSTR("%c%-18.18s%c"), (lcd_encoder == menu_item)?'>':' ', buffer, type_char); + SheetFormatBuffer buffer; + menu_format_sheet_P_E(str_P, sheet, buffer); + lcd_printf_P(PSTR("%c%-18.18s%c"), (lcd_encoder == menu_item)?'>':' ', buffer.c, type_char); } static void menu_draw_item_puts_P(char type_char, const char* str, char num) diff --git a/Firmware/menu.h b/Firmware/menu.h index e7e42b68..91a64ec4 100755 --- a/Firmware/menu.h +++ b/Firmware/menu.h @@ -130,6 +130,13 @@ extern void menu_draw_float31(const char* str, float val); extern void menu_draw_float13(const char* str, float val); +struct SheetFormatBuffer +{ + char c[19]; +}; + +extern void menu_format_sheet_P_E(const char *str_P, const Sheet &sheet_E, SheetFormatBuffer &buffer); + #define MENU_ITEM_EDIT_int3_P(str, pval, minval, maxval) do { if (menu_item_edit_P(str, pval, minval, maxval)) return; } while (0) //#define MENU_ITEM_EDIT_int3_P(str, pval, minval, maxval) MENU_ITEM_EDIT(int3, str, pval, minval, maxval) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index eef9465c..03c4a3cc 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -3121,6 +3121,10 @@ static void lcd_babystep_z() } if (lcd_draw_update) { + SheetFormatBuffer buffer; + menu_format_sheet_P_E(_T(MSG_SHEET), EEPROM_Sheets_base->s[(eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)))], buffer); + lcd_set_cursor(0, 0); + lcd_print(buffer.c); lcd_set_cursor(0, 1); menu_draw_float13(_i("Adjusting Z:"), _md->babystepMemMMZ); ////MSG_BABYSTEPPING_Z c=15 Beware: must include the ':' as its last character } @@ -6372,7 +6376,7 @@ static void lcd_sheet_menu() MENU_ITEM_BACK_P(_T(MSG_MAIN)); MENU_ITEM_SUBMENU_P(_i("Select"), lcd_select_sheet_menu); //// c=18 MENU_ITEM_SUBMENU_P(_i("Rename"), lcd_rename_sheet_menu); //// c=18 - MENU_ITEM_SUBMENU_P(_T(MSG_BABYSTEP_Z), lcd_babystep_z); //TODO show value associated with sheet, not global legacy value + MENU_ITEM_SUBMENU_P(_T(MSG_BABYSTEP_Z), lcd_babystep_z); MENU_END(); } From d8797949220d51c9f531ee4dc13a86f7a68049df Mon Sep 17 00:00:00 2001 From: Marek Bel Date: Wed, 26 Jun 2019 15:47:06 +0200 Subject: [PATCH 11/16] Remove first parameter of macro menu_format_sheet_P_E, of function menu_format_sheet_P_E and menu_item_submenu_P as it was always called with the same parameter. Saves 66B of FLASH. --- Firmware/menu.cpp | 15 +++++++-------- Firmware/menu.h | 6 +++--- Firmware/ultralcd.cpp | 10 +++++----- 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/Firmware/menu.cpp b/Firmware/menu.cpp index 2e8e3e8a..30727a08 100755 --- a/Firmware/menu.cpp +++ b/Firmware/menu.cpp @@ -174,24 +174,23 @@ static void menu_draw_item_puts_P(char type_char, const char* str) lcd_printf_P(PSTR("%c%-18.18S%c"), (lcd_encoder == menu_item)?'>':' ', str, type_char); } -//! @brief Format sheet name after PROGMEM text +//! @brief Format sheet name //! -//! @param[in] str_P Pointer to string in PROGMEM //! @param[in] sheet_E Sheet in EEPROM //! @param[out] buffer for formatted output -void menu_format_sheet_P_E(const char *str_P, const Sheet &sheet_E, SheetFormatBuffer &buffer) +void menu_format_sheet_P_E(const Sheet &sheet_E, SheetFormatBuffer &buffer) { - uint_least8_t index = sprintf_P(buffer.c, PSTR("%.10S "), str_P); + uint_least8_t index = sprintf_P(buffer.c, PSTR("%.10S "), _T(MSG_SHEET)); eeprom_read_block(&(buffer.c[index]), sheet_E.name, 7); index += 7; buffer.c[index] = '\0'; } -static void menu_draw_item_puts_P(char type_char, const char *str_P, const Sheet &sheet) +static void menu_draw_item_puts_P(char type_char, const Sheet &sheet) { lcd_set_cursor(0, menu_row); SheetFormatBuffer buffer; - menu_format_sheet_P_E(str_P, sheet, buffer); + menu_format_sheet_P_E(sheet, buffer); lcd_printf_P(PSTR("%c%-18.18s%c"), (lcd_encoder == menu_item)?'>':' ', buffer.c, type_char); } @@ -245,11 +244,11 @@ uint8_t menu_item_submenu_P(const char* str, menu_func_t submenu) return 0; } -uint8_t menu_item_submenu_P(const char* str_P, const Sheet &sheet, menu_func_t submenu) +uint8_t menu_item_submenu_P(const Sheet &sheet, menu_func_t submenu) { if (menu_item == menu_line) { - if (lcd_draw_update) menu_draw_item_puts_P(LCD_STR_ARROW_RIGHT[0], str_P, sheet); + if (lcd_draw_update) menu_draw_item_puts_P(LCD_STR_ARROW_RIGHT[0], sheet); if (menu_clicked && (lcd_encoder == menu_item)) { menu_submenu(submenu); diff --git a/Firmware/menu.h b/Firmware/menu.h index 91a64ec4..7b8c519b 100755 --- a/Firmware/menu.h +++ b/Firmware/menu.h @@ -100,8 +100,8 @@ extern uint8_t menu_item_text_P(const char* str); #define MENU_ITEM_SUBMENU_P(str, submenu) do { if (menu_item_submenu_P(str, submenu)) return; } while (0) extern uint8_t menu_item_submenu_P(const char* str, menu_func_t submenu); -#define MENU_ITEM_SUBMENU_P_E(str_P, sheet, submenu) do { if (menu_item_submenu_P(str_P, sheet, submenu)) return; } while (0) -extern uint8_t menu_item_submenu_P(const char *str_P, const Sheet &sheet, menu_func_t submenu); +#define MENU_ITEM_SUBMENU_P_E(sheet, submenu) do { if (menu_item_submenu_P(sheet, submenu)) return; } while (0) +extern uint8_t menu_item_submenu_P(const Sheet &sheet, menu_func_t submenu); #define MENU_ITEM_BACK_P(str) do { if (menu_item_back_P(str)) return; } while (0) @@ -135,7 +135,7 @@ struct SheetFormatBuffer char c[19]; }; -extern void menu_format_sheet_P_E(const char *str_P, const Sheet &sheet_E, SheetFormatBuffer &buffer); +extern void menu_format_sheet_P_E(const Sheet &sheet_E, SheetFormatBuffer &buffer); #define MENU_ITEM_EDIT_int3_P(str, pval, minval, maxval) do { if (menu_item_edit_P(str, pval, minval, maxval)) return; } while (0) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 03c4a3cc..f21e6e19 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -3122,7 +3122,7 @@ static void lcd_babystep_z() if (lcd_draw_update) { SheetFormatBuffer buffer; - menu_format_sheet_P_E(_T(MSG_SHEET), EEPROM_Sheets_base->s[(eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)))], buffer); + menu_format_sheet_P_E(EEPROM_Sheets_base->s[(eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)))], buffer); lcd_set_cursor(0, 0); lcd_print(buffer.c); lcd_set_cursor(0, 1); @@ -6320,9 +6320,9 @@ static void lcd_select_sheet_menu() { MENU_BEGIN(); MENU_ITEM_BACK_P(_T(MSG_SHEET)); - MENU_ITEM_SUBMENU_P_E(_T(MSG_SHEET), EEPROM_Sheets_base->s[0], lcd_select_sheet_0_menu); - MENU_ITEM_SUBMENU_P_E(_T(MSG_SHEET), EEPROM_Sheets_base->s[1], lcd_select_sheet_1_menu); - MENU_ITEM_SUBMENU_P_E(_T(MSG_SHEET), EEPROM_Sheets_base->s[2], lcd_select_sheet_2_menu); + MENU_ITEM_SUBMENU_P_E(EEPROM_Sheets_base->s[0], lcd_select_sheet_0_menu); + MENU_ITEM_SUBMENU_P_E(EEPROM_Sheets_base->s[1], lcd_select_sheet_1_menu); + MENU_ITEM_SUBMENU_P_E(EEPROM_Sheets_base->s[2], lcd_select_sheet_2_menu); MENU_END(); } @@ -6415,7 +6415,7 @@ static void lcd_main_menu() } else { MENU_ITEM_SUBMENU_P(_i("Preheat"), lcd_preheat_menu);////MSG_PREHEAT - MENU_ITEM_SUBMENU_P_E(_T(MSG_SHEET), EEPROM_Sheets_base->s[(eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)))], lcd_sheet_menu); + MENU_ITEM_SUBMENU_P_E(EEPROM_Sheets_base->s[(eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)))], lcd_sheet_menu); } From d344e514c40bc0a8555879b08091e03a64ec7ff6 Mon Sep 17 00:00:00 2001 From: Marek Bel Date: Wed, 26 Jun 2019 15:51:58 +0200 Subject: [PATCH 12/16] Rename functions and macro to match with naming convention - remove 'P' where there is no pointer to progmem. --- Firmware/menu.cpp | 10 +++++----- Firmware/menu.h | 6 +++--- Firmware/ultralcd.cpp | 10 +++++----- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Firmware/menu.cpp b/Firmware/menu.cpp index 30727a08..00c64e8b 100755 --- a/Firmware/menu.cpp +++ b/Firmware/menu.cpp @@ -178,7 +178,7 @@ static void menu_draw_item_puts_P(char type_char, const char* str) //! //! @param[in] sheet_E Sheet in EEPROM //! @param[out] buffer for formatted output -void menu_format_sheet_P_E(const Sheet &sheet_E, SheetFormatBuffer &buffer) +void menu_format_sheet_E(const Sheet &sheet_E, SheetFormatBuffer &buffer) { uint_least8_t index = sprintf_P(buffer.c, PSTR("%.10S "), _T(MSG_SHEET)); eeprom_read_block(&(buffer.c[index]), sheet_E.name, 7); @@ -186,11 +186,11 @@ void menu_format_sheet_P_E(const Sheet &sheet_E, SheetFormatBuffer &buffer) buffer.c[index] = '\0'; } -static void menu_draw_item_puts_P(char type_char, const Sheet &sheet) +static void menu_draw_item_puts_E(char type_char, const Sheet &sheet) { lcd_set_cursor(0, menu_row); SheetFormatBuffer buffer; - menu_format_sheet_P_E(sheet, buffer); + menu_format_sheet_E(sheet, buffer); lcd_printf_P(PSTR("%c%-18.18s%c"), (lcd_encoder == menu_item)?'>':' ', buffer.c, type_char); } @@ -244,11 +244,11 @@ uint8_t menu_item_submenu_P(const char* str, menu_func_t submenu) return 0; } -uint8_t menu_item_submenu_P(const Sheet &sheet, menu_func_t submenu) +uint8_t menu_item_submenu_E(const Sheet &sheet, menu_func_t submenu) { if (menu_item == menu_line) { - if (lcd_draw_update) menu_draw_item_puts_P(LCD_STR_ARROW_RIGHT[0], sheet); + if (lcd_draw_update) menu_draw_item_puts_E(LCD_STR_ARROW_RIGHT[0], sheet); if (menu_clicked && (lcd_encoder == menu_item)) { menu_submenu(submenu); diff --git a/Firmware/menu.h b/Firmware/menu.h index 7b8c519b..a4cb3010 100755 --- a/Firmware/menu.h +++ b/Firmware/menu.h @@ -100,8 +100,8 @@ extern uint8_t menu_item_text_P(const char* str); #define MENU_ITEM_SUBMENU_P(str, submenu) do { if (menu_item_submenu_P(str, submenu)) return; } while (0) extern uint8_t menu_item_submenu_P(const char* str, menu_func_t submenu); -#define MENU_ITEM_SUBMENU_P_E(sheet, submenu) do { if (menu_item_submenu_P(sheet, submenu)) return; } while (0) -extern uint8_t menu_item_submenu_P(const Sheet &sheet, menu_func_t submenu); +#define MENU_ITEM_SUBMENU_E(sheet, submenu) do { if (menu_item_submenu_E(sheet, submenu)) return; } while (0) +extern uint8_t menu_item_submenu_E(const Sheet &sheet, menu_func_t submenu); #define MENU_ITEM_BACK_P(str) do { if (menu_item_back_P(str)) return; } while (0) @@ -135,7 +135,7 @@ struct SheetFormatBuffer char c[19]; }; -extern void menu_format_sheet_P_E(const Sheet &sheet_E, SheetFormatBuffer &buffer); +extern void menu_format_sheet_E(const Sheet &sheet_E, SheetFormatBuffer &buffer); #define MENU_ITEM_EDIT_int3_P(str, pval, minval, maxval) do { if (menu_item_edit_P(str, pval, minval, maxval)) return; } while (0) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index f21e6e19..5f7328be 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -3122,7 +3122,7 @@ static void lcd_babystep_z() if (lcd_draw_update) { SheetFormatBuffer buffer; - menu_format_sheet_P_E(EEPROM_Sheets_base->s[(eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)))], buffer); + menu_format_sheet_E(EEPROM_Sheets_base->s[(eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)))], buffer); lcd_set_cursor(0, 0); lcd_print(buffer.c); lcd_set_cursor(0, 1); @@ -6320,9 +6320,9 @@ static void lcd_select_sheet_menu() { MENU_BEGIN(); MENU_ITEM_BACK_P(_T(MSG_SHEET)); - MENU_ITEM_SUBMENU_P_E(EEPROM_Sheets_base->s[0], lcd_select_sheet_0_menu); - MENU_ITEM_SUBMENU_P_E(EEPROM_Sheets_base->s[1], lcd_select_sheet_1_menu); - MENU_ITEM_SUBMENU_P_E(EEPROM_Sheets_base->s[2], lcd_select_sheet_2_menu); + MENU_ITEM_SUBMENU_E(EEPROM_Sheets_base->s[0], lcd_select_sheet_0_menu); + MENU_ITEM_SUBMENU_E(EEPROM_Sheets_base->s[1], lcd_select_sheet_1_menu); + MENU_ITEM_SUBMENU_E(EEPROM_Sheets_base->s[2], lcd_select_sheet_2_menu); MENU_END(); } @@ -6415,7 +6415,7 @@ static void lcd_main_menu() } else { MENU_ITEM_SUBMENU_P(_i("Preheat"), lcd_preheat_menu);////MSG_PREHEAT - MENU_ITEM_SUBMENU_P_E(EEPROM_Sheets_base->s[(eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)))], lcd_sheet_menu); + MENU_ITEM_SUBMENU_E(EEPROM_Sheets_base->s[(eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)))], lcd_sheet_menu); } From 81b3b71cca40c2682c84bd6d5a47f723aeb0f801 Mon Sep 17 00:00:00 2001 From: NotaRobotexe Date: Wed, 3 Jul 2019 19:37:11 +0200 Subject: [PATCH 13/16] check eeprom inicialization --- Firmware/Marlin.h | 1 + Firmware/Marlin_main.cpp | 5 +++++ Firmware/eeprom.cpp | 4 ++++ Firmware/messages.c | 1 + Firmware/messages.h | 1 + Firmware/ultralcd.cpp | 38 ++++++++++++++++++++++++++------------ 6 files changed, 38 insertions(+), 12 deletions(-) diff --git a/Firmware/Marlin.h b/Firmware/Marlin.h index 50988092..90d83868 100755 --- a/Firmware/Marlin.h +++ b/Firmware/Marlin.h @@ -323,6 +323,7 @@ extern float retract_recover_length_swap; extern uint8_t host_keepalive_interval; +extern bool is_sheet_inicialized(); extern unsigned long starttime; extern unsigned long stoptime; diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index d9e210b6..9dcb4f47 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -8143,6 +8143,11 @@ static void wait_for_heater(long codenum, uint8_t extruder) { } } +bool is_sheet_inicialized(){ + return (0xffff != eeprom_read_word(reinterpret_cast(&(EEPROM_Sheets_base-> + s[eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet))].z_offset)))); +} + void check_babystep() { int babystep_z = eeprom_read_word(reinterpret_cast(&(EEPROM_Sheets_base-> diff --git a/Firmware/eeprom.cpp b/Firmware/eeprom.cpp index a677241c..03dee689 100644 --- a/Firmware/eeprom.cpp +++ b/Firmware/eeprom.cpp @@ -8,6 +8,9 @@ #include #include + +#include "language.h" + #if 0 template static T eeprom_read(T *address); @@ -65,6 +68,7 @@ void eeprom_init() { eeprom_write(&(EEPROM_Sheets_base->s[i].name[0]), static_cast(i + '1')); eeprom_write(&(EEPROM_Sheets_base->s[i].name[1]), '\0'); + //eeprom_write_word(reinterpret_cast(&(EEPROM_Sheets_base->s[i].z_offset)),0); //TODO: nedavat dalsi } } check_babystep(); diff --git a/Firmware/messages.c b/Firmware/messages.c index 5f30a54a..57d2aba9 100644 --- a/Firmware/messages.c +++ b/Firmware/messages.c @@ -127,3 +127,4 @@ const char MSG_ENDSTOP_OPEN[] PROGMEM_N1 = "open"; //// const char MSG_POWERUP[] PROGMEM_N1 = "PowerUp"; //// const char MSG_ERR_STOPPED[] PROGMEM_N1 = "Printer stopped due to errors. Fix the error and use M999 to restart. (Temperature is reset. Set it after restarting)"; //// const char MSG_ENDSTOP_HIT[] PROGMEM_N1 = "TRIGGERED"; //// +const char MSG_V2_CALIBRATION[] PROGMEM_N1 = "First layer cal."; ////c=17 r=1 diff --git a/Firmware/messages.h b/Firmware/messages.h index bbfc1065..e4c4187c 100644 --- a/Firmware/messages.h +++ b/Firmware/messages.h @@ -128,6 +128,7 @@ extern const char MSG_ERR_STOPPED[]; extern const char MSG_ENDSTOP_HIT[]; extern const char MSG_EJECT_FILAMENT[]; extern const char MSG_CUT_FILAMENT[]; +extern const char MSG_V2_CALIBRATION[]; #if defined(__cplusplus) } diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 5f7328be..40a49025 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -3084,9 +3084,14 @@ static void lcd_babystep_z() // Initialize its status. _md->status = 1; check_babystep(); - - _md->babystepMemZ = eeprom_read_word(reinterpret_cast(&(EEPROM_Sheets_base-> - s[(eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)))].z_offset))); + + if(!is_sheet_inicialized()){ + _md->babystepMemZ = 0; + } + else{ + _md->babystepMemZ = eeprom_read_word(reinterpret_cast(&(EEPROM_Sheets_base-> + s[(eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)))].z_offset))); + } // same logic as in babystep_load if (calibration_status() >= CALIBRATION_STATUS_LIVE_ADJUST) @@ -6300,26 +6305,34 @@ void lcd_resume_print() isPrintPaused = false; } +static void sheet_check(uint8_t sheet_num) +{ + eeprom_update_byte(&(EEPROM_Sheets_base->active_sheet), sheet_num); + if(is_sheet_inicialized()) + calibration_status_store(CALIBRATION_STATUS_CALIBRATED); + else + calibration_status_store(CALIBRATION_STATUS_LIVE_ADJUST); + + menu_back(3); +} + static void lcd_select_sheet_0_menu() { - eeprom_update_byte(&(EEPROM_Sheets_base->active_sheet), 0); - menu_back(3); + sheet_check(0); } static void lcd_select_sheet_1_menu() { - eeprom_update_byte(&(EEPROM_Sheets_base->active_sheet), 1); - menu_back(3); + sheet_check(1); } static void lcd_select_sheet_2_menu() { - eeprom_update_byte(&(EEPROM_Sheets_base->active_sheet), 2); - menu_back(3); + sheet_check(2); } static void lcd_select_sheet_menu() { MENU_BEGIN(); - MENU_ITEM_BACK_P(_T(MSG_SHEET)); + MENU_ITEM_BACK_P(_T(MSG_BACK)); MENU_ITEM_SUBMENU_E(EEPROM_Sheets_base->s[0], lcd_select_sheet_0_menu); MENU_ITEM_SUBMENU_E(EEPROM_Sheets_base->s[1], lcd_select_sheet_1_menu); MENU_ITEM_SUBMENU_E(EEPROM_Sheets_base->s[2], lcd_select_sheet_2_menu); @@ -6376,7 +6389,7 @@ static void lcd_sheet_menu() MENU_ITEM_BACK_P(_T(MSG_MAIN)); MENU_ITEM_SUBMENU_P(_i("Select"), lcd_select_sheet_menu); //// c=18 MENU_ITEM_SUBMENU_P(_i("Rename"), lcd_rename_sheet_menu); //// c=18 - MENU_ITEM_SUBMENU_P(_T(MSG_BABYSTEP_Z), lcd_babystep_z); + MENU_ITEM_SUBMENU_P(_T(MSG_V2_CALIBRATION), lcd_v2_calibration); ////MSG_V2_CALIBRATION c=17 r=1 MENU_END(); } @@ -6415,7 +6428,6 @@ static void lcd_main_menu() } else { MENU_ITEM_SUBMENU_P(_i("Preheat"), lcd_preheat_menu);////MSG_PREHEAT - MENU_ITEM_SUBMENU_E(EEPROM_Sheets_base->s[(eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)))], lcd_sheet_menu); } @@ -6510,6 +6522,8 @@ static void lcd_main_menu() } + if(!isPrintPaused)MENU_ITEM_SUBMENU_E(EEPROM_Sheets_base->s[(eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)))], lcd_sheet_menu); + if (!is_usb_printing && (lcd_commands_type != LcdCommands::Layer1Cal)) { MENU_ITEM_SUBMENU_P(_i("Statistics "), lcd_menu_statistics);////MSG_STATISTICS From e77898d5dc3a40fbbe64154741c6704621b1bce7 Mon Sep 17 00:00:00 2001 From: NotaRobotexe Date: Thu, 4 Jul 2019 13:21:27 +0200 Subject: [PATCH 14/16] code edit --- Firmware/Marlin.h | 2 -- Firmware/Marlin_main.cpp | 5 ----- Firmware/eeprom.cpp | 5 +++++ Firmware/eeprom.h | 1 + Firmware/ultralcd.cpp | 12 ++++++------ 5 files changed, 12 insertions(+), 13 deletions(-) diff --git a/Firmware/Marlin.h b/Firmware/Marlin.h index 90d83868..afc01859 100755 --- a/Firmware/Marlin.h +++ b/Firmware/Marlin.h @@ -323,8 +323,6 @@ extern float retract_recover_length_swap; extern uint8_t host_keepalive_interval; -extern bool is_sheet_inicialized(); - extern unsigned long starttime; extern unsigned long stoptime; extern int bowden_length[4]; diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 9dcb4f47..d9e210b6 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -8143,11 +8143,6 @@ static void wait_for_heater(long codenum, uint8_t extruder) { } } -bool is_sheet_inicialized(){ - return (0xffff != eeprom_read_word(reinterpret_cast(&(EEPROM_Sheets_base-> - s[eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet))].z_offset)))); -} - void check_babystep() { int babystep_z = eeprom_read_word(reinterpret_cast(&(EEPROM_Sheets_base-> diff --git a/Firmware/eeprom.cpp b/Firmware/eeprom.cpp index 03dee689..499c197b 100644 --- a/Firmware/eeprom.cpp +++ b/Firmware/eeprom.cpp @@ -41,6 +41,11 @@ bool eeprom_is_uninitialized(char *address) return (0xff == eeprom_read_byte(reinterpret_cast(address))); } +bool is_sheet_initialized(){ + return (0xffff != eeprom_read_word(reinterpret_cast(&(EEPROM_Sheets_base-> + s[eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet))].z_offset)))); +} + void eeprom_init() { if (eeprom_read_byte((uint8_t*)EEPROM_POWER_COUNT) == 0xff) eeprom_write_byte((uint8_t*)EEPROM_POWER_COUNT, 0); diff --git a/Firmware/eeprom.h b/Firmware/eeprom.h index 5e73c353..f4e20e5d 100644 --- a/Firmware/eeprom.h +++ b/Firmware/eeprom.h @@ -191,6 +191,7 @@ typedef struct static Sheets * const EEPROM_Sheets_base = (Sheets*)(EEPROM_NOZZLE_DIAMETER - EEPROM_SHEETS_SIZEOF); #ifdef __cplusplus +extern bool is_sheet_initialized(); static_assert(sizeof(Sheets) == EEPROM_SHEETS_SIZEOF, "Sizeof(Sheets) is not EEPROM_SHEETS_SIZEOF."); #endif diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 40a49025..bb9bfa4d 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -3085,7 +3085,7 @@ static void lcd_babystep_z() _md->status = 1; check_babystep(); - if(!is_sheet_inicialized()){ + if(!is_sheet_initialized()){ _md->babystepMemZ = 0; } else{ @@ -6305,10 +6305,10 @@ void lcd_resume_print() isPrintPaused = false; } -static void sheet_check(uint8_t sheet_num) +static void change_sheet(uint8_t sheet_num) { eeprom_update_byte(&(EEPROM_Sheets_base->active_sheet), sheet_num); - if(is_sheet_inicialized()) + if(is_sheet_initialized()) calibration_status_store(CALIBRATION_STATUS_CALIBRATED); else calibration_status_store(CALIBRATION_STATUS_LIVE_ADJUST); @@ -6318,15 +6318,15 @@ static void sheet_check(uint8_t sheet_num) static void lcd_select_sheet_0_menu() { - sheet_check(0); + change_sheet(0); } static void lcd_select_sheet_1_menu() { - sheet_check(1); + change_sheet(1); } static void lcd_select_sheet_2_menu() { - sheet_check(2); + change_sheet(2); } static void lcd_select_sheet_menu() From 1f9dce9513711d85ea35f555036ecfbad392a3f4 Mon Sep 17 00:00:00 2001 From: DRracer Date: Thu, 4 Jul 2019 13:36:02 +0200 Subject: [PATCH 15/16] next almost 200B down --- Firmware/menu.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/Firmware/menu.cpp b/Firmware/menu.cpp index 00c64e8b..7927b0ef 100755 --- a/Firmware/menu.cpp +++ b/Firmware/menu.cpp @@ -168,10 +168,14 @@ int menu_draw_item_printf_P(char type_char, const char* format, ...) } */ +static char menu_selection_mark(){ + return (lcd_encoder == menu_item)?'>':' '; +} + static void menu_draw_item_puts_P(char type_char, const char* str) { lcd_set_cursor(0, menu_row); - lcd_printf_P(PSTR("%c%-18.18S%c"), (lcd_encoder == menu_item)?'>':' ', str, type_char); + lcd_printf_P(PSTR("%c%-18.18S%c"), menu_selection_mark(), str, type_char); } //! @brief Format sheet name @@ -182,8 +186,9 @@ void menu_format_sheet_E(const Sheet &sheet_E, SheetFormatBuffer &buffer) { uint_least8_t index = sprintf_P(buffer.c, PSTR("%.10S "), _T(MSG_SHEET)); eeprom_read_block(&(buffer.c[index]), sheet_E.name, 7); - index += 7; - buffer.c[index] = '\0'; + //index += 7; + buffer.c[index + 7] = '\0'; // tohle vyjde vyrazne lepe, nez inkrementovat promennou index - o celych 12B kratsi + // compiler totiz pochopi, ze tu promennou nechci, cili si ji necha v registru } static void menu_draw_item_puts_E(char type_char, const Sheet &sheet) @@ -191,13 +196,13 @@ static void menu_draw_item_puts_E(char type_char, const Sheet &sheet) lcd_set_cursor(0, menu_row); SheetFormatBuffer buffer; menu_format_sheet_E(sheet, buffer); - lcd_printf_P(PSTR("%c%-18.18s%c"), (lcd_encoder == menu_item)?'>':' ', buffer.c, type_char); + lcd_printf_P(PSTR("%c%-18.18s%c"), menu_selection_mark(), buffer.c, type_char); } static void 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_printf_P(PSTR("%c%-.16S "), menu_selection_mark(), str); lcd_putc(num); lcd_set_cursor(19, menu_row); lcd_putc(type_char); @@ -434,7 +439,7 @@ uint8_t menu_item_edit_P(const char* str, T pval, int16_t min_val, int16_t max_v if (lcd_draw_update) { lcd_set_cursor(0, menu_row); - menu_draw_P((lcd_encoder == menu_item)?'>':' ', str, *pval); + menu_draw_P(menu_selection_mark(), str, *pval); } if (menu_clicked && (lcd_encoder == menu_item)) { From a1a8945bee9d548befa78b0af767b04cbc04a311 Mon Sep 17 00:00:00 2001 From: NotaRobotexe Date: Thu, 4 Jul 2019 15:31:44 +0200 Subject: [PATCH 16/16] more code editing --- Firmware/eeprom.cpp | 1 - Firmware/menu.cpp | 3 +-- Firmware/messages.c | 2 ++ Firmware/messages.h | 2 ++ Firmware/ultralcd.cpp | 4 ++-- 5 files changed, 7 insertions(+), 5 deletions(-) diff --git a/Firmware/eeprom.cpp b/Firmware/eeprom.cpp index 499c197b..1be708d0 100644 --- a/Firmware/eeprom.cpp +++ b/Firmware/eeprom.cpp @@ -73,7 +73,6 @@ void eeprom_init() { eeprom_write(&(EEPROM_Sheets_base->s[i].name[0]), static_cast(i + '1')); eeprom_write(&(EEPROM_Sheets_base->s[i].name[1]), '\0'); - //eeprom_write_word(reinterpret_cast(&(EEPROM_Sheets_base->s[i].z_offset)),0); //TODO: nedavat dalsi } } check_babystep(); diff --git a/Firmware/menu.cpp b/Firmware/menu.cpp index 7927b0ef..2a8e32ab 100755 --- a/Firmware/menu.cpp +++ b/Firmware/menu.cpp @@ -187,8 +187,7 @@ void menu_format_sheet_E(const Sheet &sheet_E, SheetFormatBuffer &buffer) uint_least8_t index = sprintf_P(buffer.c, PSTR("%.10S "), _T(MSG_SHEET)); eeprom_read_block(&(buffer.c[index]), sheet_E.name, 7); //index += 7; - buffer.c[index + 7] = '\0'; // tohle vyjde vyrazne lepe, nez inkrementovat promennou index - o celych 12B kratsi - // compiler totiz pochopi, ze tu promennou nechci, cili si ji necha v registru + buffer.c[index + 7] = '\0'; } static void menu_draw_item_puts_E(char type_char, const Sheet &sheet) diff --git a/Firmware/messages.c b/Firmware/messages.c index 57d2aba9..67f32bc3 100644 --- a/Firmware/messages.c +++ b/Firmware/messages.c @@ -128,3 +128,5 @@ const char MSG_POWERUP[] PROGMEM_N1 = "PowerUp"; //// const char MSG_ERR_STOPPED[] PROGMEM_N1 = "Printer stopped due to errors. Fix the error and use M999 to restart. (Temperature is reset. Set it after restarting)"; //// const char MSG_ENDSTOP_HIT[] PROGMEM_N1 = "TRIGGERED"; //// const char MSG_V2_CALIBRATION[] PROGMEM_N1 = "First layer cal."; ////c=17 r=1 +const char MSG_SELECT[] PROGMEM_N1 = "Select"; //// +const char MSG_RENAME[] PROGMEM_N1 = "Rename"; //// diff --git a/Firmware/messages.h b/Firmware/messages.h index e4c4187c..da72d073 100644 --- a/Firmware/messages.h +++ b/Firmware/messages.h @@ -129,6 +129,8 @@ extern const char MSG_ENDSTOP_HIT[]; extern const char MSG_EJECT_FILAMENT[]; extern const char MSG_CUT_FILAMENT[]; extern const char MSG_V2_CALIBRATION[]; +extern const char MSG_SELECT[]; +extern const char MSG_RENAME[]; #if defined(__cplusplus) } diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index bb9bfa4d..2d420c0c 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -6387,8 +6387,8 @@ static void lcd_sheet_menu() { MENU_BEGIN(); MENU_ITEM_BACK_P(_T(MSG_MAIN)); - MENU_ITEM_SUBMENU_P(_i("Select"), lcd_select_sheet_menu); //// c=18 - MENU_ITEM_SUBMENU_P(_i("Rename"), lcd_rename_sheet_menu); //// c=18 + MENU_ITEM_SUBMENU_P(_T(MSG_SELECT), lcd_select_sheet_menu); //// c=18 + MENU_ITEM_SUBMENU_P(_T(MSG_RENAME), lcd_rename_sheet_menu); //// c=18 MENU_ITEM_SUBMENU_P(_T(MSG_V2_CALIBRATION), lcd_v2_calibration); ////MSG_V2_CALIBRATION c=17 r=1 MENU_END();