rusEFI
The most advanced open source ECU
|
#include <trigger_decoder.h>
Public Member Functions | |
TriggerDecoderBase (const char *name) | |
void | printGaps (const char *prefix, const TriggerConfiguration &triggerConfiguration, const TriggerWaveform &triggerShape) |
int | getCurrentIndex () const |
int | getSynchronizationCounter () const |
void | incrementShaftSynchronizationCounter () |
int64_t | getTotalEventCounter () const |
expected< TriggerDecodeResult > | decodeTriggerEvent (const char *msg, const TriggerWaveform &triggerShape, TriggerStateListener *triggerStateListener, const TriggerConfiguration &triggerConfiguration, const trigger_event_e signal, const efitick_t nowNt) |
Trigger decoding happens here VR falls are filtered out and some VR noise detection happens prior to invoking this method, for Hall this method is invoked every time we have a fall or rise on one of the trigger sensors. This method changes the state of trigger_state_s data structure according to the trigger event. | |
void | onShaftSynchronization (bool wasSynchronized, const efitick_t nowNt, const TriggerWaveform &triggerShape) |
bool | isValidIndex (const TriggerWaveform &triggerShape) const |
virtual void | resetState () |
void | setShaftSynchronized (bool value) |
bool | getShaftSynchronized () const |
uint32_t | findTriggerZeroEventIndex (TriggerWaveform &shape, const TriggerConfiguration &triggerConfiguration) |
bool | someSortOfTriggerError () const |
Data Fields | |
float | gapRatio [PWM_PHASE_MAX_COUNT *6] |
bool | shaft_is_synchronized = false |
efitick_t | mostRecentSyncTime |
Timer | previousEventTimer |
uint32_t | toothDurations [GAP_TRACKING_LENGTH+1] |
efitick_t | toothed_previous_time |
current_cycle_state_s | currentCycle |
const char *const | name |
uint32_t | totalTriggerErrorCounter |
uint32_t | orderingErrorCounter |
efitick_t | startOfCycleNt |
![]() | |
uint32_t | synchronizationCounter = (uint32_t)0 |
uint32_t | vvtToothDurations0 = (uint32_t)0 |
float | vvtCurrentPosition = (float)0 |
float | vvtToothPosition [4] = {} |
float | triggerSyncGapRatio = (float)0 |
uint8_t | triggerStateIndex = (uint8_t)0 |
int8_t | triggerCountersError = (int8_t)0 |
uint8_t | alignmentFill_at_34 [2] = {} |
Protected Member Functions | |
virtual void | onTriggerError () |
virtual void | onNotEnoughTeeth (int, int) |
virtual void | onTooManyTeeth (int, int) |
Private Member Functions | |
void | setTriggerErrorState (int errorIncrement=1) |
void | resetCurrentCycleState () |
bool | isSyncPoint (const TriggerWaveform &triggerShape, trigger_type_e triggerType) const |
int | getEventCountersError (const TriggerWaveform &triggerShape) const |
Private Attributes | |
trigger_event_e | prevSignal |
int64_t | totalEventCountBase |
bool | isFirstEvent |
Timer | m_timeSinceDecodeError |
Definition at line 85 of file trigger_decoder.h.
TriggerDecoderBase::TriggerDecoderBase | ( | const char * | name | ) |
Definition at line 40 of file trigger_decoder.cpp.
expected< TriggerDecodeResult > TriggerDecoderBase::decodeTriggerEvent | ( | const char * | msg, |
const TriggerWaveform & | triggerShape, | ||
TriggerStateListener * | triggerStateListener, | ||
const TriggerConfiguration & | triggerConfiguration, | ||
const trigger_event_e | signal, | ||
const efitick_t | nowNt | ||
) |
Trigger decoding happens here VR falls are filtered out and some VR noise detection happens prior to invoking this method, for Hall this method is invoked every time we have a fall or rise on one of the trigger sensors. This method changes the state of trigger_state_s data structure according to the trigger event.
signal | type of event which just happened |
nowNt | current time |
We are here if there is a time gap between now and previous shaft event - that means the engine is not running. That means we have lost synchronization since the engine is not running :)
For performance reasons, we want to work with 32 bit values. If there has been more then 10 seconds since previous trigger event we do not really care.
todo: technically we can afford detailed logging even with 60/2 as long as low RPM todo: figure out exact threshold as a function of RPM and tooth count? Open question what is 'triggerShape.getSize()' for 60/2 is it 58 or 58*2 or 58*4?
We are here in case of a wheel without synchronization - we just need to count events, synchronization point simply happens once we have the right number of events
in case of noise the counter could be above the expected number of events, that's why 'more or equals' and not just 'equals'
Definition at line 419 of file trigger_decoder.cpp.
Referenced by TriggerCentral::handleShaftSignal(), and handleVvtCamSignal().
uint32_t TriggerDecoderBase::findTriggerZeroEventIndex | ( | TriggerWaveform & | shape, |
const TriggerConfiguration & | triggerConfiguration | ||
) |
Trigger shape is defined in a way which is convenient for trigger shape definition On the other hand, trigger decoder indexing begins from synchronization event.
This function finds the index of synchronization event within TriggerWaveform
Definition at line 714 of file trigger_decoder.cpp.
int TriggerDecoderBase::getCurrentIndex | ( | ) | const |
current trigger processing index, between zero and size
Definition at line 212 of file trigger_decoder.cpp.
|
private |
Definition at line 311 of file trigger_decoder.cpp.
Referenced by decodeTriggerEvent().
bool TriggerDecoderBase::getShaftSynchronized | ( | ) | const |
Definition at line 46 of file trigger_decoder.cpp.
Referenced by decodeTriggerEvent(), handleVvtCamSignal(), TriggerNoiseFilter::noiseFilter(), SetNextCompositeEntry(), and RpmCalculator::setSpinningUp().
int TriggerDecoderBase::getSynchronizationCounter | ( | ) | const |
Definition at line 179 of file trigger_decoder.cpp.
Referenced by extIonCallback(), findTriggerZeroEventIndex(), getAcrState(), TriggerCentral::handleShaftSignal(), TriggerCentral::isMapCamSync(), PrimaryTriggerDecoder::syncEnginePhase(), triggerInfo(), and TriggerCentral::validateCamVvtCounters().
int64_t TriggerDecoderBase::getTotalEventCounter | ( | ) | const |
Definition at line 175 of file trigger_decoder.cpp.
Referenced by updateDevConsoleState().
void TriggerDecoderBase::incrementShaftSynchronizationCounter | ( | ) |
this is important for crank-based virtual trigger and VVT magic
Definition at line 241 of file trigger_decoder.cpp.
Referenced by onShaftSynchronization(), and PrimaryTriggerDecoder::syncEnginePhase().
|
private |
Definition at line 656 of file trigger_decoder.cpp.
Referenced by decodeTriggerEvent().
bool TriggerDecoderBase::isValidIndex | ( | const TriggerWaveform & | triggerShape | ) | const |
Definition at line 190 of file trigger_decoder.cpp.
Referenced by decodeTriggerEvent().
|
inlineprotectedvirtual |
Reimplemented in PrimaryTriggerDecoder, and VvtTriggerDecoder.
Definition at line 177 of file trigger_decoder.h.
Referenced by decodeTriggerEvent().
void TriggerDecoderBase::onShaftSynchronization | ( | bool | wasSynchronized, |
const efitick_t | nowNt, | ||
const TriggerWaveform & | triggerShape | ||
) |
Definition at line 333 of file trigger_decoder.cpp.
Referenced by decodeTriggerEvent().
|
inlineprotectedvirtual |
Reimplemented in PrimaryTriggerDecoder, and VvtTriggerDecoder.
Definition at line 178 of file trigger_decoder.h.
Referenced by decodeTriggerEvent().
|
inlineprotectedvirtual |
Reimplemented in PrimaryTriggerDecoder.
Definition at line 175 of file trigger_decoder.h.
Referenced by decodeTriggerEvent().
void TriggerDecoderBase::printGaps | ( | const char * | prefix, |
const TriggerConfiguration & | triggerConfiguration, | ||
const TriggerWaveform & | triggerShape | ||
) |
Definition at line 377 of file trigger_decoder.cpp.
Referenced by decodeTriggerEvent().
|
private |
Definition at line 95 of file trigger_decoder.cpp.
Referenced by onShaftSynchronization(), and resetState().
|
virtual |
Reimplemented in PrimaryTriggerDecoder.
Definition at line 69 of file trigger_decoder.cpp.
Referenced by findTriggerZeroEventIndex(), Engine::OnTriggerSynchronizationLost(), PrimaryTriggerDecoder::resetState(), and TriggerDecoderBase().
void TriggerDecoderBase::setShaftSynchronized | ( | bool | value | ) |
Definition at line 50 of file trigger_decoder.cpp.
Referenced by decodeTriggerEvent(), and resetState().
|
private |
Definition at line 89 of file trigger_decoder.cpp.
Referenced by decodeTriggerEvent().
|
inline |
Definition at line 166 of file trigger_decoder.h.
Referenced by decodeTriggerEvent(), isTriggerErrorNow(), Engine::OnTriggerSynchronization(), and printGaps().
current_cycle_state_s TriggerDecoderBase::currentCycle |
Definition at line 142 of file trigger_decoder.h.
Referenced by decodeTriggerEvent(), getCurrentIndex(), getEventCountersError(), getTotalEventCounter(), handleVvtCamSignal(), TriggerCentral::isToothExpectedNow(), isValidIndex(), TriggerNoiseFilter::noiseFilter(), PrimaryTriggerDecoder::onNotEnoughTeeth(), onShaftSynchronization(), PrimaryTriggerDecoder::onTooManyTeeth(), Engine::OnTriggerSynchronization(), printGaps(), resetCurrentCycleState(), and rpmShaftPositionCallback().
float TriggerDecoderBase::gapRatio[PWM_PHASE_MAX_COUNT *6] |
used only for trigger export
Definition at line 107 of file trigger_decoder.h.
Referenced by decodeTriggerEvent().
|
private |
Definition at line 190 of file trigger_decoder.h.
Referenced by decodeTriggerEvent(), and resetState().
|
private |
Definition at line 192 of file trigger_decoder.h.
Referenced by resetState(), setTriggerErrorState(), and someSortOfTriggerError().
efitick_t TriggerDecoderBase::mostRecentSyncTime |
Definition at line 131 of file trigger_decoder.h.
Referenced by setShaftSynchronized().
const char* const TriggerDecoderBase::name |
Definition at line 143 of file trigger_decoder.h.
Referenced by VvtTriggerDecoder::onNotEnoughTeeth(), and VvtTriggerDecoder::onTooManyTeeth().
uint32_t TriggerDecoderBase::orderingErrorCounter |
Definition at line 149 of file trigger_decoder.h.
Referenced by decodeTriggerEvent(), resetState(), triggerInfo(), and updateTunerStudioState().
Timer TriggerDecoderBase::previousEventTimer |
Definition at line 133 of file trigger_decoder.h.
Referenced by decodeTriggerEvent().
|
private |
Definition at line 187 of file trigger_decoder.h.
Referenced by decodeTriggerEvent(), and resetState().
bool TriggerDecoderBase::shaft_is_synchronized = false |
TRUE if we know where we are
Definition at line 130 of file trigger_decoder.h.
Referenced by getShaftSynchronized(), and setShaftSynchronized().
efitick_t TriggerDecoderBase::startOfCycleNt |
this is start of real trigger cycle for virtual double trigger see timeAtVirtualZeroNt
Definition at line 159 of file trigger_decoder.h.
Referenced by onShaftSynchronization(), and resetState().
uint32_t TriggerDecoderBase::toothDurations[GAP_TRACKING_LENGTH+1] |
current duration at index zero and previous durations are following
Definition at line 138 of file trigger_decoder.h.
Referenced by decodeTriggerEvent(), handleVvtCamSignal(), isSyncPoint(), printGaps(), and resetState().
efitick_t TriggerDecoderBase::toothed_previous_time |
Definition at line 140 of file trigger_decoder.h.
Referenced by decodeTriggerEvent(), and resetState().
|
private |
Definition at line 188 of file trigger_decoder.h.
Referenced by getTotalEventCounter(), onShaftSynchronization(), and resetState().
uint32_t TriggerDecoderBase::totalTriggerErrorCounter |
how many times since ECU reboot we had unexpected number of teeth in trigger cycle
Definition at line 148 of file trigger_decoder.h.
Referenced by canDashboardHaltech(), resetState(), setTriggerErrorState(), triggerInfo(), and updateTunerStudioState().