void readFromFlash(void) { efiAssertVoid(getRemainingStack(chThdSelf()) > 256, "read f"); printMsg(logger, "readFromFlash()"); flashRead(FLASH_ADDR, (char *) &persistentState, PERSISTENT_SIZE); persisted_configuration_state_e result; if (!isValidCrc(&persistentState)) { result = CRC_FAILED; resetConfigurationExt(logger, DEFAULT_ENGINE_TYPE PASS_ENGINE_PARAMETER); } else if (persistentState.version != FLASH_DATA_VERSION || persistentState.size != PERSISTENT_SIZE) { 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 engineConfiguration->firmwareVersion = getRusEfiVersion(); if (result == CRC_FAILED) { printMsg(logger, "Need to reset flash to default due to CRC"); } else if (result == INCOMPATIBLE_VERSION) { printMsg(logger, "Resetting but saving engine type [%d]", engineConfiguration->engineType); } else { printMsg(logger, "Got valid configuration from flash!"); } }
static void updateTriggerShapeIfNeeded(PwmConfig *state) { if (emulatorConfigVersion.isOld()) { scheduleMsg(logger, "Stimulator: updating trigger shape: %d/%d %d", emulatorConfigVersion.getVersion(), getGlobalConfigurationVersion(), currentTimeMillis()); applyNonPersistentConfiguration(logger PASS_ENGINE_PARAMETER); TriggerShape *s = &engine->triggerShape; pin_state_t *pinStates[PWM_PHASE_MAX_WAVE_PER_PWM] = { s->wave.waves[0].pinStates, s->wave.waves[1].pinStates, s->wave.waves[2].pinStates }; copyPwmParameters(state, s->getSize(), s->wave.switchTimes, PWM_PHASE_MAX_WAVE_PER_PWM, pinStates); state->safe.periodNt = -1; // this would cause loop re-initialization } }
static void readFromFlash(void) { flashRead(FLASH_ADDR, (char *) &flashState, FLASH_USAGE); setDefaultNonPersistentConfiguration(engineConfiguration2); if (!isValidCrc(&flashState)) { scheduleMsg(&logger, "Need to reset flash to default"); resetConfigurationExt(defaultEngineType, engineConfiguration, engineConfiguration2, boardConfiguration); } else { scheduleMsg(&logger, "Got valid configuration from flash!"); applyNonPersistentConfiguration(engineConfiguration, engineConfiguration2, engineConfiguration->engineType); } // we can only change the state after the CRC check engineConfiguration->firmwareVersion = getRusEfiVersion(); }
void readFromFlash(void) { printMsg(&logger, "readFromFlash()"); flashRead(FLASH_ADDR, (char *) &persistentState, PERSISTENT_SIZE); //setDefaultNonPersistentConfiguration(engineConfiguration2); if (!isValidCrc(&persistentState) || persistentState.size != PERSISTENT_SIZE) { printMsg(&logger, "Need to reset flash to default"); resetConfigurationExt(&logger, defaultEngineType, engineConfiguration, engineConfiguration2, boardConfiguration); } else { printMsg(&logger, "Got valid configuration from flash!"); applyNonPersistentConfiguration(&logger, engineConfiguration, engineConfiguration2); } // we can only change the state after the CRC check engineConfiguration->firmwareVersion = getRusEfiVersion(); }
/** * 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; 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; 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 engineConfiguration->byFirmwareVersion = getRusEfiVersion(); return result; }
void resetConfigurationExt(Logging * logger, engine_type_e engineType DECLARE_ENGINE_PARAMETER_S) { /** * Let's apply global defaults first */ setDefaultConfiguration(PASS_ENGINE_PARAMETER_F); #if EFI_SIMULATOR || defined(__DOXYGEN__) engineConfiguration->directSelfStimulation = true; #endif /* */ engineConfiguration->engineType = engineType; engineConfiguration->headerMagicValue = HEADER_MAGIC_NUMBER; /** * And override them with engine-specific defaults */ switch (engineType) { case CUSTOM_ENGINE: setCustomEngineConfiguration(PASS_ENGINE_PARAMETER_F); break; case ACURA_RSX: setAcuraRSX(engineConfiguration); break; #if EFI_SUPPORT_DODGE_NEON || defined(__DOXYGEN__) case DODGE_NEON_1995: setDodgeNeon1995EngineConfiguration(PASS_ENGINE_PARAMETER_F); break; case DODGE_NEON_2003: setDodgeNeonNGCEngineConfiguration(PASS_ENGINE_PARAMETER_F); break; #endif /* EFI_SUPPORT_DODGE_NEON */ #if EFI_SUPPORT_FORD_ASPIRE || defined(__DOXYGEN__) case FORD_ASPIRE_1996: setFordAspireEngineConfiguration(PASS_ENGINE_PARAMETER_F); break; #endif /* EFI_SUPPORT_FORD_ASPIRE */ #if EFI_SUPPORT_FORD_FIESTA || defined(__DOXYGEN__) case FORD_FIESTA: setFordFiestaDefaultEngineConfiguration(PASS_ENGINE_PARAMETER_F); break; #endif /* EFI_SUPPORT_FORD_FIESTA */ #if EFI_SUPPORT_NISSAN_PRIMERA || defined(__DOXYGEN__) case NISSAN_PRIMERA: setNissanPrimeraEngineConfiguration(engineConfiguration); break; #endif case HONDA_ACCORD_CD: setHondaAccordConfigurationThreeWires(PASS_ENGINE_PARAMETER_F); break; case HONDA_ACCORD_CD_TWO_WIRES: setHondaAccordConfiguration1_24(PASS_ENGINE_PARAMETER_F); break; case HONDA_ACCORD_CD_DIP: setHondaAccordConfigurationDip(PASS_ENGINE_PARAMETER_F); break; case MITSU_4G93: setMitsubishiConfiguration(PASS_ENGINE_PARAMETER_F); break; #if EFI_SUPPORT_1995_FORD_INLINE_6 || defined(__DOXYGEN__) case FORD_INLINE_6_1995: setFordInline6(PASS_ENGINE_PARAMETER_F); break; #endif /* EFI_SUPPORT_1995_FORD_INLINE_6 */ case GY6_139QMB: setGy6139qmbDefaultEngineConfiguration(PASS_ENGINE_PARAMETER_F); break; case MAZDA_MIATA_NB: setMazdaMiataNbEngineConfiguration(PASS_ENGINE_PARAMETER_F); break; case MAZDA_323: setMazda323EngineConfiguration(engineConfiguration); break; case MAZDA_626: setMazda626EngineConfiguration(PASS_ENGINE_PARAMETER_F); break; case SATURN_ION_2004: setSaturnIonEngineConfiguration(engineConfiguration); break; case MINI_COOPER_R50: setMiniCooperR50(engineConfiguration); break; case FORD_ESCORT_GT: setFordEscortGt(PASS_ENGINE_PARAMETER_F); break; case MIATA_1990: setMiata1990(PASS_ENGINE_PARAMETER_F); break; case MIATA_1994_DEVIATOR: setMiata1994_d(PASS_ENGINE_PARAMETER_F); break; case MIATA_1994_SPAGS: setMiata1994_s(PASS_ENGINE_PARAMETER_F); break; case MIATA_1996: setMiata1996(PASS_ENGINE_PARAMETER_F); break; case CITROEN_TU3JP: setCitroenBerlingoTU3JPConfiguration(PASS_ENGINE_PARAMETER_F); break; case ROVER_V8: setRoverv8(PASS_ENGINE_PARAMETER_F); break; case SUBARU_2003_WRX: setSubaru2003Wrx(PASS_ENGINE_PARAMETER_F); break; case BMW_E34: setBmwE34(PASS_ENGINE_PARAMETER_F); break; case GM_2_2: setGm2_2(PASS_ENGINE_PARAMETER_F); break; case DODGE_RAM: setDodgeRam1996(PASS_ENGINE_PARAMETER_F); break; case DODGE_STRATUS: setDodgeStratus(PASS_ENGINE_PARAMETER_F); break; case VW_ABA: setVwAba(PASS_ENGINE_PARAMETER_F); break; case TEST_ENGINE: setTestEngineConfiguration(PASS_ENGINE_PARAMETER_F); break; case SACHS: setSachs(PASS_ENGINE_PARAMETER_F); break; case DAIHATSU: setDaihatsu(PASS_ENGINE_PARAMETER_F); break; default: warning(OBD_PCM_Processor_Fault, "Unexpected engine type: %d", engineType); } applyNonPersistentConfiguration(logger PASS_ENGINE_PARAMETER); // todo: eliminate triggerShape.operationMode? if (engineConfiguration->operationMode != engine->triggerShape.getOperationMode()) firmwareError("operationMode mismatch"); #if EFI_TUNER_STUDIO syncTunerStudioCopy(); #endif }