From 034cbff10a5c872b0cd2661f22d0fb0ccab08174 Mon Sep 17 00:00:00 2001 From: MRprusa3d Date: Tue, 16 Jul 2019 20:10:49 +0200 Subject: [PATCH] GUI updates --- Firmware/eeprom.h | 61 +++++++++++++++++++++++++++---------------- Firmware/messages.c | 1 + Firmware/messages.h | 1 + Firmware/ultralcd.cpp | 35 +++++++++++++++---------- Firmware/ultralcd.h | 3 ++- Firmware/util.cpp | 56 ++++++++++++++++++++++++++------------- 6 files changed, 102 insertions(+), 55 deletions(-) diff --git a/Firmware/eeprom.h b/Firmware/eeprom.h index 464a1fb0..54f30ccd 100644 --- a/Firmware/eeprom.h +++ b/Firmware/eeprom.h @@ -1,6 +1,35 @@ #ifndef EEPROM_H #define EEPROM_H +#include + +#ifdef __cplusplus +void eeprom_init(); +extern bool is_sheet_initialized(); +#endif + + +typedef struct +{ + 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 +{ + 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 34 + +#ifdef __cplusplus +static_assert(sizeof(Sheets) == EEPROM_SHEETS_SIZEOF, "Sizeof(Sheets) is not EEPROM_SHEETS_SIZEOF."); +#endif + #define EEPROM_EMPTY_VALUE 0xFF // The total size of the EEPROM is // 4096 for the Atmega2560 @@ -171,31 +200,17 @@ #define EEPROM_CHECK_VERSION (EEPROM_CHECK_MODEL-1) // uint8 #define EEPROM_CHECK_GCODE (EEPROM_CHECK_VERSION-1) // uint8 +#define EEPROM_SHEETS_BASE (EEPROM_CHECK_GCODE - EEPROM_SHEETS_SIZEOF) // Sheets +static Sheets * const EEPROM_Sheets_base = (Sheets*)(EEPROM_SHEETS_BASE); + + +//This is supposed to point to last item to allow EEPROM overrun check. Please update when adding new items. +#define EEPROM_LAST_ITEM EEPROM_SHEETS_BASE // !!!!! // !!!!! this is end of EEPROM section ... all updates MUST BE inserted before this mark !!!!! // !!!!! -//TMC2130 configuration -#define EEPROM_TMC_AXIS_SIZE //axis configuration block size -#define EEPROM_TMC_X (EEPROM_TMC + 0 * EEPROM_TMC_AXIS_SIZE) //X axis configuration blok -#define EEPROM_TMC_Y (EEPROM_TMC + 1 * EEPROM_TMC_AXIS_SIZE) //Y axis -#define EEPROM_TMC_Z (EEPROM_TMC + 2 * EEPROM_TMC_AXIS_SIZE) //Z axis -#define EEPROM_TMC_E (EEPROM_TMC + 3 * EEPROM_TMC_AXIS_SIZE) //E axis -//TMC2130 - X axis -#define EEPROM_TMC_X_USTEPS_INTPOL (EEPROM_TMC_X + 0) // 1byte, bit 0..4 USTEPS, bit 7 INTPOL -#define EEPROM_TMC_X_PWM_AMPL (EEPROM_TMC_X + 1) // 1byte (0..255) -#define EEPROM_TMC_X_PWM_GRAD_FREQ (EEPROM_TMC_X + 2) // 1byte, bit 0..3 GRAD, bit 4..5 FREQ -#define EEPROM_TMC_X_TCOOLTHRS (EEPROM_TMC_X + 3) // 2bytes (0..) -#define EEPROM_TMC_X_SG_THRS (EEPROM_TMC_X + 5) // 1byte, (-64..+63) -#define EEPROM_TMC_X_CURRENT_H (EEPROM_TMC_X + 6) // 1byte, (0..63) -#define EEPROM_TMC_X_CURRENT_R (EEPROM_TMC_X + 7) // 1byte, (0..63) -#define EEPROM_TMC_X_HOME_SG_THRS (EEPROM_TMC_X + 8) // 1byte, (-64..+63) -#define EEPROM_TMC_X_HOME_CURRENT_R (EEPROM_TMC_X + 9) // 1byte, (-64..+63) -#define EEPROM_TMC_X_HOME_DTCOOLTHRS (EEPROM_TMC_X + 10) // 1byte (-128..+127) -#define EEPROM_TMC_X_DTCOOLTHRS_LOW (EEPROM_TMC_X + 11) // 1byte (-128..+127) -#define EEPROM_TMC_X_DTCOOLTHRS_HIGH (EEPROM_TMC_X + 12) // 1byte (-128..+127) -#define EEPROM_TMC_X_SG_THRS_LOW (EEPROM_TMC_X + 13) // 1byte, (-64..+63) -#define EEPROM_TMC_X_SG_THRS_HIGH (EEPROM_TMC_X + 14) // 1byte, (-64..+63) + // Currently running firmware, each digit stored as uint16_t. // The flavor differentiates a dev, alpha, beta, release candidate or a release version. @@ -209,7 +224,9 @@ #ifdef __cplusplus #include "ConfigurationStore.h" -static M500_conf * const EEPROM_M500_base = reinterpret_cast(20); //offset for storing settings using M500 +static_assert(EEPROM_FIRMWARE_VERSION_END < 20, "Firmware version EEPROM address conflicts with EEPROM_M500_base"); +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 enum diff --git a/Firmware/messages.c b/Firmware/messages.c index 53ec20e8..1a87f6b0 100644 --- a/Firmware/messages.c +++ b/Firmware/messages.c @@ -83,6 +83,7 @@ const char MSG_SELFTEST_MOTOR[] PROGMEM_I1 = ISTR("Motor"); //// const char MSG_SELFTEST_FILAMENT_SENSOR[] PROGMEM_I1 = ISTR("Filament sensor"); ////c=17 const char MSG_SELFTEST_WIRINGERROR[] PROGMEM_I1 = ISTR("Wiring error"); //// const char MSG_SETTINGS[] PROGMEM_I1 = ISTR("Settings"); //// +const char MSG_HW_SETUP[] PROGMEM_I1 = ISTR("HW Setup"); //// const char MSG_SILENT_MODE_OFF[] PROGMEM_I1 = ISTR("Mode [high power]"); //// const char MSG_SILENT_MODE_ON[] PROGMEM_I1 = ISTR("Mode [silent]"); //// const char MSG_STEALTH_MODE_OFF[] PROGMEM_I1 = ISTR("Mode [Normal]"); //// diff --git a/Firmware/messages.h b/Firmware/messages.h index d74412fc..9c1110b9 100644 --- a/Firmware/messages.h +++ b/Firmware/messages.h @@ -83,6 +83,7 @@ extern const char MSG_SELFTEST_MOTOR[]; extern const char MSG_SELFTEST_FILAMENT_SENSOR[]; extern const char MSG_SELFTEST_WIRINGERROR[]; extern const char MSG_SETTINGS[]; +extern const char MSG_HW_SETUP[]; extern const char MSG_SILENT_MODE_OFF[]; extern const char MSG_SILENT_MODE_ON[]; extern const char MSG_STEALTH_MODE_OFF[]; diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 35ce0f63..76b4e04d 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -307,7 +307,7 @@ bool wait_for_unclick; #endif bool bMain; // flag (i.e. 'fake parameter') for 'lcd_sdcard_menu()' function -bool bSettings; // flag (i.e. 'fake parameter') for 'lcd_checkink_menu()' function +bool bSettings; // flag (i.e. 'fake parameter') for 'lcd_hw_setup_menu()' function @@ -5489,18 +5489,27 @@ do\ }\ while (0) -//-//static void lcd_checking_menu() -void lcd_checking_menu() +static void lcd_checking_menu(void) { MENU_BEGIN(); -MENU_ITEM_BACK_P(_T(bSettings?MSG_SETTINGS:MSG_BACK)); // i.e. default menu-item / menu-item after checking mismatch -SETTINGS_NOZZLE; -MENU_ITEM_TEXT_P(STR_SEPARATOR); -MENU_ITEM_TEXT_P(_i("Checks:")); +MENU_ITEM_BACK_P(_T(MSG_HW_SETUP)); SETTINGS_MODE; SETTINGS_MODEL; SETTINGS_VERSION; -SETTINGS_GCODE; +//-// temporarily disabled +//SETTINGS_GCODE; +MENU_END(); +} + +void lcd_hw_setup_menu(void) // can not be "static" +{ +MENU_BEGIN(); +MENU_ITEM_BACK_P(_T(bSettings?MSG_SETTINGS:MSG_BACK)); // i.e. default menu-item / menu-item after checking mismatch +if(!farm_mode) + SETTINGS_NOZZLE; +// ... a sem prijdou 'plechy' +if(!farm_mode) + MENU_ITEM_SUBMENU_P(_i("Checks"), lcd_checking_menu); MENU_END(); } @@ -5528,6 +5537,10 @@ static void lcd_settings_menu() MENU_ITEM_FUNCTION_P(_i("Fans check [off]"), lcd_set_fan_check);////MSG_FANS_CHECK_OFF c=17 r=1 SETTINGS_SILENT_MODE; + + bSettings=true; // flag ('fake parameter') for 'lcd_hw_setup_menu()' function + MENU_ITEM_SUBMENU_P(_i("HW Setup"), lcd_hw_setup_menu);////MSG_HW_SETUP + SETTINGS_MMU_MODE; MENU_ITEM_SUBMENU_P(_i("Mesh bed leveling"), lcd_mesh_bed_leveling_settings);////MSG_MBL_SETTINGS c=18 r=1 @@ -5555,12 +5568,6 @@ static void lcd_settings_menu() MENU_ITEM_SUBMENU_P(_i("Select language"), lcd_language_menu);////MSG_LANGUAGE_SELECT #endif //(LANG_MODE != 0) - if (!farm_mode) - { - bSettings=true; // flag ('fake parameter') for 'lcd_checking_menu()' function - MENU_ITEM_SUBMENU_P(_i("Print checking"), lcd_checking_menu); - } - SETTINGS_SD; SETTINGS_SOUND; diff --git a/Firmware/ultralcd.h b/Firmware/ultralcd.h index a4abd106..1760c3c1 100755 --- a/Firmware/ultralcd.h +++ b/Firmware/ultralcd.h @@ -137,7 +137,8 @@ void lcd_ignore_click(bool b=true); void lcd_commands(); -extern bool bSettings; // flag (i.e. 'fake parameter') for 'lcd_checkink_menu()' function +extern bool bSettings; // flag (i.e. 'fake parameter') for 'lcd_hw_setup_menu()' function +void lcd_hw_setup_menu(void); // NOT static due to using inside "util" module ("nozzle_diameter_check()") void change_extr(int extr); diff --git a/Firmware/util.cpp b/Firmware/util.cpp index 490f2897..f8ad87d4 100644 --- a/Firmware/util.cpp +++ b/Firmware/util.cpp @@ -330,7 +330,7 @@ void update_current_firmware_version_to_eeprom() //-// -void lcd_checking_menu(void); +#define MSG_PRINT_CHECKING_FAILED_TIMEOUT 30 ClNozzleDiameter oNozzleDiameter=ClNozzleDiameter::_Diameter_400; ClCheckMode oCheckMode=ClCheckMode::_None; @@ -385,7 +385,7 @@ nDiameter_um=eeprom_read_word((uint16_t*)EEPROM_NOZZLE_DIAMETER_uM); if(nDiameter==nDiameter_um) return; //SERIAL_ECHO_START; -//SERIAL_ECHOLNPGM("Nozzle diameter doesn't match ..."); +//SERIAL_ECHOLNPGM("Printer nozzle diameter differs from the G-code ..."); //SERIAL_ECHOPGM("actual : "); //SERIAL_ECHOLN((float)(nDiameter_um/1000.0)); //SERIAL_ECHOPGM("expected: "); @@ -393,15 +393,19 @@ if(nDiameter==nDiameter_um) switch(oCheckMode) { case ClCheckMode::_Warn: - lcd_show_fullscreen_message_and_wait_P(_i("Nozzle diameter doesn't match! Press the knob to continue.")); +// lcd_show_fullscreen_message_and_wait_P(_i("Printer nozzle diameter differs from the G-code. Continue?")); +lcd_display_message_fullscreen_P(_i("Printer nozzle diameter differs from the G-code. Continue?")); +lcd_wait_for_click_delay(MSG_PRINT_CHECKING_FAILED_TIMEOUT); +//???custom_message_type=CUSTOM_MSG_TYPE_STATUS; // display / status-line recovery +lcd_update_enable(true); // display / status-line recovery break; case ClCheckMode::_Strict: - lcd_show_fullscreen_message_and_wait_P(_i("Nozzle diameter doesn't match! Print is aborted, press the knob.")); + lcd_show_fullscreen_message_and_wait_P(_i("Printer nozzle diameter differs from the G-code. Please check the value in settings. Print cancelled.")); lcd_print_stop(); break; } -bSettings=false; // flag ('fake parameter') for 'lcd_checking_menu()' function -menu_submenu(lcd_checking_menu); +bSettings=false; // flag ('fake parameter') for 'lcd_hw_setup_menu()' function +menu_submenu(lcd_hw_setup_menu); } void printer_model_check(uint16_t nPrinterModel) @@ -411,7 +415,7 @@ if(oCheckModel==ClCheckModel::_None) if(nPrinterModel==nPrinterType) return; //SERIAL_ECHO_START; -//SERIAL_ECHOLNPGM("Printer model doesn't match ..."); +//SERIAL_ECHOLNPGM("Printer model differs from the G-code ..."); //SERIAL_ECHOPGM("actual : "); //SERIAL_ECHOLN(nPrinterType); //SERIAL_ECHOPGM("expected: "); @@ -419,10 +423,14 @@ if(nPrinterModel==nPrinterType) switch(oCheckModel) { case ClCheckModel::_Warn: - lcd_show_fullscreen_message_and_wait_P(_i("Printer model doesn't match! Press the knob to continue.")); +// lcd_show_fullscreen_message_and_wait_P(_i("Printer model differs from the G-code. Continue?")); +lcd_display_message_fullscreen_P(_i("Printer model differs from the G-code. Continue?")); +lcd_wait_for_click_delay(MSG_PRINT_CHECKING_FAILED_TIMEOUT); +//???custom_message_type=CUSTOM_MSG_TYPE_STATUS; // display / status-line recovery +lcd_update_enable(true); // display / status-line recovery break; case ClCheckModel::_Strict: - lcd_show_fullscreen_message_and_wait_P(_i("Printer model doesn't match! Print is aborted, press the knob.")); + lcd_show_fullscreen_message_and_wait_P(_i("Printer model differs from the G-code. Please check the value in settings. Print cancelled.")); lcd_print_stop(); break; } @@ -454,7 +462,7 @@ if(nCompareValueResult==COMPARE_VALUE_EQUAL) if((nCompareValueResult