From 96435ad0849cb44a632afb64f69de945e2c4e71e Mon Sep 17 00:00:00 2001 From: Alex Voinea Date: Wed, 12 Aug 2020 08:48:12 +0300 Subject: [PATCH 1/5] Move experimental menu to HW setup --- Firmware/ultralcd.cpp | 43 ++++++++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 68378698..c4b28736 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -2096,9 +2096,6 @@ static void lcd_preheat_menu() //! @code{.unparsed} //! | Voltages | MSG_MENU_VOLTAGES //! @endcode -//! -//! -//! | Experimental | c=18 //! //! //! If DEBUG_BUILD is defined @@ -2111,12 +2108,11 @@ static void lcd_preheat_menu() static void lcd_support_menu() { typedef struct - { // 23bytes total + { // 22bytes total int8_t status; // 1byte bool is_flash_air; // 1byte uint8_t ip[4]; // 4bytes char ip_str[3*4+3+1]; // 16bytes - uint8_t experimental_menu_visibility; // 1byte } _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]); @@ -2131,13 +2127,6 @@ static void lcd_support_menu() _md->ip[0], _md->ip[1], _md->ip[2], _md->ip[3]); - _md->experimental_menu_visibility = eeprom_read_byte((uint8_t *)EEPROM_EXPERIMENTAL_VISIBILITY); - if (_md->experimental_menu_visibility == EEPROM_EMPTY_VALUE) - { - _md->experimental_menu_visibility = 0; - eeprom_update_byte((uint8_t *)EEPROM_EXPERIMENTAL_VISIBILITY, _md->experimental_menu_visibility); - } - } else if (_md->is_flash_air && _md->ip[0] == 0 && _md->ip[1] == 0 && _md->ip[2] == 0 && _md->ip[3] == 0 && @@ -2222,11 +2211,6 @@ static void lcd_support_menu() MENU_ITEM_SUBMENU_P(_i("Voltages"), lcd_menu_voltages);////MSG_MENU_VOLTAGES c=18 r=1 #endif //defined VOLT_BED_PIN || defined VOLT_PWR_PIN - if (_md->experimental_menu_visibility) - { - MENU_ITEM_SUBMENU_P(PSTR("Experimental"), lcd_experimental_menu);////MSG_MENU_EXPERIMENTAL c=18 - } - #ifdef DEBUG_BUILD MENU_ITEM_SUBMENU_P(PSTR("Debug"), lcd_menu_debug);////c=18 r=1 @@ -5730,6 +5714,25 @@ static void sheets_menu() void lcd_hw_setup_menu(void) // can not be "static" { + typedef struct + {// 2bytes total + int8_t status; + uint8_t experimental_menu_visibility; + } _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]); + + if (_md->status == 0 || lcd_draw_update) + { + _md->experimental_menu_visibility = eeprom_read_byte((uint8_t *)EEPROM_EXPERIMENTAL_VISIBILITY); + if (_md->experimental_menu_visibility == EEPROM_EMPTY_VALUE) + { + _md->experimental_menu_visibility = 0; + eeprom_update_byte((uint8_t *)EEPROM_EXPERIMENTAL_VISIBILITY, _md->experimental_menu_visibility); + } + } + + MENU_BEGIN(); MENU_ITEM_BACK_P(_T(bSettings?MSG_SETTINGS:MSG_BACK)); // i.e. default menu-item / menu-item after checking mismatch @@ -5743,6 +5746,12 @@ void lcd_hw_setup_menu(void) // can not be "static" //! @todo Don't forget to remove this as soon Fsensor Detection works with mmu if(!mmu_enabled) MENU_ITEM_FUNCTION_P(PSTR("Fsensor Detection"), lcd_detect_IRsensor); #endif //IR_SENSOR_ANALOG + + if (_md->experimental_menu_visibility) + { + MENU_ITEM_SUBMENU_P(PSTR("Experimental"), lcd_experimental_menu);////MSG_MENU_EXPERIMENTAL c=18 + } + MENU_END(); } From 6b853a4cc335d513a949b3530662e8fa5575bdf8 Mon Sep 17 00:00:00 2001 From: Alex Voinea Date: Wed, 12 Aug 2020 12:19:08 +0300 Subject: [PATCH 2/5] Auto-detect ALTFAN after fw. update --- Firmware/temperature.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Firmware/temperature.cpp b/Firmware/temperature.cpp index f08c682a..f01fbab2 100755 --- a/Firmware/temperature.cpp +++ b/Firmware/temperature.cpp @@ -232,7 +232,7 @@ bool extruder_altfan_detect() uint8_t overrideVal = eeprom_read_byte((uint8_t *)EEPROM_ALTFAN_OVERRIDE); if (overrideVal == EEPROM_EMPTY_VALUE) { - overrideVal = 0; + overrideVal = (calibration_status() == CALIBRATION_STATUS_CALIBRATED) ? 1 : 0; eeprom_update_byte((uint8_t *)EEPROM_ALTFAN_OVERRIDE, overrideVal); } altfanStatus.altfanOverride = overrideVal; From 5530b99882c90bbc67b69eb18d64743abf4643ab Mon Sep 17 00:00:00 2001 From: Alex Voinea Date: Wed, 12 Aug 2020 12:46:35 +0300 Subject: [PATCH 3/5] Reboot after factory reset --- Firmware/Dcodes.cpp | 13 ++++--------- Firmware/Marlin.h | 2 ++ Firmware/Marlin_main.cpp | 11 ++++++++--- Firmware/bootapp.c | 8 ++++---- 4 files changed, 18 insertions(+), 16 deletions(-) diff --git a/Firmware/Dcodes.cpp b/Firmware/Dcodes.cpp index 1f902c5e..85d78001 100644 --- a/Firmware/Dcodes.cpp +++ b/Firmware/Dcodes.cpp @@ -226,9 +226,7 @@ void dcode_0() LOG("D0 - Reset\n"); if (code_seen('B')) //bootloader { - cli(); - wdt_enable(WDTO_15MS); - while(1); + softReset(); } else //reset { @@ -252,8 +250,7 @@ void dcode_1() cli(); for (int i = 0; i < 8192; i++) eeprom_write_byte((unsigned char*)i, (unsigned char)0xff); - wdt_enable(WDTO_15MS); - while(1); + softReset(); } /*! @@ -420,8 +417,7 @@ void dcode_5() boot_dst_addr = (uint32_t)address; boot_src_addr = (uint32_t)(&data); bootapp_print_vars(); - wdt_enable(WDTO_15MS); - while(1); + softReset(); } while (count) { @@ -467,8 +463,7 @@ void dcode_7() boot_copy_size = (uint16_t)0xc00; boot_src_addr = (uint32_t)0x0003e400; boot_dst_addr = (uint32_t)0x0003f400; - wdt_enable(WDTO_15MS); - while(1); + softReset(); */ } diff --git a/Firmware/Marlin.h b/Firmware/Marlin.h index 5c03552b..2585d0c8 100755 --- a/Firmware/Marlin.h +++ b/Firmware/Marlin.h @@ -512,4 +512,6 @@ void load_filament_final_feed(); void marlin_wait_for_click(); void raise_z_above(float target, bool plan=true); +void softReset(); + #endif diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 2a261db2..fa02a956 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -762,6 +762,7 @@ static void factory_reset(char level) } } + softReset(); break; @@ -3813,9 +3814,7 @@ void process_commands() #if (defined(WATCHDOG) && (MOTHERBOARD == BOARD_EINSY_1_0a)) boot_app_magic = BOOT_APP_MAGIC; boot_app_flags = BOOT_APP_FLG_RUN; - wdt_enable(WDTO_15MS); - cli(); - while(1); + softReset(); #else //WATCHDOG asm volatile("jmp 0x3E000"); #endif //WATCHDOG @@ -11716,6 +11715,12 @@ void disable_force_z() #endif // TMC2130 } +void softReset() +{ + cli(); + wdt_enable(WDTO_15MS); + while(1); +} void enable_force_z() { diff --git a/Firmware/bootapp.c b/Firmware/bootapp.c index 4fd67db2..c4585af5 100644 --- a/Firmware/bootapp.c +++ b/Firmware/bootapp.c @@ -9,6 +9,8 @@ extern FILE _uartout; #define uartout (&_uartout) +extern void softReset(); + void bootapp_print_vars(void) { fprintf_P(uartout, PSTR("boot_src_addr =0x%08lx\n"), boot_src_addr); @@ -39,8 +41,7 @@ void bootapp_ram2flash(uint16_t rptr, uint16_t fptr, uint16_t size) boot_src_addr = (uint32_t)rptr; boot_dst_addr = (uint32_t)fptr; bootapp_print_vars(); - wdt_enable(WDTO_15MS); - while(1); + softReset(); } void bootapp_reboot_user0(uint8_t reserved) @@ -50,6 +51,5 @@ void bootapp_reboot_user0(uint8_t reserved) boot_app_flags = BOOT_APP_FLG_USER0; boot_reserved = reserved; bootapp_print_vars(); - wdt_enable(WDTO_15MS); - while(1); + softReset(); } From 8d9dc73d1b8c06a7c7c4f308203227c6ee112bd1 Mon Sep 17 00:00:00 2001 From: Alex Voinea Date: Wed, 12 Aug 2020 17:25:49 +0300 Subject: [PATCH 4/5] Fix compile error fix compile Fix compile error --- Firmware/Dcodes.cpp | 2 +- Firmware/Marlin.h | 2 +- Firmware/Marlin_main.cpp | 13 ++++++------- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/Firmware/Dcodes.cpp b/Firmware/Dcodes.cpp index 85d78001..c77cd96e 100644 --- a/Firmware/Dcodes.cpp +++ b/Firmware/Dcodes.cpp @@ -1,5 +1,5 @@ #include "Dcodes.h" -//#include "Marlin.h" +#include "Marlin.h" #include "Configuration.h" #include "language.h" #include "cmdqueue.h" diff --git a/Firmware/Marlin.h b/Firmware/Marlin.h index 2585d0c8..3a4b4259 100755 --- a/Firmware/Marlin.h +++ b/Firmware/Marlin.h @@ -512,6 +512,6 @@ void load_filament_final_feed(); void marlin_wait_for_click(); void raise_z_above(float target, bool plan=true); -void softReset(); +extern "C" void softReset(); #endif diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index fa02a956..a83d64b8 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -648,6 +648,12 @@ void failstats_reset_print() #endif } +void softReset() +{ + cli(); + wdt_enable(WDTO_15MS); + while(1); +} #ifdef MESH_BED_LEVELING @@ -11715,13 +11721,6 @@ void disable_force_z() #endif // TMC2130 } -void softReset() -{ - cli(); - wdt_enable(WDTO_15MS); - while(1); -} - void enable_force_z() { if(bEnableForce_z) From 90c36a588746e2d53c9d41acc6a8de08ecb57c27 Mon Sep 17 00:00:00 2001 From: 3d-gussner <3d.gussner@gmail.com> Date: Thu, 20 Aug 2020 15:14:39 +0200 Subject: [PATCH 5/5] Update ALTFAN eeprom documentation EEPROM_ALTFAN_OVERRIDE and EEPROM_EXPERIMENTAL_VISIBILITY are compared to 0xFF in the code that's why I keep the uint8. --- Firmware/eeprom.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Firmware/eeprom.h b/Firmware/eeprom.h index b8bec384..5cb7ddb8 100644 --- a/Firmware/eeprom.h +++ b/Firmware/eeprom.h @@ -359,8 +359,12 @@ static_assert(sizeof(Sheets) == EEPROM_SHEETS_SIZEOF, "Sizeof(Sheets) is not EEP | ^ | ^ | ^ | 00h 0 | ^ | LCD backlight mode: __Dim__ | ^ | ^ | 0x0D30 3376 | uint16 | EEPROM_BACKLIGHT_TIMEOUT | 01 00 - ff ff | 0a 00h 65535 | LCD backlight timeout: __10__ seconds | LCD menu | D3 Ax0d30 C2 | 0x0D2C 3372 | float | EEPROM_UVLO_LA_K | ??? | ff ff ff ffh | Power panic saved Linear Advanced K value | ??? | D3 Ax0d2c C4 -| 0x0D2B 3371 | uint8 | EEPROM_ALTFAN_OVERRIDE | 0-1 | 00h 0 | ALTFAN override | LCD menu | D3 Ax0d2b C1 -| 0x0D2A 3370 | uint8 | EEPROM_EXPERIMENTAL_VISIBILITY | 0-1 | 00h 0 | Experimental menu visibility | LCD menu | D3 Ax0d2a C1 +| 0x0D2B 3371 | uint8 | EEPROM_ALTFAN_OVERRIDE | ffh 255 | ffh 255 | ALTFAN override unknown state | LCD menu | D3 Ax0d2b C1 +| ^ | ^ | ^ | 00h 0 | ^ | ALTFAN override deactivated | ^ | ^ +| ^ | ^ | ^ | 01h 1 | ^ | ALTFAN override activated | ^ | ^ +| 0x0D2A 3370 | uint8 | EEPROM_EXPERIMENTAL_VISIBILITY | ffh 255 | ffh 255 | Experimental menu visibility unknown state | LCD menu | D3 Ax0d2a C1 +| ^ | ^ | ^ | 00h 0 | ^ | Experimental menu visibility hidden | ^ | ^ +| ^ | ^ | ^ | 01h 1 | ^ | Experimental menu visibility visible | ^ | ^ | Address begin | Bit/Type | Name | Valid values | Default/FactoryReset | Description | Gcode/Function| Debug code