Skip to content

Commit cce4a4f

Browse files
thinkyheadAndy-Big
authored andcommitted
🚸 Improve EEPROM validation (MarlinFirmware#25860)
1 parent c734e11 commit cce4a4f

19 files changed

+211
-102
lines changed

Marlin/src/core/language.h

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

197198
#define STR_FILAMENT_CHANGE_HEAT_LCD "Press button to heat nozzle"
198199
#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
@@ -460,9 +460,10 @@ namespace Language_en {
460460
LSTR MSG_LOAD_CONFIG_FILE = _UxGT("Load Settings from file");
461461
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Restore Defaults");
462462
LSTR MSG_INIT_EEPROM = _UxGT("Initialize EEPROM");
463-
LSTR MSG_ERR_EEPROM_CRC = _UxGT("EEPROM CRC Error");
464-
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("EEPROM Index Error");
465-
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("EEPROM Version Error");
463+
LSTR MSG_ERR_EEPROM_CRC = _UxGT("Err: EEPROM CRC");
464+
LSTR MSG_ERR_EEPROM_SIZE = _UxGT("Err: EEPROM Size");
465+
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Err: EEPROM Version");
466+
LSTR MSG_ERR_EEPROM_CORRUPT = _UxGT("Err: EEPROM Corrupt");
466467
LSTR MSG_SETTINGS_STORED = _UxGT("Settings Stored");
467468
LSTR MSG_MEDIA_UPDATE = MEDIA_TYPE_EN _UxGT(" Update");
468469
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
@@ -485,7 +485,7 @@ namespace Language_ru {
485485
LSTR MSG_INIT_EEPROM = _UxGT("Инициализ. EEPROM");
486486
#endif
487487
LSTR MSG_ERR_EEPROM_CRC = _UxGT("Сбой EEPROM: CRC");
488-
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("Сбой EEPROM: индекс");
488+
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("Сбой EEPROM: размер");
489489
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Сбой EEPROM: версия");
490490
LSTR MSG_SETTINGS_STORED = _UxGT("Параметры сохранены");
491491
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
@@ -1939,30 +1939,32 @@ void MarlinUI::init() {
19391939

19401940
#if DISABLED(EEPROM_AUTO_INIT)
19411941

1942-
static inline FSTR_P eeprom_err(const uint8_t msgid) {
1943-
switch (msgid) {
1944-
default:
1945-
case 0: return GET_TEXT_F(MSG_ERR_EEPROM_CRC);
1946-
case 1: return GET_TEXT_F(MSG_ERR_EEPROM_INDEX);
1947-
case 2: return GET_TEXT_F(MSG_ERR_EEPROM_VERSION);
1942+
static inline FSTR_P eeprom_err(const EEPROM_Error err) {
1943+
switch (err) {
1944+
case ERR_EEPROM_VERSION: return GET_TEXT_F(MSG_ERR_EEPROM_VERSION);
1945+
case ERR_EEPROM_SIZE: return GET_TEXT_F(MSG_ERR_EEPROM_SIZE);
1946+
case ERR_EEPROM_CRC: return GET_TEXT_F(MSG_ERR_EEPROM_CRC);
1947+
case ERR_EEPROM_CORRUPT: return GET_TEXT_F(MSG_ERR_EEPROM_CORRUPT);
1948+
default: return nullptr;
19481949
}
19491950
}
19501951

1951-
void MarlinUI::eeprom_alert(const uint8_t msgid) {
1952+
void MarlinUI::eeprom_alert(const EEPROM_Error err) {
1953+
FSTR_P const err_msg = eeprom_err(err);
1954+
set_status(err_msg);
1955+
TERN_(HOST_PROMPT_SUPPORT, hostui.notify(err_msg));
19521956
#if HAS_MARLINUI_MENU
1953-
editable.uint8 = msgid;
1957+
editable.uint8 = err;
19541958
goto_screen([]{
19551959
FSTR_P const restore_msg = GET_TEXT_F(MSG_INIT_EEPROM);
19561960
char msg[utf8_strlen(restore_msg) + 1];
19571961
strcpy_P(msg, FTOP(restore_msg));
19581962
MenuItem_confirm::select_screen(
19591963
GET_TEXT_F(MSG_BUTTON_RESET), GET_TEXT_F(MSG_BUTTON_IGNORE),
19601964
init_eeprom, return_to_status,
1961-
eeprom_err(editable.uint8), msg, F("?")
1965+
eeprom_err((EEPROM_Error)editable.uint8), msg, F("?")
19621966
);
19631967
});
1964-
#else
1965-
set_status(eeprom_err(msgid));
19661968
#endif
19671969
}
19681970

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
@@ -678,12 +682,7 @@ class MarlinUI {
678682
static void load_settings();
679683
static void store_settings();
680684
#endif
681-
#if DISABLED(EEPROM_AUTO_INIT)
682-
static void eeprom_alert(const uint8_t msgid);
683-
static void eeprom_alert_crc() { eeprom_alert(0); }
684-
static void eeprom_alert_index() { eeprom_alert(1); }
685-
static void eeprom_alert_version() { eeprom_alert(2); }
686-
#endif
685+
static void eeprom_alert(const EEPROM_Error) TERN_(EEPROM_AUTO_INIT, {});
687686
#endif
688687

689688
//

0 commit comments

Comments
 (0)