Browse Source

EEPROM saving of z_values.

Tried to make it a little intelligent.
Edward Patel 10 years ago
parent
commit
28c91deb5c
1 changed files with 39 additions and 2 deletions
  1. 39
    2
      Marlin/ConfigurationStore.cpp

+ 39
- 2
Marlin/ConfigurationStore.cpp View File

@@ -113,7 +113,7 @@ void _EEPROM_readData(int &pos, uint8_t* value, uint8_t size) {
113 113
 // wrong data being written to the variables.
114 114
 // ALSO:  always make sure the variables in the Store and retrieve sections are in the same order.
115 115
 
116
-#define EEPROM_VERSION "V16"
116
+#define EEPROM_VERSION "V17"
117 117
 
118 118
 #ifdef EEPROM_SETTINGS
119 119
 
@@ -136,9 +136,26 @@ void Config_StoreSettings()  {
136 136
   EEPROM_WRITE_VAR(i, max_e_jerk);
137 137
   EEPROM_WRITE_VAR(i, add_homing);
138 138
 
139
+  uint8_t mesh_num_x = 3;
140
+  uint8_t mesh_num_y = 3;
139 141
   #if defined(MESH_BED_LEVELING)
142
+    // Compile time test that sizeof(mbl.z_values) is as expected
143
+    typedef char c_assert[(sizeof(mbl.z_values) == MESH_NUM_X_POINTS*MESH_NUM_Y_POINTS*sizeof(dummy)) ? 1 : -1];
144
+    mesh_num_x = MESH_NUM_X_POINTS;
145
+    mesh_num_y = MESH_NUM_Y_POINTS;
140 146
     EEPROM_WRITE_VAR(i, mbl.active);
147
+    EEPROM_WRITE_VAR(i, mesh_num_x);
148
+    EEPROM_WRITE_VAR(i, mesh_num_y);
141 149
     EEPROM_WRITE_VAR(i, mbl.z_values);
150
+  #else
151
+    uint8_t dummy_uint8 = 0;
152
+    EEPROM_WRITE_VAR(i, dummy_uint8);
153
+    EEPROM_WRITE_VAR(i, mesh_num_x);
154
+    EEPROM_WRITE_VAR(i, mesh_num_y);
155
+    dummy = 0.0f;
156
+    for (int q=0; q<mesh_num_x*mesh_num_y; q++) {
157
+      EEPROM_WRITE_VAR(i, dummy);
158
+    }
142 159
   #endif  // MESH_BED_LEVELING
143 160
 
144 161
   #ifdef DELTA
@@ -277,9 +294,29 @@ void Config_RetrieveSettings() {
277 294
     EEPROM_READ_VAR(i, max_e_jerk);
278 295
     EEPROM_READ_VAR(i, add_homing);
279 296
 
297
+    uint8_t mesh_num_x = 0;
298
+    uint8_t mesh_num_y = 0;
280 299
     #if defined(MESH_BED_LEVELING)
281 300
       EEPROM_READ_VAR(i, mbl.active);
282
-      EEPROM_READ_VAR(i, mbl.z_values);
301
+      EEPROM_READ_VAR(i, mesh_num_x);
302
+      EEPROM_READ_VAR(i, mesh_num_y);
303
+      if (mesh_num_x != MESH_NUM_X_POINTS ||
304
+          mesh_num_y != MESH_NUM_Y_POINTS) {
305
+        mbl.reset();
306
+        for (int q=0; q<mesh_num_x*mesh_num_y; q++) {
307
+          EEPROM_READ_VAR(i, dummy);
308
+        }
309
+      } else {
310
+        EEPROM_READ_VAR(i, mbl.z_values);
311
+      }
312
+    #else
313
+      uint8_t dummy_uint8 = 0;
314
+      EEPROM_READ_VAR(i, dummy_uint8);
315
+      EEPROM_READ_VAR(i, mesh_num_x);
316
+      EEPROM_READ_VAR(i, mesh_num_y);
317
+      for (int q=0; q<mesh_num_x*mesh_num_y; q++) {
318
+        EEPROM_READ_VAR(i, dummy);
319
+      }
283 320
     #endif  // MESH_BED_LEVELING
284 321
 
285 322
     #ifdef DELTA

Loading…
Cancel
Save