auto-sync

This commit is contained in:
rusEfi 2017-02-14 01:03:01 -05:00
parent 224bf325a7
commit 1eec06cb51
7 changed files with 37 additions and 15 deletions

View File

@ -187,7 +187,7 @@ void setHondaAccordConfigurationThreeWires(DECLARE_ENGINE_PARAMETER_F) {
void setHondaAccordConfigurationDip(DECLARE_ENGINE_PARAMETER_F) {
engineConfiguration->engineType = HONDA_ACCORD_CD_DIP;
engineConfiguration->trigger.type = TT_HONDA_ACCORD_CD_DIP;
engineConfiguration->trigger.type = TT_HONDA_1_4_24;
setHondaAccordConfigurationCommon(PASS_ENGINE_PARAMETER_F);
}

View File

@ -167,8 +167,8 @@ case TT_DODGE_STRATUS:
return "TT_DODGE_STRATUS";
case TT_36_2_2_2:
return "TT_36_2_2_2";
case TT_HONDA_ACCORD_CD_DIP:
return "TT_HONDA_ACCORD_CD_DIP";
case TT_HONDA_1_4_24:
return "TT_HONDA_1_4_24";
case TT_HONDA_4_24:
return "TT_HONDA_4_24";
case TT_MAZDA_MIATA_NA:

View File

@ -167,7 +167,7 @@ typedef enum {
// this makes sense because mechanical spark distribution does not require synchronization
TT_HONDA_4_24 = 12,
TT_HONDA_ACCORD_CD_DIP = 13,
TT_HONDA_1_4_24 = 13,
// cam-based
TT_DODGE_NEON_2003_CAM = 14,

View File

@ -40,6 +40,14 @@ extern engine_configuration_s *engineConfiguration;
#define PERSISTENT_SIZE sizeof(persistent_config_container_s)
/**
* https://sourceforge.net/p/rusefi/tickets/335/
*
* Address of second cofig copy, rounded to 4K. 4K is the page size is it?
*
*/
#define FLASH_ADDR_SECOND_COPY (FLASH_ADDR + ((PERSISTENT_SIZE + 4095) & 0xFFFFF000))
crc_t flashStateCrc(persistent_config_container_s *state) {
return calc_crc((const crc_t*) &state->persistentConfiguration, sizeof(persistent_config_s));
}
@ -77,6 +85,7 @@ void writeToFlashNow(void) {
scheduleMsg(logger, "Flashing with CRC=%d", crcResult);
efitimems_t nowMs = currentTimeMillis();
int result = flashWrite(FLASH_ADDR, (const char *) &persistentState, PERSISTENT_SIZE);
flashWrite(FLASH_ADDR_SECOND_COPY, (const char *) &persistentState, PERSISTENT_SIZE);
scheduleMsg(logger, "Flash programmed in %dms", currentTimeMillis() - nowMs);
bool isSuccess = result == FLASH_RETURN_SUCCESS;
if (isSuccess) {
@ -99,27 +108,41 @@ static void doResetConfiguration(void) {
persisted_configuration_state_e flashState;
static persisted_configuration_state_e doReadConfiguration(flashaddr_t address, Logging * logger) {
printMsg(logger, "readFromFlash %x", address);
flashRead(address, (char *) &persistentState, PERSISTENT_SIZE);
if (!isValidCrc(&persistentState)) {
return CRC_FAILED;
} else if (persistentState.version != FLASH_DATA_VERSION || persistentState.size != PERSISTENT_SIZE) {
return INCOMPATIBLE_VERSION;
} else {
return PC_OK;
}
}
/**
* this method could and should be executed before we have any
* connectivity so no console output here
*/
persisted_configuration_state_e readConfiguration(Logging * logger) {
efiAssert(getRemainingStack(chThdSelf()) > 256, "read f", PC_ERROR);
flashRead(FLASH_ADDR, (char *) &persistentState, PERSISTENT_SIZE);
persisted_configuration_state_e result;
if (!isValidCrc(&persistentState)) {
result = CRC_FAILED;
persisted_configuration_state_e result = doReadConfiguration(FLASH_ADDR, logger);
if (result != PC_OK) {
printMsg(logger, "Reading second configuration copy");
result = doReadConfiguration(FLASH_ADDR_SECOND_COPY, logger);
}
if (result == CRC_FAILED) {
warning(CUSTOM_ERR_FLASH_CRC_FAILED, "flash CRC failed");
resetConfigurationExt(logger, DEFAULT_ENGINE_TYPE PASS_ENGINE_PARAMETER);
} else if (persistentState.version != FLASH_DATA_VERSION || persistentState.size != PERSISTENT_SIZE) {
result = INCOMPATIBLE_VERSION;
} else if (result == INCOMPATIBLE_VERSION) {
resetConfigurationExt(logger, engineConfiguration->engineType PASS_ENGINE_PARAMETER);
} else {
/**
* At this point we know that CRC and version number is what we expect. Safe to assume it's a valid configuration.
*/
result = OK;
applyNonPersistentConfiguration(logger PASS_ENGINE_PARAMETER);
}
// we can only change the state after the CRC check
@ -128,7 +151,6 @@ persisted_configuration_state_e readConfiguration(Logging * logger) {
}
void readFromFlash(void) {
printMsg(logger, "readFromFlash()");
persisted_configuration_state_e result = readConfiguration(logger);
if (result == CRC_FAILED) {

View File

@ -14,7 +14,7 @@
#define FLASH_DATA_VERSION 10000
typedef enum {
OK = 0,
PC_OK = 0,
CRC_FAILED = 1,
INCOMPATIBLE_VERSION = 2,
RESET_REQUESTED = 3,

View File

@ -538,7 +538,7 @@ void TriggerShape::initializeTriggerShape(Logging *logger DECLARE_ENGINE_PARAMET
configureHondaAccordShifted(triggerShape PASS_ENGINE_PARAMETER);
break;
case TT_HONDA_ACCORD_CD_DIP:
case TT_HONDA_1_4_24:
configureHondaAccordCDDip(triggerShape PASS_ENGINE_PARAMETER);
break;

View File

@ -249,5 +249,5 @@ int getRusEfiVersion(void) {
return 123; // this is here to make the compiler happy about the unused array
if (UNUSED_CCM_SIZE[0] * 0 != 0)
return 3211; // this is here to make the compiler happy about the unused array
return 20170213;
return 20170214;
}