bool SettingsSetActiveById(uint8_t Setting) { if ( (Setting >= SETTINGS_FIRST) && (Setting <= SETTINGS_LAST) ) { uint8_t SettingIdx = SETTING_TO_INDEX(Setting); /* Break potentially pending timeout task (manual timeout) */ CommandLinePendingTaskBreak(); if (SettingIdx != GlobalSettings.ActiveSettingIdx) { /* Store current memory contents permanently */ MemoryStore(); GlobalSettings.ActiveSettingIdx = SettingIdx; GlobalSettings.ActiveSettingPtr = &GlobalSettings.Settings[SettingIdx]; /* Settings have changed. Progress changes through system */ ConfigurationSetById(GlobalSettings.ActiveSettingPtr->Configuration); LogSetModeById(GlobalSettings.ActiveSettingPtr->LogMode); /* Recall new memory contents */ MemoryRecall(); SETTING_UPDATE(GlobalSettings.ActiveSettingIdx); SETTING_UPDATE(GlobalSettings.ActiveSettingPtr); } /* Notify LED. blink according to current setting */ LEDHook(LED_SETTING_CHANGE, LED_BLINK + SettingIdx); return true; } else { return false; } }
bool ConfigurationSetByName(const char* ConfigurationName) { uint8_t i; /* Loop through table trying to find the configuration */ for (i=0; i<(sizeof(ConfigurationTable) / sizeof(*ConfigurationTable)); i++) { const char* pTableConfigName = ConfigurationTable[i].ConfigurationName; const char* pRequestedConfigName = ConfigurationName; bool StringMismatch = false; char c = pgm_read_byte(pTableConfigName); /* Try to keep running until both strings end at the same point */ while ( !(c == '\0' && *pRequestedConfigName == '\0') ) { if ( (c == '\0') || (*pRequestedConfigName == '\0') ) { /* One String ended before the other did -> unequal length */ StringMismatch = true; break; } if (c != *pRequestedConfigName) { /* Character mismatch */ StringMismatch = true; break; } /* Proceed to next character */ pTableConfigName++; pRequestedConfigName++; c = pgm_read_byte(pTableConfigName); } if (!StringMismatch) { /* Configuration found */ ConfigurationSetById(i); return true; } } return false; }
void ConfigurationInit(void) { ConfigurationSetById(GlobalSettings.ActiveSettingPtr->Configuration); }