From 0e91914266be074f6c2653ab175bce2a8eecadaf Mon Sep 17 00:00:00 2001 From: Andrey Date: Wed, 14 Sep 2022 02:35:55 -0400 Subject: [PATCH] deep rabbit holes are the best ones! refactoring: encapsulation --- firmware/controllers/algo/engine.cpp | 7 ++++--- firmware/controllers/algo/engine.h | 7 ------- .../engine_cycle/main_trigger_callback.cpp | 2 +- firmware/controllers/trigger/trigger_central.cpp | 4 ++-- firmware/controllers/trigger/trigger_central.h | 12 ++++++++++++ firmware/controllers/trigger/trigger_decoder.cpp | 9 +++++---- firmware/controllers/trigger/trigger_decoder.h | 4 ---- 7 files changed, 24 insertions(+), 21 deletions(-) diff --git a/firmware/controllers/algo/engine.cpp b/firmware/controllers/algo/engine.cpp index b0e7cc72fe..f1cfda3e0b 100644 --- a/firmware/controllers/algo/engine.cpp +++ b/firmware/controllers/algo/engine.cpp @@ -147,10 +147,11 @@ void Engine::updateTriggerWaveform() { * 'initState' instance of TriggerDecoderBase is used only to initialize 'this' TriggerWaveform instance * #192 BUG real hardware trigger events could be coming even while we are initializing trigger */ - calculateTriggerSynchPoint(engine->triggerCentral.triggerShape, + calculateTriggerSynchPoint(&engine->triggerCentral, + engine->triggerCentral.triggerShape, initState); - engine->engineCycleEventCount = TRIGGER_WAVEFORM(getLength()); + engine->triggerCentral.engineCycleEventCount = engine->triggerCentral.triggerShape.getLength(); } for (int camIndex = 0; camIndex < CAMS_PER_BANK; camIndex++) { @@ -400,7 +401,7 @@ void Engine::OnTriggerSyncronization(bool wasSynchronized, bool isDecodingError) #endif /* EFI_PROD_CODE */ } - engine->triggerErrorDetection.add(isDecodingError); + engine->triggerCentral.triggerErrorDetection.add(isDecodingError); } } diff --git a/firmware/controllers/algo/engine.h b/firmware/controllers/algo/engine.h index f776aae7e4..dfb80ce8e1 100644 --- a/firmware/controllers/algo/engine.h +++ b/firmware/controllers/algo/engine.h @@ -156,8 +156,6 @@ public: return engineModules.get(); } - cyclic_buffer triggerErrorDetection; - #if EFI_TCU GearControllerBase *gearController; #endif @@ -296,11 +294,6 @@ public: SensorsState sensors; efitick_t mainRelayBenchStartNt = 0; - /** - * value of 'triggerShape.getLength()' - * pre-calculating this value is a performance optimization - */ - uint32_t engineCycleEventCount = 0; void preCalculate(); diff --git a/firmware/controllers/engine_cycle/main_trigger_callback.cpp b/firmware/controllers/engine_cycle/main_trigger_callback.cpp index f9e96027f1..1550b71782 100644 --- a/firmware/controllers/engine_cycle/main_trigger_callback.cpp +++ b/firmware/controllers/engine_cycle/main_trigger_callback.cpp @@ -223,7 +223,7 @@ static void handleFuel(uint32_t trgEventIndex, int rpm, efitick_t nowNt, float c ScopePerf perf(PE::HandleFuel); efiAssertVoid(CUSTOM_STACK_6627, getCurrentRemainingStack() > 128, "lowstck#3"); - efiAssertVoid(CUSTOM_ERR_6628, trgEventIndex < engine->engineCycleEventCount, "handleFuel/event index"); + efiAssertVoid(CUSTOM_ERR_6628, trgEventIndex < getTriggerCentral()->engineCycleEventCount, "handleFuel/event index"); if (trgEventIndex == 0) { engine->tpsAccelEnrichment.onEngineCycleTps(); diff --git a/firmware/controllers/trigger/trigger_central.cpp b/firmware/controllers/trigger/trigger_central.cpp index e436cf4f6c..2c0cf9645f 100644 --- a/firmware/controllers/trigger/trigger_central.cpp +++ b/firmware/controllers/trigger/trigger_central.cpp @@ -740,7 +740,7 @@ void TriggerCentral::handleShaftSignal(trigger_event_e signal, efitick_t timesta do { // I don't love this. - nextToothIndex = (nextToothIndex + 1) % engine->engineCycleEventCount; + nextToothIndex = (nextToothIndex + 1) % engineCycleEventCount; nextPhase = getTriggerCentral()->triggerFormDetails.eventAngles[nextToothIndex] - tdcPosition(); wrapAngle(nextPhase, "nextEnginePhase", CUSTOM_ERR_6555); } while (nextPhase == currentPhase); @@ -983,7 +983,7 @@ void initTriggerCentral() { * @return TRUE is something is wrong with trigger decoding */ bool TriggerCentral::isTriggerDecoderError() { - return engine->triggerErrorDetection.sum(6) > 4; + return triggerErrorDetection.sum(6) > 4; } #endif // EFI_SHAFT_POSITION_INPUT diff --git a/firmware/controllers/trigger/trigger_central.h b/firmware/controllers/trigger/trigger_central.h index 55339e119b..34eb8d8e71 100644 --- a/firmware/controllers/trigger/trigger_central.h +++ b/firmware/controllers/trigger/trigger_central.h @@ -56,6 +56,8 @@ public: // GND input pins instead of leaving them floating bool hwTriggerInputEnabled = true; + cyclic_buffer triggerErrorDetection; + /** * See also triggerSimulatorFrequency */ @@ -86,6 +88,11 @@ public: float mapCamPrevCycleValue = 0; int prevChangeAtCycle = 0; + /** + * value of 'triggerShape.getLength()' + * pre-calculating this value is a performance optimization + */ + uint32_t engineCycleEventCount = 0; /** * true if a recent configuration change has changed any of the trigger settings which * we have not adjusted for yet @@ -196,4 +203,9 @@ void onConfigurationChangeTriggerCallback(); #define SYMMETRICAL_THREE_TIMES_CRANK_SENSOR_DIVIDER 6 #define SYMMETRICAL_TWELVE_TIMES_CRANK_SENSOR_DIVIDER 24 +void calculateTriggerSynchPoint( + TriggerCentral *triggerCentral, + TriggerWaveform& shape, + TriggerDecoderBase& state); + TriggerCentral * getTriggerCentral(); diff --git a/firmware/controllers/trigger/trigger_decoder.cpp b/firmware/controllers/trigger/trigger_decoder.cpp index d77d634134..0f5bb17407 100644 --- a/firmware/controllers/trigger/trigger_decoder.cpp +++ b/firmware/controllers/trigger/trigger_decoder.cpp @@ -117,6 +117,7 @@ void TriggerWaveform::initializeSyncPoint(TriggerDecoderBase& state, * Calculate 'shape.triggerShapeSynchPointIndex' value using 'TriggerDecoderBase *state' */ void calculateTriggerSynchPoint( + TriggerCentral *triggerCentral, TriggerWaveform& shape, TriggerDecoderBase& state) { state.resetTriggerState(); @@ -124,11 +125,11 @@ void calculateTriggerSynchPoint( #if EFI_PROD_CODE efiAssertVoid(CUSTOM_TRIGGER_STACK, getCurrentRemainingStack() > EXPECTED_REMAINING_STACK, "calc s"); #endif - engine->triggerErrorDetection.clear(); - shape.initializeSyncPoint(state, engine->triggerCentral.primaryTriggerConfiguration); + triggerCentral->triggerErrorDetection.clear(); + shape.initializeSyncPoint(state, triggerCentral->primaryTriggerConfiguration); int length = shape.getLength(); - engine->engineCycleEventCount = length; + triggerCentral->engineCycleEventCount = length; efiAssertVoid(CUSTOM_SHAPE_LEN_ZERO, length > 0, "shapeLength=0"); if (shape.getSize() >= PWM_PHASE_MAX_COUNT) { @@ -161,7 +162,7 @@ void TriggerFormDetails::prepareEventAngles(TriggerWaveform *shape) { size_t triggerShapeLength = shape->getSize(); assertAngleRange(shape->triggerShapeSynchPointIndex, "triggerShapeSynchPointIndex", CUSTOM_TRIGGER_SYNC_ANGLE2); - efiAssertVoid(CUSTOM_TRIGGER_CYCLE, engine->engineCycleEventCount != 0, "zero engineCycleEventCount"); + efiAssertVoid(CUSTOM_TRIGGER_CYCLE, getTriggerCentral()->engineCycleEventCount != 0, "zero engineCycleEventCount"); for (size_t eventIndex = 0; eventIndex < length; eventIndex++) { if (eventIndex == 0) { diff --git a/firmware/controllers/trigger/trigger_decoder.h b/firmware/controllers/trigger/trigger_decoder.h index d8de181df3..d71de0ab61 100644 --- a/firmware/controllers/trigger/trigger_decoder.h +++ b/firmware/controllers/trigger/trigger_decoder.h @@ -277,8 +277,4 @@ public: angle_t getEngineCycle(operation_mode_e operationMode); -void calculateTriggerSynchPoint( - TriggerWaveform& shape, - TriggerDecoderBase& state); - void prepareEventAngles(TriggerWaveform *shape, TriggerFormDetails *details);