Просмотр исходного кода

Improve settings backwards compatibility

Thanks @Willy-JL for the suggestion
Zachary Weiss 1 год назад
Родитель
Сommit
a345eb16ad
1 измененных файлов с 34 добавлено и 11 удалено
  1. 34 11
      mag_state.c

+ 34 - 11
mag_state.c

@@ -50,18 +50,41 @@ bool mag_state_load(MagState* out_state) {
             if(!flipper_format_file_open_existing(file, MAG_STATE_PATH)) break;
             if(!flipper_format_file_open_existing(file, MAG_STATE_PATH)) break;
             if(!flipper_format_read_header(file, str, &tmp)) break;
             if(!flipper_format_read_header(file, str, &tmp)) break;
             if(furi_string_cmp_str(str, MAG_STATE_HEADER)) break;
             if(furi_string_cmp_str(str, MAG_STATE_HEADER)) break;
-            if(tmp != MAG_STATE_VER) break;
+            // if(tmp != MAG_STATE_VER) break;
 
 
-            if(!flipper_format_read_uint32(file, "pin_input", &tmp, 1)) break;
+            if(!flipper_format_read_uint32(file, "pin_input", &tmp, 1)) {
+                flipper_format_rewind(file);
+                tmp = MAG_STATE_DEFAULT_PIN_INPUT;
+            }
             state.pin_input = (MagPin)tmp;
             state.pin_input = (MagPin)tmp;
-            if(!flipper_format_read_uint32(file, "pin_output", &tmp, 1)) break;
+
+            if(!flipper_format_read_uint32(file, "pin_output", &tmp, 1)) {
+                flipper_format_rewind(file);
+                tmp = MAG_STATE_DEFAULT_PIN_OUTPUT;
+            }
             state.pin_output = (MagPin)tmp;
             state.pin_output = (MagPin)tmp;
-            if(!flipper_format_read_uint32(file, "pin_enable", &tmp, 1)) break;
+
+            if(!flipper_format_read_uint32(file, "pin_enable", &tmp, 1)) {
+                flipper_format_rewind(file);
+                tmp = MAG_STATE_DEFAULT_PIN_ENABLE;
+            }
             state.pin_enable = (MagPin)tmp;
             state.pin_enable = (MagPin)tmp;
-            if(!flipper_format_read_bool(file, "allow_uart", &state.allow_uart, 1)) break;
-            if(!flipper_format_read_uint32(file, "n_repeats", &tmp, 1)) break;
+
+            if(!flipper_format_read_bool(file, "allow_uart", &state.allow_uart, 1)) {
+                flipper_format_rewind(file);
+                state.allow_uart = MAG_STATE_DEFAULT_ALLOW_UART;
+            }
+
+            if(!flipper_format_read_uint32(file, "n_repeats", &tmp, 1)) {
+                flipper_format_rewind(file);
+                tmp = MAG_STATE_DEFAULT_N_REPEATS;
+            }
             state.n_repeats = (uint8_t)tmp;
             state.n_repeats = (uint8_t)tmp;
-            if(!flipper_format_read_bool(file, "repeat_mode", &state.repeat_mode, 1)) break;
+
+            if(!flipper_format_read_bool(file, "repeat_mode", &state.repeat_mode, 1)) {
+                flipper_format_rewind(file);
+                state.repeat_mode = MAG_STATE_DEFAULT_REPEAT_MODE;
+            }
 
 
             loaded_from_file = true;
             loaded_from_file = true;
         } while(0);
         } while(0);
@@ -69,15 +92,15 @@ bool mag_state_load(MagState* out_state) {
     }
     }
     furi_record_close(RECORD_STORAGE);
     furi_record_close(RECORD_STORAGE);
 
 
-    // If could not be read from file
-    // Or file GPIO config is invalid (pins overlap)
-    // Set defaults
+    // If file's GPIO config is invalid (pins overlap)
+    // Reset to defaults
     // Additionally raise message to user?
     // Additionally raise message to user?
-    if(!loaded_from_file || !mag_state_gpio_is_valid(&state)) {
+    if(!mag_state_gpio_is_valid(&state)) {
         mag_state_gpio_reset(&state);
         mag_state_gpio_reset(&state);
     }
     }
 
 
     if(!loaded_from_file) {
     if(!loaded_from_file) {
+        mag_state_gpio_reset(&state);
         state.allow_uart = MAG_STATE_DEFAULT_ALLOW_UART;
         state.allow_uart = MAG_STATE_DEFAULT_ALLOW_UART;
         state.n_repeats = MAG_STATE_DEFAULT_N_REPEATS;
         state.n_repeats = MAG_STATE_DEFAULT_N_REPEATS;
         state.repeat_mode = MAG_STATE_DEFAULT_REPEAT_MODE;
         state.repeat_mode = MAG_STATE_DEFAULT_REPEAT_MODE;