wizard: Rewrite the fw upgrade check logic

- Handle the conversion from the V1 calibration status to the V2 bitmap
  for all past FW versions.
- Allow to run the wizard in "Restore" mode (for example during upgrade
  or service prep) to complete any missing steps.
- Fix service prep to use the above feature by clearing the appropriate
  calibration bits.
- Remove exceptions for FW 3.2.0.4 which can now be handled cleanly.
This commit is contained in:
Yuri D'Elia 2022-12-27 11:32:50 +01:00 committed by DRracer
parent d478aa5c5e
commit 16033b40b4

View File

@ -1539,45 +1539,51 @@ void setup()
lcd_show_fullscreen_message_and_wait_P(_i("Old settings found. Default PID, Esteps etc. will be set.")); //if EEPROM version or printer type was changed, inform user that default setting were loaded////MSG_DEFAULT_SETTINGS_LOADED c=20 r=6
Config_StoreSettings();
}
if (eeprom_read_byte((uint8_t*)EEPROM_WIZARD_ACTIVE) >= 1) {
lcd_wizard(WizState::Run);
// handle calibration status upgrade
bool run_wizard = false;
if (calibration_status_get(CALIBRATION_STATUS_UNKNOWN)) {
CalibrationStatus calibration_status = 0;
if (eeprom_read_byte((uint8_t*)EEPROM_CALIBRATION_STATUS_V1) == 1) {
// calibrated printer upgraded from FW<3.12
calibration_status |= (CALIBRATION_STATUS_SELFTEST | CALIBRATION_STATUS_XYZ | CALIBRATION_STATUS_Z | CALIBRATION_STATUS_LIVE_ADJUST);
if (eeprom_fw_version_older_than({3, 2, 0, 4})) {
// printer upgraded from FW<3.2.0.4 and requires re-running selftest
lcd_show_fullscreen_message_and_wait_P(_i("Selftest will be run to calibrate accurate sensorless rehoming."));////MSG_FORCE_SELFTEST c=20 r=8
calibration_status &= ~CALIBRATION_STATUS_SELFTEST;
run_wizard = true;
}
if (eeprom_read_byte((uint8_t*)EEPROM_WIZARD_ACTIVE) == 0) { //dont show calibration status messages if wizard is currently active
if (calibration_status() == CALIBRATION_STATUS_ASSEMBLED ||
calibration_status() == CALIBRATION_STATUS_UNKNOWN ||
calibration_status() == CALIBRATION_STATUS_XYZ_CALIBRATION) {
// Reset the babystepping values, so the printer will not move the Z axis up when the babystepping is enabled.
eeprom_update_word(reinterpret_cast<uint16_t *>(&(EEPROM_Sheets_base->s[(eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)))].z_offset)),0);
// Show the message.
lcd_show_fullscreen_message_and_wait_P(_T(MSG_FOLLOW_CALIBRATION_FLOW));
}
#ifdef TEMP_MODEL
else if (calibration_status() == CALIBRATION_STATUS_TEMP_MODEL_CALIBRATION) {
lcd_show_fullscreen_message_and_wait_P(_T(MSG_TM_NOT_CAL));
lcd_update_enable(true);
}
#endif //TEMP_MODEL
else if (calibration_status() == CALIBRATION_STATUS_LIVE_ADJUST) {
// Show the message.
lcd_show_fullscreen_message_and_wait_P(_T(MSG_BABYSTEP_Z_NOT_SET));
lcd_update_enable(true);
}
else if (calibration_status() == CALIBRATION_STATUS_CALIBRATED && eeprom_read_byte((unsigned char *)EEPROM_TEMP_CAL_ACTIVE) && calibration_status_pinda() == false) {
//lcd_show_fullscreen_message_and_wait_P(_i("Temperature calibration has not been run yet"));////MSG_PINDA_NOT_CALIBRATED c=20 r=4
lcd_update_enable(true);
}
else if (calibration_status() == CALIBRATION_STATUS_Z_CALIBRATION) {
// Show the message.
lcd_show_fullscreen_message_and_wait_P(_T(MSG_FOLLOW_Z_CALIBRATION_FLOW));
}
eeprom_update_byte((uint8_t*)EEPROM_CALIBRATION_STATUS_V2, calibration_status);
}
#if !defined (DEBUG_DISABLE_FORCE_SELFTEST) && defined (TMC2130)
if (eeprom_fw_version_older_than({3, 2, 0, 4}) && calibration_status() < CALIBRATION_STATUS_ASSEMBLED) {
lcd_show_fullscreen_message_and_wait_P(_i("Selftest will be run to calibrate accurate sensorless rehoming."));////MSG_FORCE_SELFTEST c=20 r=8
lcd_selftest();
if (eeprom_read_byte((uint8_t*)EEPROM_WIZARD_ACTIVE)) {
// first time run of wizard or service prep
lcd_wizard(WizState::Run);
}
else if (run_wizard) {
// some wizard steps required by the upgrade checks
lcd_wizard(WizState::Restore);
}
else {
if (!calibration_status_get(CALIBRATION_STATUS_SELFTEST)) {
// aborted or missing wizard: show a single warning
lcd_show_fullscreen_message_and_wait_P(_T(MSG_FOLLOW_CALIBRATION_FLOW));
}
else if (!calibration_status_get(CALIBRATION_STATUS_Z)) {
// wizard reset after service prep
lcd_show_fullscreen_message_and_wait_P(_T(MSG_FOLLOW_Z_CALIBRATION_FLOW));
} else {
// warn about other important steps individually
if (!calibration_status_get(CALIBRATION_STATUS_LIVE_ADJUST))
lcd_show_fullscreen_message_and_wait_P(_T(MSG_BABYSTEP_Z_NOT_SET));
#ifdef TEMP_MODEL
if (!calibration_status_get(CALIBRATION_STATUS_TEMP_MODEL))
lcd_show_fullscreen_message_and_wait_P(_T(MSG_TM_NOT_CAL));
#endif //TEMP_MODEL
}
}
#endif //TMC2130 && !DEBUG_DISABLE_FORCE_SELFTEST
KEEPALIVE_STATE(IN_PROCESS);
#endif //DEBUG_DISABLE_STARTMSGS