Skip to content

Commit

Permalink
write eeprom or name if they are available even config is in flash (#333
Browse files Browse the repository at this point in the history
)

* write eeprom or name if they are available even config is in flash
* name must be permanently saved in eeprom for non AVR architectures
* comment that comit() name changes is not required
* use always configStoredInEEPROM() and not a global variable
  • Loading branch information
elral authored Sep 30, 2024
1 parent bb0f95e commit 018fe51
Showing 1 changed file with 19 additions and 8 deletions.
27 changes: 19 additions & 8 deletions src/Config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ void resetConfig();
void readConfig();
void _activateConfig();
void readConfigFromMemory(bool configFromFlash);

bool configStoredInFlash()
{
return configLengthFlash > 0;
Expand Down Expand Up @@ -138,16 +139,25 @@ void OnSetConfig()
char *cfg = cmdMessenger.readStringArg();
uint8_t cfgLen = strlen(cfg);

bool maxConfigLengthNotExceeded = configLengthEEPROM + cfgLen + 1 < MEM_LEN_CONFIG;
if (maxConfigLengthNotExceeded) {
MFeeprom.write_block(MEM_OFFSET_CONFIG + configLengthEEPROM, cfg, cfgLen + 1); // save the received config string including the terminatung NULL (+1) to EEPROM
configLengthEEPROM += cfgLen;
cmdMessenger.sendCmd(kStatus, configLengthEEPROM);
} else
cmdMessenger.sendCmd(kStatus, -1); // last successfull saving block is already NULL terminated, nothing more todo
if (!configStoredInFlash()) {
bool maxConfigLengthNotExceeded = configLengthEEPROM + cfgLen + 1 < MEM_LEN_CONFIG;
if (maxConfigLengthNotExceeded) {
// save the received config string including the terminatung NULL (+1) to EEPROM
MFeeprom.write_block(MEM_OFFSET_CONFIG + configLengthEEPROM, cfg, cfgLen + 1);
configLengthEEPROM += cfgLen;
cmdMessenger.sendCmd(kStatus, configLengthEEPROM);
} else {
// staus message to connector, failure on setting config
// connector does not check for status = -1
cmdMessenger.sendCmd(kStatus, -1);
}
#ifdef DEBUG2CMDMESSENGER
cmdMessenger.sendCmd(kDebug, F("Setting config end"));
cmdMessenger.sendCmd(kDebug, F("Setting config end"));
#endif
} else {
// connector does not check for status = -1
cmdMessenger.sendCmd(kStatus, -1);
}
}

void resetConfig()
Expand Down Expand Up @@ -721,6 +731,7 @@ void storeName()
if (!configStoredInFlash()) {
MFeeprom.write_byte(MEM_OFFSET_NAME, '#');
MFeeprom.write_block(MEM_OFFSET_NAME + 1, name, MEM_LEN_NAME - 1);
// MFeeprom.commit() is not required, name is always set before config
}
}

Expand Down

0 comments on commit 018fe51

Please sign in to comment.