From 44f20854010f1cc6876111d1a939204dd56025cf Mon Sep 17 00:00:00 2001 From: Georg Date: Tue, 7 Nov 2017 15:29:23 +0100 Subject: [PATCH] fixed bug within cycle_settings button functionality --- Firmware/Chameleon-Mini/Settings.c | 52 ++++++++++++--------- Firmware/Chameleon-Mini/Settings.h | 1 + Firmware/Chameleon-Mini/Terminal/Commands.c | 1 - 3 files changed, 32 insertions(+), 22 deletions(-) diff --git a/Firmware/Chameleon-Mini/Settings.c b/Firmware/Chameleon-Mini/Settings.c index 90cbaf6..7f7b384 100644 --- a/Firmware/Chameleon-Mini/Settings.c +++ b/Firmware/Chameleon-Mini/Settings.c @@ -35,7 +35,14 @@ void SettingsLoad(void) { void SettingsSave(void) { #if ENABLE_EEPROM_SETTINGS - WriteEEPBlock((uint16_t) &StoredSettings, &GlobalSettings, sizeof(SettingsType)); + WriteEEPBlock((uint16_t) &StoredSettings, &GlobalSettings, sizeof(SettingsType)); +#endif +} + +void ActiveSettingNumberSave(void) { +#if ENABLE_EEPROM_SETTINGS + eeprom_update_byte(&StoredSettings.ActiveSettingIdx, GlobalSettings.ActiveSettingIdx); + eeprom_update_word((uint16_t*)&StoredSettings.ActiveSettingPtr, (uint16_t)GlobalSettings.ActiveSettingPtr); #endif } @@ -56,33 +63,36 @@ void SettingsCycle(void) { } bool SettingsSetActiveById(uint8_t Setting) { - if ( (Setting >= SETTINGS_FIRST) && (Setting <= SETTINGS_LAST) ) { - uint8_t SettingIdx = SETTING_TO_INDEX(Setting); + if ( (Setting >= SETTINGS_FIRST) && (Setting <= SETTINGS_LAST) ) { + uint8_t SettingIdx = SETTING_TO_INDEX(Setting); - /* Break potentially pending timeout task (manual timeout) */ - CommandLinePendingTaskBreak(); + /* Break potentially pending timeout task (manual timeout) */ + CommandLinePendingTaskBreak(); - /* Store current memory contents permanently */ - MemoryStore(); + /* Store current memory contents permanently */ + MemoryStore(); - GlobalSettings.ActiveSettingIdx = SettingIdx; - GlobalSettings.ActiveSettingPtr = - &GlobalSettings.Settings[SettingIdx]; + GlobalSettings.ActiveSettingIdx = SettingIdx; + GlobalSettings.ActiveSettingPtr = + &GlobalSettings.Settings[SettingIdx]; - /* Settings have changed. Progress changes through system */ - ConfigurationSetById(GlobalSettings.ActiveSettingPtr->Configuration); - LogSetModeById(GlobalSettings.ActiveSettingPtr->LogMode); + /* Settings have changed. Progress changes through system */ + ConfigurationSetById(GlobalSettings.ActiveSettingPtr->Configuration); + LogSetModeById(GlobalSettings.ActiveSettingPtr->LogMode); - /* Recall new memory contents */ - MemoryRecall(); + /* Recall new memory contents */ + MemoryRecall(); - /* Notify LED. blink according to current setting */ - LEDHook(LED_SETTING_CHANGE, LED_BLINK + SettingIdx); + /* Store new setting number. */ + ActiveSettingNumberSave(); - return true; - } else { - return false; - } + /* Notify LED. blink according to current setting */ + LEDHook(LED_SETTING_CHANGE, LED_BLINK + SettingIdx); + + return true; + } else { + return false; + } } uint8_t SettingsGetActiveById(void) { diff --git a/Firmware/Chameleon-Mini/Settings.h b/Firmware/Chameleon-Mini/Settings.h index 29e4b9e..987bfd7 100644 --- a/Firmware/Chameleon-Mini/Settings.h +++ b/Firmware/Chameleon-Mini/Settings.h @@ -41,6 +41,7 @@ extern SettingsType GlobalSettings; void SettingsLoad(void); void SettingsSave(void); +void ActiveSettingNumberSave(void); void SettingsCycle(void); bool SettingsSetActiveById(uint8_t Setting); diff --git a/Firmware/Chameleon-Mini/Terminal/Commands.c b/Firmware/Chameleon-Mini/Terminal/Commands.c index ecc63b8..efd5cf8 100644 --- a/Firmware/Chameleon-Mini/Terminal/Commands.c +++ b/Firmware/Chameleon-Mini/Terminal/Commands.c @@ -357,7 +357,6 @@ CommandStatusIdType CommandGetSetting(char* OutParam) CommandStatusIdType CommandSetSetting(char* OutMessage, const char* InParam) { if (SettingsSetActiveByName(InParam)) { - SettingsSave(); return COMMAND_INFO_OK_ID; } else { return COMMAND_ERR_INVALID_PARAM_ID;