diff --git a/Marlin/configuration_store.cpp b/Marlin/configuration_store.cpp index ce84a4045f..4c2e733ad8 100644 --- a/Marlin/configuration_store.cpp +++ b/Marlin/configuration_store.cpp @@ -65,11 +65,11 @@ * 207 M218 XYZ hotend_offset (float x3 per additional hotend) * * Mesh bed leveling: - * 219 M420 S status (uint8) - * 220 z_offset (float) - * 224 mesh_num_x (uint8 as set in firmware) - * 225 mesh_num_y (uint8 as set in firmware) - * 226 G29 S3 XYZ z_values[][] (float x9, by default, up to float x 81) + * 219 M420 S from mbl.status (bool) + * 220 mbl.z_offset (float) + * 224 MESH_NUM_X_POINTS (uint8 as set in firmware) + * 225 MESH_NUM_Y_POINTS (uint8 as set in firmware) + * 226 G29 S3 XYZ z_values[][] (float x9, by default, up to float x 81) +288 * * AUTO BED LEVELING * 262 M851 zprobe_zoffset (float) @@ -263,21 +263,19 @@ void Config_Postprocess() { #if ENABLED(MESH_BED_LEVELING) // Compile time test that sizeof(mbl.z_values) is as expected typedef char c_assert[(sizeof(mbl.z_values) == (MESH_NUM_X_POINTS) * (MESH_NUM_Y_POINTS) * sizeof(dummy)) ? 1 : -1]; - uint8_t mesh_num_x = MESH_NUM_X_POINTS, - mesh_num_y = MESH_NUM_Y_POINTS, - dummy_uint8 = mbl.status & _BV(MBL_STATUS_HAS_MESH_BIT); - EEPROM_WRITE(dummy_uint8); + const bool leveling_is_on = TEST(mbl.status, MBL_STATUS_HAS_MESH_BIT); + const uint8_t mesh_num_x = MESH_NUM_X_POINTS, mesh_num_y = MESH_NUM_Y_POINTS; + EEPROM_WRITE(leveling_is_on); EEPROM_WRITE(mbl.z_offset); EEPROM_WRITE(mesh_num_x); EEPROM_WRITE(mesh_num_y); EEPROM_WRITE(mbl.z_values); #else // For disabled MBL write a default mesh - uint8_t mesh_num_x = 3, - mesh_num_y = 3, - mbl_status = 0; + const bool leveling_is_on = false; dummy = 0.0f; - EEPROM_WRITE(mbl_status); + const uint8_t mesh_num_x = 3, mesh_num_y = 3; + EEPROM_WRITE(leveling_is_on); EEPROM_WRITE(dummy); // z_offset EEPROM_WRITE(mesh_num_x); EEPROM_WRITE(mesh_num_y); @@ -498,13 +496,15 @@ void Config_Postprocess() { // Mesh (Manual) Bed Leveling // - uint8_t dummy_uint8, mesh_num_x, mesh_num_y; - EEPROM_READ(dummy_uint8); + bool leveling_is_on; + uint8_t mesh_num_x, mesh_num_y; + EEPROM_READ(leveling_is_on); EEPROM_READ(dummy); EEPROM_READ(mesh_num_x); EEPROM_READ(mesh_num_y); + #if ENABLED(MESH_BED_LEVELING) - mbl.status = dummy_uint8; + mbl.status = leveling_is_on ? _BV(MBL_STATUS_HAS_MESH_BIT) : 0; mbl.z_offset = dummy; if (mesh_num_x == MESH_NUM_X_POINTS && mesh_num_y == MESH_NUM_Y_POINTS) { // EEPROM data fits the current mesh @@ -721,6 +721,7 @@ void Config_ResetDefault() { LOOP_XYZ(i) HOTEND_LOOP() hotend_offset[i][e] = tmp4[i][e]; #endif + // Applies to all MBL and ABL #if PLANNER_LEVELING reset_bed_level(); #endif