Skip to content

Commit

Permalink
🚸 Improve EEPROM validation (MarlinFirmware#25860)
Browse files Browse the repository at this point in the history
  • Loading branch information
thinkyhead committed May 20, 2023
1 parent 62a7bba commit 09247e7
Show file tree
Hide file tree
Showing 19 changed files with 210 additions and 101 deletions.
1 change: 1 addition & 0 deletions Marlin/src/core/language.h
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,7 @@
#define STR_ERR_LONG_EXTRUDE_STOP " too long extrusion prevented"
#define STR_ERR_HOTEND_TOO_COLD "Hotend too cold"
#define STR_ERR_EEPROM_WRITE "Error writing to EEPROM!"
#define STR_ERR_EEPROM_CORRUPT "EEPROM Corrupt"

#define STR_FILAMENT_CHANGE_HEAT_LCD "Press button to heat nozzle"
#define STR_FILAMENT_CHANGE_INSERT_LCD "Insert filament and press button"
Expand Down
2 changes: 1 addition & 1 deletion Marlin/src/lcd/language/language_de.h
Original file line number Diff line number Diff line change
Expand Up @@ -414,7 +414,7 @@ namespace Language_de {
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Standardwerte laden");
LSTR MSG_INIT_EEPROM = _UxGT("Werkseinstellungen");
LSTR MSG_ERR_EEPROM_CRC = _UxGT("EEPROM CRC Fehler");
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("EEPROM Index Fehler");
LSTR MSG_ERR_EEPROM_SIZE = _UxGT("EEPROM Größe Fehler");
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("EEPROM Version Fehler");
LSTR MSG_SETTINGS_STORED = _UxGT("Einstell. gespei.");
LSTR MSG_MEDIA_UPDATE = _UxGT("FW Update vom Medium");
Expand Down
7 changes: 4 additions & 3 deletions Marlin/src/lcd/language/language_en.h
Original file line number Diff line number Diff line change
Expand Up @@ -445,9 +445,10 @@ namespace Language_en {
LSTR MSG_LOAD_EEPROM = _UxGT("Load Settings");
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Restore Defaults");
LSTR MSG_INIT_EEPROM = _UxGT("Initialize EEPROM");
LSTR MSG_ERR_EEPROM_CRC = _UxGT("EEPROM CRC Error");
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("EEPROM Index Error");
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("EEPROM Version Error");
LSTR MSG_ERR_EEPROM_CRC = _UxGT("Err: EEPROM CRC");
LSTR MSG_ERR_EEPROM_SIZE = _UxGT("Err: EEPROM Size");
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Err: EEPROM Version");
LSTR MSG_ERR_EEPROM_CORRUPT = _UxGT("Err: EEPROM Corrupt");
LSTR MSG_SETTINGS_STORED = _UxGT("Settings Stored");
LSTR MSG_MEDIA_UPDATE = MEDIA_TYPE_EN _UxGT(" Update");
LSTR MSG_RESET_PRINTER = _UxGT("Reset Printer");
Expand Down
2 changes: 1 addition & 1 deletion Marlin/src/lcd/language/language_es.h
Original file line number Diff line number Diff line change
Expand Up @@ -315,7 +315,7 @@ namespace Language_es {
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Rest. fábrica");
LSTR MSG_INIT_EEPROM = _UxGT("Inicializar EEPROM");
LSTR MSG_ERR_EEPROM_CRC = _UxGT("Err: EEPROM CRC");
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("Err: Índice EEPROM");
LSTR MSG_ERR_EEPROM_SIZE = _UxGT("Err: EEPROM Tamaño");
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Err: Versión EEPROM");
LSTR MSG_MEDIA_UPDATE = _UxGT("Actualizar SD/FD");
LSTR MSG_RESET_PRINTER = _UxGT("Resetear Impresora");
Expand Down
2 changes: 1 addition & 1 deletion Marlin/src/lcd/language/language_gl.h
Original file line number Diff line number Diff line change
Expand Up @@ -317,7 +317,7 @@ namespace Language_gl {
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Rest. Defecto");
LSTR MSG_INIT_EEPROM = _UxGT("Inicializar EEPROM");
LSTR MSG_ERR_EEPROM_CRC = _UxGT("Erro: CRC EEPROM");
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("Erro: Índice EEPROM");
LSTR MSG_ERR_EEPROM_SIZE = _UxGT("Erro: Tamaño EEPROM");
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Erro: Versión EEPROM");
LSTR MSG_SETTINGS_STORED = _UxGT("Config Gardada");
LSTR MSG_MEDIA_UPDATE = _UxGT("Actualizar SD/FD");
Expand Down
2 changes: 1 addition & 1 deletion Marlin/src/lcd/language/language_hu.h
Original file line number Diff line number Diff line change
Expand Up @@ -363,7 +363,7 @@ namespace Language_hu {
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Alapértelmezett");
LSTR MSG_INIT_EEPROM = _UxGT("EEPROM inicializálás");
LSTR MSG_ERR_EEPROM_CRC = _UxGT("Hiba: EEPROM CRC");
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("Hiba: EEPROM index");
LSTR MSG_ERR_EEPROM_SIZE = _UxGT("Hiba: EEPROM mérete");
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Hiba: EEPROM verzió");
LSTR MSG_SETTINGS_STORED = _UxGT("Beállítások mentve");
LSTR MSG_MEDIA_UPDATE = _UxGT("Tároló frissítés");
Expand Down
2 changes: 1 addition & 1 deletion Marlin/src/lcd/language/language_it.h
Original file line number Diff line number Diff line change
Expand Up @@ -451,7 +451,7 @@ namespace Language_it {
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Ripristina imp.");
LSTR MSG_INIT_EEPROM = _UxGT("Inizializza EEPROM");
LSTR MSG_ERR_EEPROM_CRC = _UxGT("Err: CRC EEPROM");
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("Err: Indice EEPROM");
LSTR MSG_ERR_EEPROM_SIZE = _UxGT("Err: Taglia EEPROM");
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Err: Versione EEPROM");
LSTR MSG_SETTINGS_STORED = _UxGT("Impostazioni mem.");
LSTR MSG_MEDIA_UPDATE = _UxGT("Aggiorna media");
Expand Down
6 changes: 3 additions & 3 deletions Marlin/src/lcd/language/language_ro.h
Original file line number Diff line number Diff line change
Expand Up @@ -317,9 +317,9 @@ namespace Language_ro {
LSTR MSG_LOAD_EEPROM = _UxGT("Load Settings");
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Restore Defaults");
LSTR MSG_INIT_EEPROM = _UxGT("Initialize EEPROM");
LSTR MSG_ERR_EEPROM_CRC = _UxGT("EEPROM CRC Error");
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("EEPROM Index Error");
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("EEPROM Version Error");
LSTR MSG_ERR_EEPROM_CRC = _UxGT("Err: EEPROM CRC");
LSTR MSG_ERR_EEPROM_SIZE = _UxGT("Err: Mărimea EEPROM");
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Err: Versiunea EEPROM");
LSTR MSG_SETTINGS_STORED = _UxGT("Settings Stored");
LSTR MSG_MEDIA_UPDATE = _UxGT("Media Update");
LSTR MSG_RESET_PRINTER = _UxGT("Reset Imprimanta");
Expand Down
2 changes: 1 addition & 1 deletion Marlin/src/lcd/language/language_ru.h
Original file line number Diff line number Diff line change
Expand Up @@ -454,7 +454,7 @@ namespace Language_ru {
LSTR MSG_INIT_EEPROM = _UxGT("Инициализ. EEPROM");
#endif
LSTR MSG_ERR_EEPROM_CRC = _UxGT("Сбой EEPROM: CRC");
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("Сбой EEPROM: индекс");
LSTR MSG_ERR_EEPROM_SIZE = _UxGT("Сбой EEPROM: размер");
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Сбой EEPROM: версия");
LSTR MSG_SETTINGS_STORED = _UxGT("Параметры сохранены");
LSTR MSG_MEDIA_UPDATE = _UxGT("Обновление прошивки");
Expand Down
2 changes: 1 addition & 1 deletion Marlin/src/lcd/language/language_sk.h
Original file line number Diff line number Diff line change
Expand Up @@ -452,7 +452,7 @@ namespace Language_sk {
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Obnoviť nastavenie");
LSTR MSG_INIT_EEPROM = _UxGT("Inicializ. EEPROM");
LSTR MSG_ERR_EEPROM_CRC = _UxGT("Chyba: EEPROM CRC");
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("Chyba: EEPROM Index");
LSTR MSG_ERR_EEPROM_SIZE = _UxGT("Chyba: Veľkosť EEPROM");
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Chyba: Verzia EEPROM");
LSTR MSG_SETTINGS_STORED = _UxGT("Nastavenie uložené");
LSTR MSG_MEDIA_UPDATE = _UxGT("Aktualiz. z karty");
Expand Down
2 changes: 1 addition & 1 deletion Marlin/src/lcd/language/language_sv.h
Original file line number Diff line number Diff line change
Expand Up @@ -348,7 +348,7 @@ namespace Language_sv {
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Återställ Standard");
LSTR MSG_INIT_EEPROM = _UxGT("Initiera EEPROM");
LSTR MSG_ERR_EEPROM_CRC = _UxGT("EEPROM CRC Fel");
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("EEPROM Index Fel");
LSTR MSG_ERR_EEPROM_SIZE = _UxGT("EEPROM Storlek Fel");
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("EEPROM Version Fel");
LSTR MSG_SETTINGS_STORED = _UxGT("Inställningar Lagrad");
LSTR MSG_MEDIA_UPDATE = _UxGT("Media Uppdatera");
Expand Down
2 changes: 1 addition & 1 deletion Marlin/src/lcd/language/language_tr.h
Original file line number Diff line number Diff line change
Expand Up @@ -431,7 +431,7 @@ namespace Language_tr {
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Fabrika Ayarları");
LSTR MSG_INIT_EEPROM = _UxGT("EEPROM'u başlat");
LSTR MSG_ERR_EEPROM_CRC = _UxGT("Hata: EEPROM CRC");
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("Hata: EEPROM Indeks");
LSTR MSG_ERR_EEPROM_SIZE = _UxGT("Hata: EEPROM Boyutu");
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Hata: EEPROM Sürümü");
LSTR MSG_SETTINGS_STORED = _UxGT("Ayarlar Kaydedildi");
LSTR MSG_MEDIA_UPDATE = _UxGT("SD Güncellemesi");
Expand Down
2 changes: 1 addition & 1 deletion Marlin/src/lcd/language/language_uk.h
Original file line number Diff line number Diff line change
Expand Up @@ -465,7 +465,7 @@ namespace Language_uk {
LSTR MSG_INIT_EEPROM = _UxGT("Ініціаліз. EEPROM");
#endif
LSTR MSG_ERR_EEPROM_CRC = _UxGT("Збій EEPROM: CRC");
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("Збій EEPROM: індекс");
LSTR MSG_ERR_EEPROM_SIZE = _UxGT("Збій EEPROM: розмір");
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Збій EEPROM: версія");
LSTR MSG_SETTINGS_STORED = _UxGT("Параметри збережені");
LSTR MSG_MEDIA_UPDATE = _UxGT("Оновити SD-картку");
Expand Down
6 changes: 3 additions & 3 deletions Marlin/src/lcd/language/language_zh_CN.h
Original file line number Diff line number Diff line change
Expand Up @@ -317,9 +317,9 @@ namespace Language_zh_CN {
LSTR MSG_LOAD_EEPROM = _UxGT("装载设置"); // "Load memory"
LSTR MSG_RESTORE_DEFAULTS = _UxGT("恢复安全值"); // "Restore Defaults"
LSTR MSG_INIT_EEPROM = _UxGT("初始化设置"); // "Initialize EEPROM"
LSTR MSG_ERR_EEPROM_CRC = _UxGT("EEPROM CRC 错误");
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("EEPROM Index 错误");
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("EEPROM Version 错误");
LSTR MSG_ERR_EEPROM_CRC = _UxGT("EEPROM 校验和 错误");
LSTR MSG_ERR_EEPROM_SIZE = _UxGT("EEPROM 尺寸 错误");
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("EEPROM 版本 错误");
LSTR MSG_SETTINGS_STORED = _UxGT("设置已保存");
LSTR MSG_MEDIA_UPDATE = _UxGT("存储器更新");
LSTR MSG_RESET_PRINTER = _UxGT("复位打印机");
Expand Down
4 changes: 2 additions & 2 deletions Marlin/src/lcd/language/language_zh_TW.h
Original file line number Diff line number Diff line change
Expand Up @@ -299,8 +299,8 @@ namespace Language_zh_TW {
LSTR MSG_RESTORE_DEFAULTS = _UxGT("恢復安全值"); // "Restore failsafe"
LSTR MSG_INIT_EEPROM = _UxGT("初始化設置"); // "Initialize EEPROM"
LSTR MSG_ERR_EEPROM_CRC = _UxGT("錯誤: EEPROM CRC"); // "Err: EEPROM CRC"
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("錯誤: EEPROM Index"); // "Err: EEPROM Index"
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("錯誤: EEPROM Version"); // "EEPROM Version"
LSTR MSG_ERR_EEPROM_SIZE = _UxGT("錯誤: EEPROM 尺寸"); // "Err: EEPROM Index"
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("錯誤: EEPROM 版本"); // "EEPROM Version"
LSTR MSG_MEDIA_UPDATE = _UxGT("媒體更新"); // "Media Update"
LSTR MSG_RESET_PRINTER = _UxGT("重置打印機"); // "Reset Printer
LSTR MSG_REFRESH = _UxGT("刷新"); // "Refresh"
Expand Down
24 changes: 13 additions & 11 deletions Marlin/src/lcd/marlinui.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1899,30 +1899,32 @@ void MarlinUI::init() {

#if DISABLED(EEPROM_AUTO_INIT)

static inline FSTR_P eeprom_err(const uint8_t msgid) {
switch (msgid) {
default:
case 0: return GET_TEXT_F(MSG_ERR_EEPROM_CRC);
case 1: return GET_TEXT_F(MSG_ERR_EEPROM_INDEX);
case 2: return GET_TEXT_F(MSG_ERR_EEPROM_VERSION);
static inline FSTR_P eeprom_err(const EEPROM_Error err) {
switch (err) {
case ERR_EEPROM_VERSION: return GET_TEXT_F(MSG_ERR_EEPROM_VERSION);
case ERR_EEPROM_SIZE: return GET_TEXT_F(MSG_ERR_EEPROM_SIZE);
case ERR_EEPROM_CRC: return GET_TEXT_F(MSG_ERR_EEPROM_CRC);
case ERR_EEPROM_CORRUPT: return GET_TEXT_F(MSG_ERR_EEPROM_CORRUPT);
default: return nullptr;
}
}

void MarlinUI::eeprom_alert(const uint8_t msgid) {
void MarlinUI::eeprom_alert(const EEPROM_Error err) {
FSTR_P const err_msg = eeprom_err(err);
set_status(err_msg);
TERN_(HOST_PROMPT_SUPPORT, hostui.notify(err_msg));
#if HAS_MARLINUI_MENU
editable.uint8 = msgid;
editable.uint8 = err;
goto_screen([]{
FSTR_P const restore_msg = GET_TEXT_F(MSG_INIT_EEPROM);
char msg[utf8_strlen(restore_msg) + 1];
strcpy_P(msg, FTOP(restore_msg));
MenuItem_confirm::select_screen(
GET_TEXT_F(MSG_BUTTON_RESET), GET_TEXT_F(MSG_BUTTON_IGNORE),
init_eeprom, return_to_status,
eeprom_err(editable.uint8), msg, F("?")
eeprom_err((EEPROM_Error)editable.uint8), msg, F("?")
);
});
#else
set_status(eeprom_err(msgid));
#endif
}

Expand Down
11 changes: 5 additions & 6 deletions Marlin/src/lcd/marlinui.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@
#include "../libs/buzzer.h"
#include "buttons.h"

#if ENABLED(EEPROM_SETTINGS)
#include "../module/settings.h"
#endif

#if ENABLED(TOUCH_SCREEN_CALIBRATION)
#include "tft_io/touch_calibration.h"
#endif
Expand Down Expand Up @@ -672,12 +676,7 @@ class MarlinUI {
static void load_settings();
static void store_settings();
#endif
#if DISABLED(EEPROM_AUTO_INIT)
static void eeprom_alert(const uint8_t msgid);
static void eeprom_alert_crc() { eeprom_alert(0); }
static void eeprom_alert_index() { eeprom_alert(1); }
static void eeprom_alert_version() { eeprom_alert(2); }
#endif
static void eeprom_alert(const EEPROM_Error) TERN_(EEPROM_AUTO_INIT, {});
#endif

//
Expand Down
Loading

0 comments on commit 09247e7

Please sign in to comment.