altos: Move common storage code to ao_storage.c. Add M25P80 driver
[fw/altos] / src / ao_config.c
index f8ea27feb54e6c9124efe526317fab397ac222ce..38b72798bab00b346b82f498adaa660f9a9ee762 100644 (file)
@@ -27,22 +27,24 @@ __xdata uint8_t ao_config_mutex;
 #define AO_CONFIG_DEFAULT_CALLSIGN     "N0CALL"
 #define AO_CONFIG_DEFAULT_ACCEL_ZERO_G 16000
 #define AO_CONFIG_DEFAULT_APOGEE_DELAY 0
-/*
- * For 434.550MHz, the frequency value is:
- *
- * 434.550e6 / (24e6 / 2**16) = 1186611.2
- *
- * This value is stored in a const variable so that
- * ao-load can change it during programming for
- * devices that have no eeprom for config data.
- */
-const uint32_t ao_radio_cal = 1186611;
 
 #if HAS_EEPROM
 static void
 _ao_config_put(void)
 {
-       ao_ee_write_config((uint8_t *) &ao_config, sizeof (ao_config));
+       ao_storage_setup();
+       ao_storage_erase(ao_storage_config);
+       ao_storage_write(ao_storage_config, &ao_config, sizeof (ao_config));
+       ao_log_write_erase(0);
+       ao_storage_flush();
+}
+
+void
+ao_config_put(void)
+{
+       ao_mutex_get(&ao_config_mutex);
+       _ao_config_put();
+       ao_mutex_put(&ao_config_mutex);
 }
 #endif
 
@@ -52,7 +54,8 @@ _ao_config_get(void)
        if (ao_config_loaded)
                return;
 #if HAS_EEPROM
-       ao_ee_read_config((uint8_t *) &ao_config, sizeof (ao_config));
+       ao_storage_setup();
+       ao_storage_read(ao_storage_config, &ao_config, sizeof (ao_config));
 #endif
        if (ao_config.major != AO_CONFIG_MAJOR) {
                ao_config.major = AO_CONFIG_MAJOR;
@@ -151,6 +154,7 @@ ao_config_radio_channel_set(void) __reentrant
        ao_config_dirty = 1;
        ao_mutex_put(&ao_config_mutex);
        ao_config_radio_channel_show();
+       ao_radio_recv_abort();
 }
 
 #if HAS_ADC
@@ -294,13 +298,13 @@ struct ao_config_var {
        const char      *help;
 };
 
-void
+static void
 ao_config_help(void) __reentrant;
 
-void
+static void
 ao_config_show(void) __reentrant;
 
-void
+static void
 ao_config_write(void) __reentrant;
 
 __code struct ao_config_var ao_config_vars[] = {
@@ -354,7 +358,7 @@ ao_config_set(void)
                ao_cmd_status = ao_cmd_syntax_error;
 }
 
-void
+static void
 ao_config_help(void) __reentrant
 {
        uint8_t cmd;
@@ -362,7 +366,7 @@ ao_config_help(void) __reentrant
                puts (ao_config_vars[cmd].help);
 }
 
-void
+static void
 ao_config_show(void) __reentrant
 {
        uint8_t cmd;
@@ -374,16 +378,21 @@ ao_config_show(void) __reentrant
 }
 
 #if HAS_EEPROM
-void
+static void
 ao_config_write(void) __reentrant
 {
+       uint8_t saved = 0;
        ao_mutex_get(&ao_config_mutex);
        if (ao_config_dirty) {
                _ao_config_put();
                ao_config_dirty = 0;
-               printf("Saved\n");
+               saved = 1;
        }
        ao_mutex_put(&ao_config_mutex);
+       if (saved)
+               puts("Saved");
+       else
+               puts("Nothing to save");
 }
 #endif