From: Keith Packard Date: Tue, 12 Nov 2013 07:06:59 +0000 (+0900) Subject: altos: Move TeleMetrum v2.0 to using internal eeprom for config X-Git-Tag: 1.2.9.4~4 X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=commitdiff_plain;h=9c53ad6f8222878a26efecebd3bb1d1fe054a4b6 altos: Move TeleMetrum v2.0 to using internal eeprom for config This leaves the whole 8MB of flash for flight storage Signed-off-by: Keith Packard --- diff --git a/src/core/ao_config.c b/src/core/ao_config.c index 5567587b..a30ec64a 100644 --- a/src/core/ao_config.c +++ b/src/core/ao_config.c @@ -60,7 +60,8 @@ static void _ao_config_put(void) { ao_config_setup(); - ao_config_write(&ao_config, sizeof (ao_config)); + ao_config_erase(); + ao_config_write(0, &ao_config, sizeof (ao_config)); #if HAS_FLIGHT ao_log_write_erase(0); #endif @@ -97,7 +98,7 @@ _ao_config_get(void) * need before calling ao_storage_read here */ ao_config_setup(); - ao_config_read(&ao_config, sizeof (ao_config)); + ao_config_read(0, &ao_config, sizeof (ao_config)); #endif if (ao_config.major != AO_CONFIG_MAJOR) { ao_config.major = AO_CONFIG_MAJOR; @@ -466,7 +467,7 @@ void ao_config_log_set(void) __reentrant { uint16_t block = (uint16_t) (ao_storage_block >> 10); - uint16_t config = (uint16_t) (ao_storage_config >> 10); + uint16_t log_max = (uint16_t) (ao_storage_log_max >> 10); ao_cmd_decimal(); if (ao_cmd_status != ao_cmd_success) @@ -475,8 +476,8 @@ ao_config_log_set(void) __reentrant printf("Storage must be empty before changing log size\n"); else if (block > 1024 && (ao_cmd_lex_i & (block - 1))) printf("Flight log size must be multiple of %d kB\n", block); - else if (ao_cmd_lex_i > config) - printf("Flight log max %d kB\n", config); + else if (ao_cmd_lex_i > log_max) + printf("Flight log max %d kB\n", log_max); else { _ao_config_edit_start(); ao_config.flight_log_max = (uint32_t) ao_cmd_lex_i << 10; diff --git a/src/core/ao_config.h b/src/core/ao_config.h index 5e38430e..e101af8e 100644 --- a/src/core/ao_config.h +++ b/src/core/ao_config.h @@ -31,14 +31,9 @@ #include #define ao_config_setup() ao_storage_setup() - -#define ao_config_write(bytes, len) do { \ - ao_storage_erase(ao_storage_config); \ - ao_storage_write(ao_storage_config, bytes, len); \ - } while (0) - -#define ao_config_read(bytes, len) ao_storage_read(ao_storage_config, bytes, len) - +#define ao_config_erase() ao_storage_erase(ao_storage_config) +#define ao_config_write(pos,bytes, len) ao_storage_write(ao_storage_config+(pos), bytes, len) +#define ao_config_read(pos,bytes, len) ao_storage_read(ao_storage_config+(pos), bytes, len) #define ao_config_flush() ao_storage_flush() #endif @@ -48,8 +43,9 @@ #include #define ao_config_setup() -#define ao_config_write(bytes, len) ao_eeprom_write(0, bytes, len) -#define ao_config_read(bytes, len) ao_eeprom_read(0, bytes, len) +#define ao_config_erase() +#define ao_config_write(pos,bytes, len) ao_eeprom_write(pos, bytes, len) +#define ao_config_read(pos,bytes, len) ao_eeprom_read(pos, bytes, len) #define ao_config_flush() #endif diff --git a/src/core/ao_log.c b/src/core/ao_log.c index 8bcb7707..1a1f5ff6 100644 --- a/src/core/ao_log.c +++ b/src/core/ao_log.c @@ -17,6 +17,7 @@ #include "ao.h" #include +#include __pdata uint32_t ao_log_current_pos; __pdata uint32_t ao_log_end_pos; @@ -48,7 +49,7 @@ static __xdata struct ao_log_erase erase; static uint32_t ao_log_erase_pos(uint8_t i) { - return i * sizeof (struct ao_log_erase) + AO_STORAGE_ERASE_LOG; + return i * sizeof (struct ao_log_erase); } void @@ -56,14 +57,14 @@ ao_log_write_erase(uint8_t pos) { erase.unused = 0x00; erase.flight = ao_flight_number; - ao_storage_write(ao_log_erase_pos(pos), &erase, sizeof (erase)); - ao_storage_flush(); + ao_config_write(ao_log_erase_pos(pos), &erase, sizeof (erase)); + ao_config_flush(); } static void ao_log_read_erase(uint8_t pos) { - ao_storage_read(ao_log_erase_pos(pos), &erase, sizeof (erase)); + ao_config_read(ao_log_erase_pos(pos), &erase, sizeof (erase)); } @@ -87,7 +88,7 @@ ao_log_erase_mark(void) static uint8_t ao_log_slots() { - return (uint8_t) (ao_storage_config / ao_config.flight_log_max); + return (uint8_t) (ao_storage_log_max / ao_config.flight_log_max); } uint32_t diff --git a/src/telemetrum-v2.0/Makefile b/src/telemetrum-v2.0/Makefile index be72d493..a5370224 100644 --- a/src/telemetrum-v2.0/Makefile +++ b/src/telemetrum-v2.0/Makefile @@ -70,6 +70,7 @@ ALTOS_SRC = \ ao_m25.c \ ao_usb_stm.c \ ao_exti_stm.c \ + ao_eeprom_stm.c \ ao_report.c \ ao_convert_pa.c \ ao_log.c \ diff --git a/src/telemetrum-v2.0/ao_pins.h b/src/telemetrum-v2.0/ao_pins.h index a7236b80..02f0f5e3 100644 --- a/src/telemetrum-v2.0/ao_pins.h +++ b/src/telemetrum-v2.0/ao_pins.h @@ -59,8 +59,11 @@ #define SERIAL_3_PC10_PC11 0 #define SERIAL_3_PD8_PD9 0 +#define AO_CONFIG_DEFAULT_FLIGHT_LOG_MAX (512 * 1024) #define HAS_EEPROM 1 #define USE_INTERNAL_FLASH 0 +#define USE_EEPROM_CONFIG 1 +#define USE_STORAGE_CONFIG 0 #define HAS_USB 1 #define HAS_BEEP 1 #define BEEPER_CHANNEL 4 diff --git a/src/telemetrum-v2.0/ao_telemetrum.c b/src/telemetrum-v2.0/ao_telemetrum.c index d79aba54..23556c6c 100644 --- a/src/telemetrum-v2.0/ao_telemetrum.c +++ b/src/telemetrum-v2.0/ao_telemetrum.c @@ -62,6 +62,8 @@ main(void) ao_mma655x_init(); #endif + ao_eeprom_init(); + ao_storage_init(); ao_flight_init();