Skip to content

Commit 698b52b

Browse files
thinkyheadernisv
authored andcommitted
🚸 Improve EEPROM validation (MarlinFirmware#25860)
1 parent a3df598 commit 698b52b

19 files changed

+210
-101
lines changed

Marlin/src/core/language.h

+1
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,7 @@
192192
#define STR_ERR_LONG_EXTRUDE_STOP " too long extrusion prevented"
193193
#define STR_ERR_HOTEND_TOO_COLD "Hotend too cold"
194194
#define STR_ERR_EEPROM_WRITE "Error writing to EEPROM!"
195+
#define STR_ERR_EEPROM_CORRUPT "EEPROM Corrupt"
195196

196197
#define STR_FILAMENT_CHANGE_HEAT_LCD "Press button to heat nozzle"
197198
#define STR_FILAMENT_CHANGE_INSERT_LCD "Insert filament and press button"

Marlin/src/lcd/language/language_de.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -414,7 +414,7 @@ namespace Language_de {
414414
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Standardwerte laden");
415415
LSTR MSG_INIT_EEPROM = _UxGT("Werkseinstellungen");
416416
LSTR MSG_ERR_EEPROM_CRC = _UxGT("EEPROM CRC Fehler");
417-
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("EEPROM Index Fehler");
417+
LSTR MSG_ERR_EEPROM_SIZE = _UxGT("EEPROM Größe Fehler");
418418
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("EEPROM Version Fehler");
419419
LSTR MSG_SETTINGS_STORED = _UxGT("Einstell. gespei.");
420420
LSTR MSG_MEDIA_UPDATE = _UxGT("FW Update vom Medium");

Marlin/src/lcd/language/language_en.h

+4-3
Original file line numberDiff line numberDiff line change
@@ -445,9 +445,10 @@ namespace Language_en {
445445
LSTR MSG_LOAD_EEPROM = _UxGT("Load Settings");
446446
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Restore Defaults");
447447
LSTR MSG_INIT_EEPROM = _UxGT("Initialize EEPROM");
448-
LSTR MSG_ERR_EEPROM_CRC = _UxGT("EEPROM CRC Error");
449-
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("EEPROM Index Error");
450-
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("EEPROM Version Error");
448+
LSTR MSG_ERR_EEPROM_CRC = _UxGT("Err: EEPROM CRC");
449+
LSTR MSG_ERR_EEPROM_SIZE = _UxGT("Err: EEPROM Size");
450+
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Err: EEPROM Version");
451+
LSTR MSG_ERR_EEPROM_CORRUPT = _UxGT("Err: EEPROM Corrupt");
451452
LSTR MSG_SETTINGS_STORED = _UxGT("Settings Stored");
452453
LSTR MSG_MEDIA_UPDATE = MEDIA_TYPE_EN _UxGT(" Update");
453454
LSTR MSG_RESET_PRINTER = _UxGT("Reset Printer");

Marlin/src/lcd/language/language_es.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ namespace Language_es {
315315
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Rest. fábrica");
316316
LSTR MSG_INIT_EEPROM = _UxGT("Inicializar EEPROM");
317317
LSTR MSG_ERR_EEPROM_CRC = _UxGT("Err: EEPROM CRC");
318-
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("Err: Índice EEPROM");
318+
LSTR MSG_ERR_EEPROM_SIZE = _UxGT("Err: EEPROM Tamaño");
319319
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Err: Versión EEPROM");
320320
LSTR MSG_MEDIA_UPDATE = _UxGT("Actualizar SD/FD");
321321
LSTR MSG_RESET_PRINTER = _UxGT("Resetear Impresora");

Marlin/src/lcd/language/language_gl.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,7 @@ namespace Language_gl {
317317
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Rest. Defecto");
318318
LSTR MSG_INIT_EEPROM = _UxGT("Inicializar EEPROM");
319319
LSTR MSG_ERR_EEPROM_CRC = _UxGT("Erro: CRC EEPROM");
320-
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("Erro: Índice EEPROM");
320+
LSTR MSG_ERR_EEPROM_SIZE = _UxGT("Erro: Tamaño EEPROM");
321321
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Erro: Versión EEPROM");
322322
LSTR MSG_SETTINGS_STORED = _UxGT("Config Gardada");
323323
LSTR MSG_MEDIA_UPDATE = _UxGT("Actualizar SD/FD");

Marlin/src/lcd/language/language_hu.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,7 @@ namespace Language_hu {
363363
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Alapértelmezett");
364364
LSTR MSG_INIT_EEPROM = _UxGT("EEPROM inicializálás");
365365
LSTR MSG_ERR_EEPROM_CRC = _UxGT("Hiba: EEPROM CRC");
366-
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("Hiba: EEPROM index");
366+
LSTR MSG_ERR_EEPROM_SIZE = _UxGT("Hiba: EEPROM mérete");
367367
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Hiba: EEPROM verzió");
368368
LSTR MSG_SETTINGS_STORED = _UxGT("Beállítások mentve");
369369
LSTR MSG_MEDIA_UPDATE = _UxGT("Tároló frissítés");

Marlin/src/lcd/language/language_it.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,7 @@ namespace Language_it {
451451
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Ripristina imp.");
452452
LSTR MSG_INIT_EEPROM = _UxGT("Inizializza EEPROM");
453453
LSTR MSG_ERR_EEPROM_CRC = _UxGT("Err: CRC EEPROM");
454-
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("Err: Indice EEPROM");
454+
LSTR MSG_ERR_EEPROM_SIZE = _UxGT("Err: Taglia EEPROM");
455455
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Err: Versione EEPROM");
456456
LSTR MSG_SETTINGS_STORED = _UxGT("Impostazioni mem.");
457457
LSTR MSG_MEDIA_UPDATE = _UxGT("Aggiorna media");

Marlin/src/lcd/language/language_ro.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -317,9 +317,9 @@ namespace Language_ro {
317317
LSTR MSG_LOAD_EEPROM = _UxGT("Load Settings");
318318
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Restore Defaults");
319319
LSTR MSG_INIT_EEPROM = _UxGT("Initialize EEPROM");
320-
LSTR MSG_ERR_EEPROM_CRC = _UxGT("EEPROM CRC Error");
321-
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("EEPROM Index Error");
322-
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("EEPROM Version Error");
320+
LSTR MSG_ERR_EEPROM_CRC = _UxGT("Err: EEPROM CRC");
321+
LSTR MSG_ERR_EEPROM_SIZE = _UxGT("Err: Mărimea EEPROM");
322+
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Err: Versiunea EEPROM");
323323
LSTR MSG_SETTINGS_STORED = _UxGT("Settings Stored");
324324
LSTR MSG_MEDIA_UPDATE = _UxGT("Media Update");
325325
LSTR MSG_RESET_PRINTER = _UxGT("Reset Imprimanta");

Marlin/src/lcd/language/language_ru.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -454,7 +454,7 @@ namespace Language_ru {
454454
LSTR MSG_INIT_EEPROM = _UxGT("Инициализ. EEPROM");
455455
#endif
456456
LSTR MSG_ERR_EEPROM_CRC = _UxGT("Сбой EEPROM: CRC");
457-
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("Сбой EEPROM: индекс");
457+
LSTR MSG_ERR_EEPROM_SIZE = _UxGT("Сбой EEPROM: размер");
458458
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Сбой EEPROM: версия");
459459
LSTR MSG_SETTINGS_STORED = _UxGT("Параметры сохранены");
460460
LSTR MSG_MEDIA_UPDATE = _UxGT("Обновление прошивки");

Marlin/src/lcd/language/language_sk.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -452,7 +452,7 @@ namespace Language_sk {
452452
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Obnoviť nastavenie");
453453
LSTR MSG_INIT_EEPROM = _UxGT("Inicializ. EEPROM");
454454
LSTR MSG_ERR_EEPROM_CRC = _UxGT("Chyba: EEPROM CRC");
455-
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("Chyba: EEPROM Index");
455+
LSTR MSG_ERR_EEPROM_SIZE = _UxGT("Chyba: Veľkosť EEPROM");
456456
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Chyba: Verzia EEPROM");
457457
LSTR MSG_SETTINGS_STORED = _UxGT("Nastavenie uložené");
458458
LSTR MSG_MEDIA_UPDATE = _UxGT("Aktualiz. z karty");

Marlin/src/lcd/language/language_sv.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,7 @@ namespace Language_sv {
348348
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Återställ Standard");
349349
LSTR MSG_INIT_EEPROM = _UxGT("Initiera EEPROM");
350350
LSTR MSG_ERR_EEPROM_CRC = _UxGT("EEPROM CRC Fel");
351-
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("EEPROM Index Fel");
351+
LSTR MSG_ERR_EEPROM_SIZE = _UxGT("EEPROM Storlek Fel");
352352
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("EEPROM Version Fel");
353353
LSTR MSG_SETTINGS_STORED = _UxGT("Inställningar Lagrad");
354354
LSTR MSG_MEDIA_UPDATE = _UxGT("Media Uppdatera");

Marlin/src/lcd/language/language_tr.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -431,7 +431,7 @@ namespace Language_tr {
431431
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Fabrika Ayarları");
432432
LSTR MSG_INIT_EEPROM = _UxGT("EEPROM'u başlat");
433433
LSTR MSG_ERR_EEPROM_CRC = _UxGT("Hata: EEPROM CRC");
434-
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("Hata: EEPROM Indeks");
434+
LSTR MSG_ERR_EEPROM_SIZE = _UxGT("Hata: EEPROM Boyutu");
435435
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Hata: EEPROM Sürümü");
436436
LSTR MSG_SETTINGS_STORED = _UxGT("Ayarlar Kaydedildi");
437437
LSTR MSG_MEDIA_UPDATE = _UxGT("SD Güncellemesi");

Marlin/src/lcd/language/language_uk.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -465,7 +465,7 @@ namespace Language_uk {
465465
LSTR MSG_INIT_EEPROM = _UxGT("Ініціаліз. EEPROM");
466466
#endif
467467
LSTR MSG_ERR_EEPROM_CRC = _UxGT("Збій EEPROM: CRC");
468-
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("Збій EEPROM: індекс");
468+
LSTR MSG_ERR_EEPROM_SIZE = _UxGT("Збій EEPROM: розмір");
469469
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Збій EEPROM: версія");
470470
LSTR MSG_SETTINGS_STORED = _UxGT("Параметри збережені");
471471
LSTR MSG_MEDIA_UPDATE = _UxGT("Оновити SD-картку");

Marlin/src/lcd/language/language_zh_CN.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -317,9 +317,9 @@ namespace Language_zh_CN {
317317
LSTR MSG_LOAD_EEPROM = _UxGT("装载设置"); // "Load memory"
318318
LSTR MSG_RESTORE_DEFAULTS = _UxGT("恢复安全值"); // "Restore Defaults"
319319
LSTR MSG_INIT_EEPROM = _UxGT("初始化设置"); // "Initialize EEPROM"
320-
LSTR MSG_ERR_EEPROM_CRC = _UxGT("EEPROM CRC 错误");
321-
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("EEPROM Index 错误");
322-
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("EEPROM Version 错误");
320+
LSTR MSG_ERR_EEPROM_CRC = _UxGT("EEPROM 校验和 错误");
321+
LSTR MSG_ERR_EEPROM_SIZE = _UxGT("EEPROM 尺寸 错误");
322+
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("EEPROM 版本 错误");
323323
LSTR MSG_SETTINGS_STORED = _UxGT("设置已保存");
324324
LSTR MSG_MEDIA_UPDATE = _UxGT("存储器更新");
325325
LSTR MSG_RESET_PRINTER = _UxGT("复位打印机");

Marlin/src/lcd/language/language_zh_TW.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -299,8 +299,8 @@ namespace Language_zh_TW {
299299
LSTR MSG_RESTORE_DEFAULTS = _UxGT("恢復安全值"); // "Restore failsafe"
300300
LSTR MSG_INIT_EEPROM = _UxGT("初始化設置"); // "Initialize EEPROM"
301301
LSTR MSG_ERR_EEPROM_CRC = _UxGT("錯誤: EEPROM CRC"); // "Err: EEPROM CRC"
302-
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("錯誤: EEPROM Index"); // "Err: EEPROM Index"
303-
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("錯誤: EEPROM Version"); // "EEPROM Version"
302+
LSTR MSG_ERR_EEPROM_SIZE = _UxGT("錯誤: EEPROM 尺寸"); // "Err: EEPROM Index"
303+
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("錯誤: EEPROM 版本"); // "EEPROM Version"
304304
LSTR MSG_MEDIA_UPDATE = _UxGT("媒體更新"); // "Media Update"
305305
LSTR MSG_RESET_PRINTER = _UxGT("重置打印機"); // "Reset Printer
306306
LSTR MSG_REFRESH = _UxGT("刷新"); // "Refresh"

Marlin/src/lcd/marlinui.cpp

+13-11
Original file line numberDiff line numberDiff line change
@@ -1899,30 +1899,32 @@ void MarlinUI::init() {
18991899

19001900
#if DISABLED(EEPROM_AUTO_INIT)
19011901

1902-
static inline FSTR_P eeprom_err(const uint8_t msgid) {
1903-
switch (msgid) {
1904-
default:
1905-
case 0: return GET_TEXT_F(MSG_ERR_EEPROM_CRC);
1906-
case 1: return GET_TEXT_F(MSG_ERR_EEPROM_INDEX);
1907-
case 2: return GET_TEXT_F(MSG_ERR_EEPROM_VERSION);
1902+
static inline FSTR_P eeprom_err(const EEPROM_Error err) {
1903+
switch (err) {
1904+
case ERR_EEPROM_VERSION: return GET_TEXT_F(MSG_ERR_EEPROM_VERSION);
1905+
case ERR_EEPROM_SIZE: return GET_TEXT_F(MSG_ERR_EEPROM_SIZE);
1906+
case ERR_EEPROM_CRC: return GET_TEXT_F(MSG_ERR_EEPROM_CRC);
1907+
case ERR_EEPROM_CORRUPT: return GET_TEXT_F(MSG_ERR_EEPROM_CORRUPT);
1908+
default: return nullptr;
19081909
}
19091910
}
19101911

1911-
void MarlinUI::eeprom_alert(const uint8_t msgid) {
1912+
void MarlinUI::eeprom_alert(const EEPROM_Error err) {
1913+
FSTR_P const err_msg = eeprom_err(err);
1914+
set_status(err_msg);
1915+
TERN_(HOST_PROMPT_SUPPORT, hostui.notify(err_msg));
19121916
#if HAS_MARLINUI_MENU
1913-
editable.uint8 = msgid;
1917+
editable.uint8 = err;
19141918
goto_screen([]{
19151919
FSTR_P const restore_msg = GET_TEXT_F(MSG_INIT_EEPROM);
19161920
char msg[utf8_strlen(restore_msg) + 1];
19171921
strcpy_P(msg, FTOP(restore_msg));
19181922
MenuItem_confirm::select_screen(
19191923
GET_TEXT_F(MSG_BUTTON_RESET), GET_TEXT_F(MSG_BUTTON_IGNORE),
19201924
init_eeprom, return_to_status,
1921-
eeprom_err(editable.uint8), msg, F("?")
1925+
eeprom_err((EEPROM_Error)editable.uint8), msg, F("?")
19221926
);
19231927
});
1924-
#else
1925-
set_status(eeprom_err(msgid));
19261928
#endif
19271929
}
19281930

Marlin/src/lcd/marlinui.h

+5-6
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@
2727
#include "../libs/buzzer.h"
2828
#include "buttons.h"
2929

30+
#if ENABLED(EEPROM_SETTINGS)
31+
#include "../module/settings.h"
32+
#endif
33+
3034
#if ENABLED(TOUCH_SCREEN_CALIBRATION)
3135
#include "tft_io/touch_calibration.h"
3236
#endif
@@ -672,12 +676,7 @@ class MarlinUI {
672676
static void load_settings();
673677
static void store_settings();
674678
#endif
675-
#if DISABLED(EEPROM_AUTO_INIT)
676-
static void eeprom_alert(const uint8_t msgid);
677-
static void eeprom_alert_crc() { eeprom_alert(0); }
678-
static void eeprom_alert_index() { eeprom_alert(1); }
679-
static void eeprom_alert_version() { eeprom_alert(2); }
680-
#endif
679+
static void eeprom_alert(const EEPROM_Error) TERN_(EEPROM_AUTO_INIT, {});
681680
#endif
682681

683682
//

0 commit comments

Comments
 (0)