From c4e0fdbabd69b2b6de5f72719ebc4f5f65c78a96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Sun, 12 Jan 2025 17:50:26 +0000 Subject: [PATCH 1/2] fsensor: toggle on/off should use EEPROM value --- Firmware/ultralcd.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index a73d072b2..64ae8e530 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -4047,7 +4047,8 @@ static void fsensor_reinit() { } static void lcd_fsensor_enabled_set(void) { - fsensor.setEnabled(!fsensor.isEnabled()); + bool current_setting = eeprom_read_byte((uint8_t *)EEPROM_FSENSOR); + fsensor.setEnabled(!current_setting); } static void lcd_fsensor_runout_set() { @@ -4084,7 +4085,7 @@ static void lcd_fsensor_settings_menu() { MENU_BEGIN(); MENU_ITEM_BACK_P(_T(MSG_BACK)); - MENU_ITEM_TOGGLE_P(_T(MSG_FSENSOR), fsensor.isEnabled() ? _T(MSG_ON) : _T(MSG_OFF), lcd_fsensor_enabled_set); + MENU_ITEM_TOGGLE_P(_T(MSG_FSENSOR), eeprom_read_byte((uint8_t *)EEPROM_FSENSOR) ? _T(MSG_ON) : _T(MSG_OFF), lcd_fsensor_enabled_set); if (fsensor.isEnabled()) { if (fsensor.isError()) { From 7c99014c9dbca48481b2f8ab061e2b4b19f8c1e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Sun, 12 Jan 2025 18:49:27 +0000 Subject: [PATCH 2/2] fsensor: Use isReady instead of isEnabled isEnabled() returns true if the filament sensor state machine is in error state. In most situations we don't want that. It is sufficient to check if the filament sensor state machine is in Ready state. --- Firmware/ultralcd.cpp | 4 ++-- Firmware/util.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 64ae8e530..733999dcc 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -4380,7 +4380,7 @@ static void sheets_menu() static void nozzle_change() { #ifdef FILAMENT_SENSOR - if (fsensor.isEnabled() && fsensor.getFilamentPresent()) { + if (fsensor.isReady() && fsensor.getFilamentPresent()) { lcd_show_fullscreen_message_and_wait_P(_T(MSG_UNLOAD_FILAMENT_REPEAT)); lcd_return_to_status(); return; @@ -5348,7 +5348,7 @@ static void lcd_main_menu() #endif //MMU_HAS_CUTTER } else { #ifdef FILAMENT_SENSOR - if (fsensor.isEnabled()) { + if (fsensor.isReady()) { if (!fsensor.getAutoLoadEnabled()) { MENU_ITEM_SUBMENU_P(_T(MSG_LOAD_FILAMENT), lcd_LoadFilament); } diff --git a/Firmware/util.cpp b/Firmware/util.cpp index e9bd9017b..8611ac27b 100644 --- a/Firmware/util.cpp +++ b/Firmware/util.cpp @@ -379,7 +379,7 @@ bool filament_presence_check() { goto done; } - if (fsensor.isEnabled() && !fsensor.getFilamentPresent()) { + if (fsensor.isReady() && !fsensor.getFilamentPresent()) { if (oCheckFilament == ClCheckMode::_None) { goto done; }