From 110ec2ec1d3c7bb280d40c50d5c6dc77f081c589 Mon Sep 17 00:00:00 2001 From: rusEfi Date: Fri, 12 Sep 2014 20:05:24 -0500 Subject: [PATCH] auto-sync --- .../controllers/algo/engine_configuration.cpp | 6 +++++ .../controllers/algo/engine_configuration.h | 2 +- firmware/controllers/algo/rusefi_enums.h | 2 ++ firmware/controllers/flash_main.cpp | 27 ++++++++++--------- .../controllers/trigger/trigger_decoder.cpp | 8 +++--- .../controllers/trigger/trigger_decoder.h | 2 +- .../trigger/trigger_emulator_algo.cpp | 3 ++- .../trigger/trigger_emulator_algo.h | 13 --------- firmware/controllers/trigger/trigger_gm.cpp | 2 +- firmware/controllers/trigger/trigger_gm.h | 2 +- .../trigger/trigger_mitsubishi.cpp | 2 +- .../controllers/trigger/trigger_mitsubishi.h | 2 +- unit_tests/engine_test_helper.cpp | 2 +- unit_tests/test_trigger_decoder.cpp | 16 +++++------ .../simulator/rusEfiFunctionalTest.cpp | 2 +- 15 files changed, 45 insertions(+), 46 deletions(-) diff --git a/firmware/controllers/algo/engine_configuration.cpp b/firmware/controllers/algo/engine_configuration.cpp index ccdd4968b3..1df7521ed7 100644 --- a/firmware/controllers/algo/engine_configuration.cpp +++ b/firmware/controllers/algo/engine_configuration.cpp @@ -264,6 +264,11 @@ void setDefaultConfiguration(engine_configuration_s *engineConfiguration, board_ engineConfiguration->isWaveAnalyzerEnabled = true; engineConfiguration->isIdleThreadEnabled = true; + /** + * this is RPM. 10000 rpm is only 166Hz, 800 rpm is 13Hz + */ + boardConfiguration->triggerSimulatorFrequency = 1200; + boardConfiguration->idleValvePin = GPIOE_2; boardConfiguration->idleValvePinMode = OM_DEFAULT; @@ -387,6 +392,7 @@ void resetConfigurationExt(Logging * logger, engine_type_e engineType, engine_co */ setDefaultConfiguration(engineConfiguration, boardConfiguration); engineConfiguration->engineType = engineType; + engineConfiguration->headerMagicValue = HEADER_MAGIC_NUMBER; /** * And override them with engine-specific defaults */ diff --git a/firmware/controllers/algo/engine_configuration.h b/firmware/controllers/algo/engine_configuration.h index 6089a629e3..e3e6f4be75 100644 --- a/firmware/controllers/algo/engine_configuration.h +++ b/firmware/controllers/algo/engine_configuration.h @@ -202,7 +202,7 @@ typedef struct { } board_configuration_s; - +#define HEADER_MAGIC_NUMBER 0x1221239 /** * @brief Engine configuration. diff --git a/firmware/controllers/algo/rusefi_enums.h b/firmware/controllers/algo/rusefi_enums.h index 917c76e159..0d08f5272a 100644 --- a/firmware/controllers/algo/rusefi_enums.h +++ b/firmware/controllers/algo/rusefi_enums.h @@ -85,6 +85,8 @@ typedef enum { MIATA_1994 = 20, MIATA_1996 = 21, + ET_UNUSED = 22, + Force_4b_engine_type = ENUM_SIZE_HACK, } engine_type_e; diff --git a/firmware/controllers/flash_main.cpp b/firmware/controllers/flash_main.cpp index 8a4e42d4e8..957517bbea 100644 --- a/firmware/controllers/flash_main.cpp +++ b/firmware/controllers/flash_main.cpp @@ -21,7 +21,7 @@ #include "ec2.h" -static engine_type_e defaultEngineType = FORD_ASPIRE_1996; +#define DEFAULT_ENGINE_TYPE FORD_ASPIRE_1996 static bool needToWriteConfiguration = false; @@ -30,7 +30,6 @@ static Logging logger; extern persistent_config_container_s persistentState; extern engine_configuration_s *engineConfiguration; -extern board_configuration_s *boardConfiguration; extern engine_configuration2_s * engineConfiguration2; @@ -91,23 +90,27 @@ static void doResetConfiguration(void) { resetConfigurationExt(&logger, engineConfiguration->engineType, engineConfiguration, engineConfiguration2); } +static bool hasValidEngineType(engine_configuration_s *engineConfiguration) { + uint32_t ordinal = (uint32_t)engineConfiguration->engineType; + return ordinal < ET_UNUSED && engineConfiguration->headerMagicValue == HEADER_MAGIC_NUMBER; +} + void readFromFlash(void) { printMsg(&logger, "readFromFlash()"); - flashRead(FLASH_ADDR, (char *) &persistentState, PERSISTENT_SIZE); - //setDefaultNonPersistentConfiguration(engineConfiguration2); - - if (!isValidCrc(&persistentState) || persistentState.size != PERSISTENT_SIZE) { + if (!isValidCrc(&persistentState)) { printMsg(&logger, "Need to reset flash to default due to CRC"); - resetConfigurationExt(&logger, defaultEngineType, engineConfiguration, engineConfiguration2); - } else if (persistentState.version != FLASH_DATA_VERSION) { - printMsg(&logger, "Need to reset flash to default due to version change"); - resetConfigurationExt(&logger, defaultEngineType, engineConfiguration, engineConfiguration2); - - } else { + resetConfigurationExt(&logger, DEFAULT_ENGINE_TYPE, engineConfiguration, engineConfiguration2); + } else if (persistentState.version == FLASH_DATA_VERSION && persistentState.size == PERSISTENT_SIZE) { printMsg(&logger, "Got valid configuration from flash!"); applyNonPersistentConfiguration(&logger, engineConfiguration, engineConfiguration2); + } else if (hasValidEngineType(engineConfiguration)) { + printMsg(&logger, "Resetting but saving engine type [%d]", engineConfiguration->engineType); + resetConfigurationExt(&logger, engineConfiguration->engineType, engineConfiguration, engineConfiguration2); + } else { + printMsg(&logger, "Need to reset flash to default due to version change"); + resetConfigurationExt(&logger, DEFAULT_ENGINE_TYPE, engineConfiguration, engineConfiguration2); } // we can only change the state after the CRC check engineConfiguration->firmwareVersion = getRusEfiVersion(); diff --git a/firmware/controllers/trigger/trigger_decoder.cpp b/firmware/controllers/trigger/trigger_decoder.cpp index 1cd463ea6d..e1355e46b6 100644 --- a/firmware/controllers/trigger/trigger_decoder.cpp +++ b/firmware/controllers/trigger/trigger_decoder.cpp @@ -176,12 +176,12 @@ void initializeSkippedToothTriggerShapeExt(trigger_shape_s *s, int totalTeethCou /** * External logger is needed because at this point our logger is not yet initialized */ -void initializeTriggerShape(Logging *logger, engine_configuration_s *engineConfiguration, +void initializeTriggerShape(Logging *logger, engine_configuration_s const *engineConfiguration, engine_configuration2_s *engineConfiguration2) { #if EFI_PROD_CODE scheduleMsg(logger, "initializeTriggerShape()"); #endif - trigger_config_s *triggerConfig = &engineConfiguration->triggerConfig; + const trigger_config_s *triggerConfig = &engineConfiguration->triggerConfig; trigger_shape_s *triggerShape = &engineConfiguration2->triggerShape; setTriggerSynchronizationGap(triggerShape, 2); @@ -212,11 +212,11 @@ void initializeTriggerShape(Logging *logger, engine_configuration_s *engineConfi return; case TT_FORD_ASPIRE: - configureFordAspireTriggerShape(triggerConfig, triggerShape); + configureFordAspireTriggerShape(triggerShape); return; case TT_GM_7X: - configureGmTriggerShape(triggerConfig, triggerShape); + configureGmTriggerShape(triggerShape); return; case TT_FORD_ESCORT_GT: diff --git a/firmware/controllers/trigger/trigger_decoder.h b/firmware/controllers/trigger/trigger_decoder.h index 4cd137d5ae..5c7a0ccae5 100644 --- a/firmware/controllers/trigger/trigger_decoder.h +++ b/firmware/controllers/trigger/trigger_decoder.h @@ -79,7 +79,7 @@ private: void initializeSkippedToothTriggerShapeExt(trigger_shape_s *s, int totalTeethCount, int skippedCount, operation_mode_e operationMode); uint32_t findTriggerZeroEventIndex(trigger_shape_s * shape, trigger_config_s const*triggerConfig); -void initializeTriggerShape(Logging *logger, engine_configuration_s *engineConfiguration, engine_configuration2_s *engineConfiguration2); +void initializeTriggerShape(Logging *logger, engine_configuration_s const *engineConfiguration, engine_configuration2_s *engineConfiguration2); void initTriggerDecoder(void); #ifdef __cplusplus diff --git a/firmware/controllers/trigger/trigger_emulator_algo.cpp b/firmware/controllers/trigger/trigger_emulator_algo.cpp index a4250adff1..934a4d2982 100644 --- a/firmware/controllers/trigger/trigger_emulator_algo.cpp +++ b/firmware/controllers/trigger/trigger_emulator_algo.cpp @@ -31,6 +31,7 @@ static Logging logger; static LocalVersionHolder localVersion; void setTriggerEmulatorRPM(int rpm) { + engineConfiguration->bc.triggerSimulatorFrequency = rpm; /** * All we need to do here is to change the periodMs * togglePwmState() would see that the periodMs has changed and act accordingly @@ -63,7 +64,7 @@ void initTriggerEmulatorLogic(pwm_gen_callback *stateChangeCallback) { trigger_shape_s *s = &engineConfiguration2->triggerShape; - setTriggerEmulatorRPM(DEFAULT_EMULATION_RPM); + setTriggerEmulatorRPM(engineConfiguration->bc.triggerSimulatorFrequency); int *pinStates[PWM_PHASE_MAX_WAVE_PER_PWM] = { s->wave.waves[0].pinStates, s->wave.waves[1].pinStates, s->wave.waves[2].pinStates}; weComplexInit("position sensor", &triggerSignal, s->getSize(), s->wave.switchTimes, PWM_PHASE_MAX_WAVE_PER_PWM, pinStates, updateTriggerShapeIfNeeded, stateChangeCallback); diff --git a/firmware/controllers/trigger/trigger_emulator_algo.h b/firmware/controllers/trigger/trigger_emulator_algo.h index e5f884fbb3..aae64a1a95 100644 --- a/firmware/controllers/trigger/trigger_emulator_algo.h +++ b/firmware/controllers/trigger/trigger_emulator_algo.h @@ -10,19 +10,6 @@ #include "pwm_generator_logic.h" -/** - * this is RPM. 10000 rpm is only 166Hz, 800 rpm is 13Hz - */ -#define DEFAULT_EMULATION_RPM 1200 - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - void initTriggerEmulatorLogic(pwm_gen_callback *callback); -#ifdef __cplusplus -} -#endif /* __cplusplus */ #endif /* TRIGGER_EMULATOR_ALGO_H_ */ diff --git a/firmware/controllers/trigger/trigger_gm.cpp b/firmware/controllers/trigger/trigger_gm.cpp index 5eeae80b90..982a2d3b60 100644 --- a/firmware/controllers/trigger/trigger_gm.cpp +++ b/firmware/controllers/trigger/trigger_gm.cpp @@ -7,7 +7,7 @@ #include "trigger_gm.h" -void configureGmTriggerShape(trigger_config_s *triggerConfig, trigger_shape_s *s) { +void configureGmTriggerShape(trigger_shape_s *s) { s->reset(FOUR_STROKE_CAM_SENSOR); // all angles are x2 here - so, 5 degree width is 10 diff --git a/firmware/controllers/trigger/trigger_gm.h b/firmware/controllers/trigger/trigger_gm.h index 6ac6477211..ea668e20fc 100644 --- a/firmware/controllers/trigger/trigger_gm.h +++ b/firmware/controllers/trigger/trigger_gm.h @@ -10,6 +10,6 @@ #include "trigger_structure.h" -void configureGmTriggerShape(trigger_config_s *triggerConfig, trigger_shape_s *s); +void configureGmTriggerShape(trigger_shape_s *s); #endif /* TRIGGER_GM_H_ */ diff --git a/firmware/controllers/trigger/trigger_mitsubishi.cpp b/firmware/controllers/trigger/trigger_mitsubishi.cpp index c25ee5ca76..649a05eeb9 100644 --- a/firmware/controllers/trigger/trigger_mitsubishi.cpp +++ b/firmware/controllers/trigger/trigger_mitsubishi.cpp @@ -7,7 +7,7 @@ #include "trigger_mitsubishi.h" -void configureFordAspireTriggerShape(trigger_config_s *triggerConfig, trigger_shape_s * s) { +void configureFordAspireTriggerShape(trigger_shape_s * s) { s->isSynchronizationNeeded = false; s->reset(FOUR_STROKE_CAM_SENSOR); diff --git a/firmware/controllers/trigger/trigger_mitsubishi.h b/firmware/controllers/trigger/trigger_mitsubishi.h index 1c82a4ec25..b0d4ac789e 100644 --- a/firmware/controllers/trigger/trigger_mitsubishi.h +++ b/firmware/controllers/trigger/trigger_mitsubishi.h @@ -10,6 +10,6 @@ #include "trigger_structure.h" void initializeMitsubishi4g18(trigger_shape_s *s); -void configureFordAspireTriggerShape(trigger_config_s *triggerConfig, trigger_shape_s * s); +void configureFordAspireTriggerShape(trigger_shape_s * s); #endif /* TRIGGER_MITSUBISHI_H_ */ diff --git a/unit_tests/engine_test_helper.cpp b/unit_tests/engine_test_helper.cpp index 1cbae0c28d..3ca5cf11e2 100644 --- a/unit_tests/engine_test_helper.cpp +++ b/unit_tests/engine_test_helper.cpp @@ -23,7 +23,7 @@ EngineTestHelper::EngineTestHelper(engine_type_e engineType) { initSpeedDensity(ec); - resetConfigurationExt(NULL, FORD_INLINE_6_1995, ec, &ec2, &persistentConfig.engineConfiguration.bc); + resetConfigurationExt(NULL, FORD_INLINE_6_1995, ec, &ec2); ec->mafAdcChannel = (adc_channel_e)TEST_MAF_CHANNEL; } diff --git a/unit_tests/test_trigger_decoder.cpp b/unit_tests/test_trigger_decoder.cpp index bed3fef4bc..69666509ef 100644 --- a/unit_tests/test_trigger_decoder.cpp +++ b/unit_tests/test_trigger_decoder.cpp @@ -44,7 +44,7 @@ int getTheAngle(engine_type_e engineType) { engine_configuration2_s ec2; initDataStructures(ec); - resetConfigurationExt(NULL, engineType, ec, &ec2, &persistentConfig.engineConfiguration.bc); + resetConfigurationExt(NULL, engineType, ec, &ec2); trigger_shape_s * shape = &ec2.triggerShape; return findTriggerZeroEventIndex(shape, &ec->triggerConfig); @@ -60,7 +60,7 @@ static void testDodgeNeonDecoder(void) { engine_configuration_s *ec = &persistentConfig.engineConfiguration; engine_configuration2_s ec2; - resetConfigurationExt(NULL, DODGE_NEON_1995, ec, &ec2, &persistentConfig.engineConfiguration.bc); + resetConfigurationExt(NULL, DODGE_NEON_1995, ec, &ec2); assertEquals(8, ec2.triggerShape.getTriggerShapeSynchPointIndex()); trigger_shape_s * shape = &ec2.triggerShape; @@ -119,7 +119,7 @@ static void test1995FordInline6TriggerDecoder(void) { engine_configuration_s *ec = &persistentConfig.engineConfiguration; engine_configuration2_s ec2; - resetConfigurationExt(NULL, FORD_INLINE_6_1995, ec, &ec2, &persistentConfig.engineConfiguration.bc); + resetConfigurationExt(NULL, FORD_INLINE_6_1995, ec, &ec2); assertEqualsM("triggerShapeSynchPointIndex", 0, ec2.triggerShape.getTriggerShapeSynchPointIndex()); trigger_shape_s * shape = &ec2.triggerShape; @@ -182,7 +182,7 @@ void testFordAspire(void) { persistent_config_s persistentConfig; engine_configuration_s *ec = &persistentConfig.engineConfiguration; engine_configuration2_s ec2; - resetConfigurationExt(NULL, FORD_ASPIRE_1996, ec, &ec2, &persistentConfig.engineConfiguration.bc); + resetConfigurationExt(NULL, FORD_ASPIRE_1996, ec, &ec2); assertEquals(4, ec2.triggerShape.getTriggerShapeSynchPointIndex()); assertEquals(800, ec->fuelRpmBins[0]); @@ -203,7 +203,7 @@ void testMazda323(void) { persistent_config_s persistentConfig; engine_configuration_s *ec = &persistentConfig.engineConfiguration; engine_configuration2_s ec2; - resetConfigurationExt(NULL, MAZDA_323, ec, &ec2, &persistentConfig.engineConfiguration.bc); + resetConfigurationExt(NULL, MAZDA_323, ec, &ec2); assertEquals(0, ec2.triggerShape.getTriggerShapeSynchPointIndex()); } @@ -213,7 +213,7 @@ void testMazdaMianaNbDecoder(void) { persistent_config_s persistentConfig; engine_configuration_s *ec = &persistentConfig.engineConfiguration; engine_configuration2_s ec2; - resetConfigurationExt(NULL, MAZDA_MIATA_NB, ec, &ec2, &persistentConfig.engineConfiguration.bc); + resetConfigurationExt(NULL, MAZDA_MIATA_NB, ec, &ec2); assertEquals(11, ec2.triggerShape.getTriggerShapeSynchPointIndex()); TriggerState state; @@ -301,7 +301,7 @@ static void testTriggerDecoder2(const char *msg, engine_type_e type, int synchPo assertEquals(0, ec2.triggerShape.getTriggerShapeSynchPointIndex()); initSpeedDensity(ec); - resetConfigurationExt(NULL, type, ec, &ec2, &persistentConfig.engineConfiguration.bc); + resetConfigurationExt(NULL, type, ec, &ec2); assertEqualsM("synchPointIndex", synchPointIndex, ec2.triggerShape.getTriggerShapeSynchPointIndex()); @@ -315,7 +315,7 @@ void testGY6_139QMB(void) { persistent_config_s persistentConfig; engine_configuration_s *ec = &persistentConfig.engineConfiguration; engine_configuration2_s ec2; - resetConfigurationExt(NULL, GY6_139QMB, ec, &ec2, &persistentConfig.engineConfiguration.bc); + resetConfigurationExt(NULL, GY6_139QMB, ec, &ec2); TriggerState state; assertFalseM("shaft_is_synchronized", state.shaft_is_synchronized); diff --git a/win32_functional_tests/simulator/rusEfiFunctionalTest.cpp b/win32_functional_tests/simulator/rusEfiFunctionalTest.cpp index c715a02b96..54de744aae 100644 --- a/win32_functional_tests/simulator/rusEfiFunctionalTest.cpp +++ b/win32_functional_tests/simulator/rusEfiFunctionalTest.cpp @@ -85,7 +85,7 @@ void rusEfiFunctionalTest(void) { engine.engineConfiguration = engineConfiguration; - resetConfigurationExt(NULL, FORD_ASPIRE_1996, engineConfiguration, engineConfiguration2, boardConfiguration); + resetConfigurationExt(NULL, FORD_ASPIRE_1996, engineConfiguration, engineConfiguration2); initThermistors(); initAlgo(engineConfiguration);