mirror of https://github.com/rusefi/rusefi-1.git
just a trivial massive rename: TriggerState > TriggerWaveform
This commit is contained in:
parent
0555d2170d
commit
c5cfd21a70
|
@ -52,16 +52,16 @@ FsioState::FsioState() {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void Engine::eInitializeTriggerShape(Logging *logger DECLARE_ENGINE_PARAMETER_SUFFIX) {
|
void Engine::initializeTriggerWaveform(Logging *logger DECLARE_ENGINE_PARAMETER_SUFFIX) {
|
||||||
#if EFI_ENGINE_CONTROL && EFI_SHAFT_POSITION_INPUT
|
#if EFI_ENGINE_CONTROL && EFI_SHAFT_POSITION_INPUT
|
||||||
// we have a confusing threading model so some synchronization would not hurt
|
// we have a confusing threading model so some synchronization would not hurt
|
||||||
bool alreadyLocked = lockAnyContext();
|
bool alreadyLocked = lockAnyContext();
|
||||||
|
|
||||||
TRIGGER_SHAPE(initializeTriggerShape(logger,
|
TRIGGER_WAVEFORM(initializeTriggerWaveform(logger,
|
||||||
engineConfiguration->ambiguousOperationMode,
|
engineConfiguration->ambiguousOperationMode,
|
||||||
engineConfiguration->useOnlyRisingEdgeForTrigger, &engineConfiguration->trigger));
|
engineConfiguration->useOnlyRisingEdgeForTrigger, &engineConfiguration->trigger));
|
||||||
|
|
||||||
if (TRIGGER_SHAPE(bothFrontsRequired) && engineConfiguration->useOnlyRisingEdgeForTrigger) {
|
if (TRIGGER_WAVEFORM(bothFrontsRequired) && engineConfiguration->useOnlyRisingEdgeForTrigger) {
|
||||||
#if EFI_PROD_CODE || EFI_SIMULATOR
|
#if EFI_PROD_CODE || EFI_SIMULATOR
|
||||||
firmwareError(CUSTOM_ERR_BOTH_FRONTS_REQUIRED, "Inconsistent trigger setup");
|
firmwareError(CUSTOM_ERR_BOTH_FRONTS_REQUIRED, "Inconsistent trigger setup");
|
||||||
#else
|
#else
|
||||||
|
@ -70,9 +70,9 @@ void Engine::eInitializeTriggerShape(Logging *logger DECLARE_ENGINE_PARAMETER_SU
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (!TRIGGER_SHAPE(shapeDefinitionError)) {
|
if (!TRIGGER_WAVEFORM(shapeDefinitionError)) {
|
||||||
/**
|
/**
|
||||||
* this instance is used only to initialize 'this' TriggerShape instance
|
* this instance is used only to initialize 'this' TriggerWaveform instance
|
||||||
* #192 BUG real hardware trigger events could be coming even while we are initializing trigger
|
* #192 BUG real hardware trigger events could be coming even while we are initializing trigger
|
||||||
*/
|
*/
|
||||||
initState.resetTriggerState();
|
initState.resetTriggerState();
|
||||||
|
@ -82,14 +82,14 @@ void Engine::eInitializeTriggerShape(Logging *logger DECLARE_ENGINE_PARAMETER_SU
|
||||||
if (engine->triggerCentral.triggerShape.getSize() == 0) {
|
if (engine->triggerCentral.triggerShape.getSize() == 0) {
|
||||||
firmwareError(CUSTOM_ERR_TRIGGER_ZERO, "triggerShape size is zero");
|
firmwareError(CUSTOM_ERR_TRIGGER_ZERO, "triggerShape size is zero");
|
||||||
}
|
}
|
||||||
engine->engineCycleEventCount = TRIGGER_SHAPE(getLength());
|
engine->engineCycleEventCount = TRIGGER_WAVEFORM(getLength());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!alreadyLocked) {
|
if (!alreadyLocked) {
|
||||||
unlockAnyContext();
|
unlockAnyContext();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!TRIGGER_SHAPE(shapeDefinitionError)) {
|
if (!TRIGGER_WAVEFORM(shapeDefinitionError)) {
|
||||||
prepareOutputSignals(PASS_ENGINE_PARAMETER_SIGNATURE);
|
prepareOutputSignals(PASS_ENGINE_PARAMETER_SIGNATURE);
|
||||||
}
|
}
|
||||||
#endif /* EFI_ENGINE_CONTROL && EFI_SHAFT_POSITION_INPUT */
|
#endif /* EFI_ENGINE_CONTROL && EFI_SHAFT_POSITION_INPUT */
|
||||||
|
|
|
@ -194,7 +194,7 @@ public:
|
||||||
void periodicFastCallback(DECLARE_ENGINE_PARAMETER_SIGNATURE);
|
void periodicFastCallback(DECLARE_ENGINE_PARAMETER_SIGNATURE);
|
||||||
void periodicSlowCallback(DECLARE_ENGINE_PARAMETER_SIGNATURE);
|
void periodicSlowCallback(DECLARE_ENGINE_PARAMETER_SIGNATURE);
|
||||||
void updateSlowSensors(DECLARE_ENGINE_PARAMETER_SIGNATURE);
|
void updateSlowSensors(DECLARE_ENGINE_PARAMETER_SIGNATURE);
|
||||||
void eInitializeTriggerShape(Logging *logger DECLARE_ENGINE_PARAMETER_SUFFIX);
|
void initializeTriggerWaveform(Logging *logger DECLARE_ENGINE_PARAMETER_SUFFIX);
|
||||||
|
|
||||||
bool clutchUpState = false;
|
bool clutchUpState = false;
|
||||||
bool clutchDownState = false;
|
bool clutchDownState = false;
|
||||||
|
|
|
@ -1296,7 +1296,7 @@ void applyNonPersistentConfiguration(Logging * logger DECLARE_ENGINE_PARAMETER_S
|
||||||
assertEngineReference();
|
assertEngineReference();
|
||||||
|
|
||||||
#if EFI_ENGINE_CONTROL
|
#if EFI_ENGINE_CONTROL
|
||||||
ENGINE(eInitializeTriggerShape(logger PASS_ENGINE_PARAMETER_SUFFIX));
|
ENGINE(initializeTriggerWaveform(logger PASS_ENGINE_PARAMETER_SUFFIX));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if EFI_FSIO
|
#if EFI_FSIO
|
||||||
|
|
|
@ -1831,7 +1831,7 @@ typedef enum {
|
||||||
CUSTOM_ERR_PIN_ALREADY_USED_2 = 6134,
|
CUSTOM_ERR_PIN_ALREADY_USED_2 = 6134,
|
||||||
CUSTOM_ERR_ICU_STATE = 6135,
|
CUSTOM_ERR_ICU_STATE = 6135,
|
||||||
CUSTOM_ERR_TCHARGE_NOT_READY = 6136,
|
CUSTOM_ERR_TCHARGE_NOT_READY = 6136,
|
||||||
CUSTOM_ERR_TRIGGER_SHAPE_TOO_LONG = 6137,
|
CUSTOM_ERR_TRIGGER_WAVEFORM_TOO_LONG = 6137,
|
||||||
CUSTOM_ERR_FUEL_TABLE_NOT_READY = 6138,
|
CUSTOM_ERR_FUEL_TABLE_NOT_READY = 6138,
|
||||||
CUSTOM_ERR_TCHARGE_NOT_READY2 = 6139,
|
CUSTOM_ERR_TCHARGE_NOT_READY2 = 6139,
|
||||||
|
|
||||||
|
@ -2093,7 +2093,7 @@ typedef enum {
|
||||||
|
|
||||||
|
|
||||||
CUSTOM_ERR_TRIGGER_SYNC = 9000,
|
CUSTOM_ERR_TRIGGER_SYNC = 9000,
|
||||||
CUSTOM_OBD_TRIGGER_SHAPE = 9001,
|
CUSTOM_OBD_TRIGGER_WAVEFORM = 9001,
|
||||||
/**
|
/**
|
||||||
* This is not engine miss detection - this is only internal scheduler state validation
|
* This is not engine miss detection - this is only internal scheduler state validation
|
||||||
* Should not happen
|
* Should not happen
|
||||||
|
|
|
@ -103,7 +103,7 @@ typedef enum {
|
||||||
|
|
||||||
// used by unit test
|
// used by unit test
|
||||||
// see https://github.com/rusefi/rusefi/issues/898
|
// see https://github.com/rusefi/rusefi/issues/898
|
||||||
// see TriggerShape::bothFrontsRequired
|
// see TriggerWaveform::bothFrontsRequired
|
||||||
ISSUE_898 = 27,
|
ISSUE_898 = 27,
|
||||||
|
|
||||||
MAZDA_626 = 28,
|
MAZDA_626 = 28,
|
||||||
|
|
|
@ -236,7 +236,7 @@ void refreshMapAveragingPreCalc(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
|
||||||
angle_t start = interpolate2d("mapa", rpm, c->samplingAngleBins, c->samplingAngle);
|
angle_t start = interpolate2d("mapa", rpm, c->samplingAngleBins, c->samplingAngle);
|
||||||
efiAssertVoid(CUSTOM_ERR_MAP_START_ASSERT, !cisnan(start), "start");
|
efiAssertVoid(CUSTOM_ERR_MAP_START_ASSERT, !cisnan(start), "start");
|
||||||
|
|
||||||
angle_t offsetAngle = TRIGGER_SHAPE(eventAngles[CONFIG(mapAveragingSchedulingAtIndex)]);
|
angle_t offsetAngle = TRIGGER_WAVEFORM(eventAngles[CONFIG(mapAveragingSchedulingAtIndex)]);
|
||||||
efiAssertVoid(CUSTOM_ERR_MAP_AVG_OFFSET, !cisnan(offsetAngle), "offsetAngle");
|
efiAssertVoid(CUSTOM_ERR_MAP_AVG_OFFSET, !cisnan(offsetAngle), "offsetAngle");
|
||||||
|
|
||||||
for (int i = 0; i < engineConfiguration->specs.cylindersCount; i++) {
|
for (int i = 0; i < engineConfiguration->specs.cylindersCount; i++) {
|
||||||
|
|
|
@ -204,8 +204,8 @@ bool FuelSchedule::addFuelEventsForCylinder(int i DECLARE_ENGINE_PARAMETER_SUFF
|
||||||
|
|
||||||
ev->isSimultanious = isSimultanious;
|
ev->isSimultanious = isSimultanious;
|
||||||
|
|
||||||
if (TRIGGER_SHAPE(getSize()) < 1) {
|
if (TRIGGER_WAVEFORM(getSize()) < 1) {
|
||||||
warning(CUSTOM_ERR_NOT_INITIALIZED_TRIGGER, "uninitialized TriggerShape");
|
warning(CUSTOM_ERR_NOT_INITIALIZED_TRIGGER, "uninitialized TriggerWaveform");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -517,7 +517,7 @@ void prepareOutputSignals(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
|
||||||
|
|
||||||
prepareIgnitionPinIndices(CONFIG(ignitionMode) PASS_ENGINE_PARAMETER_SUFFIX);
|
prepareIgnitionPinIndices(CONFIG(ignitionMode) PASS_ENGINE_PARAMETER_SUFFIX);
|
||||||
|
|
||||||
TRIGGER_SHAPE(prepareShape());
|
TRIGGER_WAVEFORM(prepareShape());
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* EFI_ENGINE_CONTROL */
|
#endif /* EFI_ENGINE_CONTROL */
|
||||||
|
|
|
@ -67,4 +67,4 @@ void setSingleCoilDwell(DECLARE_CONFIG_PARAMETER_SIGNATURE);
|
||||||
// expectation is that for well-known triggers CONFIG(globalTriggerAngleOffset) would usually be zero
|
// expectation is that for well-known triggers CONFIG(globalTriggerAngleOffset) would usually be zero
|
||||||
// while for toothed wheels user would have to provide a value
|
// while for toothed wheels user would have to provide a value
|
||||||
#define tdcPosition() \
|
#define tdcPosition() \
|
||||||
(TRIGGER_SHAPE(tdcPosition) + CONFIG(globalTriggerAngleOffset))
|
(TRIGGER_WAVEFORM(tdcPosition) + CONFIG(globalTriggerAngleOffset))
|
||||||
|
|
|
@ -571,7 +571,7 @@ static void setToothedWheel(int total, int skipped DECLARE_ENGINE_PARAMETER_SUFF
|
||||||
|
|
||||||
scheduleMsg(&logger, "toothed: total=%d/skipped=%d", total, skipped);
|
scheduleMsg(&logger, "toothed: total=%d/skipped=%d", total, skipped);
|
||||||
setToothedWheelConfiguration(&engine->triggerCentral.triggerShape, total, skipped, engineConfiguration->ambiguousOperationMode);
|
setToothedWheelConfiguration(&engine->triggerCentral.triggerShape, total, skipped, engineConfiguration->ambiguousOperationMode);
|
||||||
// initializeTriggerShape(&logger, engineConfiguration, engineConfiguration2);
|
// initializeTriggerWaveform(&logger, engineConfiguration, engineConfiguration2);
|
||||||
incrementGlobalConfigurationVersion(PASS_ENGINE_PARAMETER_SIGNATURE);
|
incrementGlobalConfigurationVersion(PASS_ENGINE_PARAMETER_SIGNATURE);
|
||||||
doPrintConfiguration();
|
doPrintConfiguration();
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
|
|
||||||
#include "trigger_bmw.h"
|
#include "trigger_bmw.h"
|
||||||
|
|
||||||
static inline float addPair(TriggerShape *s, float a, float w) {
|
static inline float addPair(TriggerWaveform *s, float a, float w) {
|
||||||
s->addEvent720(a, T_SECONDARY, TV_RISE);
|
s->addEvent720(a, T_SECONDARY, TV_RISE);
|
||||||
a += w;
|
a += w;
|
||||||
s->addEvent720(a, T_SECONDARY, TV_FALL);
|
s->addEvent720(a, T_SECONDARY, TV_FALL);
|
||||||
|
@ -15,7 +15,7 @@ static inline float addPair(TriggerShape *s, float a, float w) {
|
||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
void configureMiniCooperTriggerShape(TriggerShape *s) {
|
void configureMiniCooperTriggerWaveform(TriggerWaveform *s) {
|
||||||
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
||||||
|
|
||||||
// s->initialState[0] = 1;
|
// s->initialState[0] = 1;
|
||||||
|
|
|
@ -9,5 +9,5 @@
|
||||||
|
|
||||||
#include "trigger_structure.h"
|
#include "trigger_structure.h"
|
||||||
|
|
||||||
void configureMiniCooperTriggerShape(TriggerShape *s);
|
void configureMiniCooperTriggerWaveform(TriggerWaveform *s);
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
#include "trigger_chrysler.h"
|
#include "trigger_chrysler.h"
|
||||||
#include "trigger_universal.h"
|
#include "trigger_universal.h"
|
||||||
|
|
||||||
void initDodgeRam(TriggerShape *s) {
|
void initDodgeRam(TriggerWaveform *s) {
|
||||||
|
|
||||||
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
||||||
s->useRiseEdge = true;
|
s->useRiseEdge = true;
|
||||||
|
@ -25,7 +25,7 @@ void initDodgeRam(TriggerShape *s) {
|
||||||
s->useOnlyPrimaryForSync = true;
|
s->useOnlyPrimaryForSync = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void configureNeon2003TriggerShapeCrank(TriggerShape *s DECLARE_ENGINE_PARAMETER_SUFFIX) {
|
void configureNeon2003TriggerWaveformCrank(TriggerWaveform *s DECLARE_ENGINE_PARAMETER_SUFFIX) {
|
||||||
s->initialize(FOUR_STROKE_CRANK_SENSOR, false);
|
s->initialize(FOUR_STROKE_CRANK_SENSOR, false);
|
||||||
s->useRiseEdge = true;
|
s->useRiseEdge = true;
|
||||||
|
|
||||||
|
@ -99,7 +99,7 @@ void configureNeon2003TriggerShapeCrank(TriggerShape *s DECLARE_ENGINE_PARAMETER
|
||||||
s->addEvent720(m * 360, T_PRIMARY, TV_RISE);
|
s->addEvent720(m * 360, T_PRIMARY, TV_RISE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void configureNeon2003TriggerShapeCam(TriggerShape *s) {
|
void configureNeon2003TriggerWaveformCam(TriggerWaveform *s) {
|
||||||
// todo: move sync point so that two channel does not have false trigger issues
|
// todo: move sync point so that two channel does not have false trigger issues
|
||||||
bool useOnlyPrimary = true;
|
bool useOnlyPrimary = true;
|
||||||
|
|
||||||
|
@ -322,7 +322,7 @@ gap=1.43/0.71
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void configureDodgeStratusTriggerShape(TriggerShape *s) {
|
void configureDodgeStratusTriggerWaveform(TriggerWaveform *s) {
|
||||||
s->initialize(FOUR_STROKE_CAM_SENSOR, false);
|
s->initialize(FOUR_STROKE_CAM_SENSOR, false);
|
||||||
s->isSynchronizationNeeded = true;
|
s->isSynchronizationNeeded = true;
|
||||||
|
|
||||||
|
@ -388,7 +388,7 @@ void configureDodgeStratusTriggerShape(TriggerShape *s) {
|
||||||
s->addEvent720(angle + w, T_PRIMARY, TV_FALL);
|
s->addEvent720(angle + w, T_PRIMARY, TV_FALL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void configureNeon1995TriggerShapeCommon(bool withCam, TriggerShape *s) {
|
static void configureNeon1995TriggerWaveformCommon(bool withCam, TriggerWaveform *s) {
|
||||||
trigger_wheel_e crank = withCam ? T_SECONDARY : T_PRIMARY;
|
trigger_wheel_e crank = withCam ? T_SECONDARY : T_PRIMARY;
|
||||||
|
|
||||||
// voodoo magic - we always need 720 at the end
|
// voodoo magic - we always need 720 at the end
|
||||||
|
@ -448,17 +448,17 @@ static void configureNeon1995TriggerShapeCommon(bool withCam, TriggerShape *s) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void configureNeon1995TriggerShapeOnlyCrank(TriggerShape *s) {
|
void configureNeon1995TriggerWaveformOnlyCrank(TriggerWaveform *s) {
|
||||||
s->initialize(FOUR_STROKE_CRANK_SENSOR, false);
|
s->initialize(FOUR_STROKE_CRANK_SENSOR, false);
|
||||||
s->setTriggerSynchronizationGap(3.79);
|
s->setTriggerSynchronizationGap(3.79);
|
||||||
|
|
||||||
s->tdcPosition = 279;
|
s->tdcPosition = 279;
|
||||||
|
|
||||||
configureNeon1995TriggerShapeCommon(false, s);
|
configureNeon1995TriggerWaveformCommon(false, s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void configureNeon1995TriggerShape(TriggerShape *s) {
|
void configureNeon1995TriggerWaveform(TriggerWaveform *s) {
|
||||||
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
||||||
|
|
||||||
s->setTriggerSynchronizationGap(0.8227);
|
s->setTriggerSynchronizationGap(0.8227);
|
||||||
|
@ -468,12 +468,12 @@ void configureNeon1995TriggerShape(TriggerShape *s) {
|
||||||
|
|
||||||
s->initialState[T_PRIMARY] = TV_RISE;
|
s->initialState[T_PRIMARY] = TV_RISE;
|
||||||
|
|
||||||
configureNeon1995TriggerShapeCommon(true, s);
|
configureNeon1995TriggerWaveformCommon(true, s);
|
||||||
|
|
||||||
s->useOnlyPrimaryForSync = true;
|
s->useOnlyPrimaryForSync = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void initJeep18_2_2_2(TriggerShape *s) {
|
void initJeep18_2_2_2(TriggerWaveform *s) {
|
||||||
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
||||||
s->isSynchronizationNeeded = true;
|
s->isSynchronizationNeeded = true;
|
||||||
s->setTriggerSynchronizationGap(1);
|
s->setTriggerSynchronizationGap(1);
|
||||||
|
@ -543,7 +543,7 @@ void initJeep18_2_2_2(TriggerShape *s) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void add4cylblock(int off, TriggerShape *s) {
|
static void add4cylblock(int off, TriggerWaveform *s) {
|
||||||
s->addEvent720(114 + off, T_SECONDARY, TV_RISE);
|
s->addEvent720(114 + off, T_SECONDARY, TV_RISE);
|
||||||
s->addEvent720(114 + off + 2, T_SECONDARY, TV_FALL);
|
s->addEvent720(114 + off + 2, T_SECONDARY, TV_FALL);
|
||||||
|
|
||||||
|
@ -558,7 +558,7 @@ static void add4cylblock(int off, TriggerShape *s) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// TT_JEEP_4_CYL
|
// TT_JEEP_4_CYL
|
||||||
void initJeep_XJ_4cyl_2500(TriggerShape *s) {
|
void initJeep_XJ_4cyl_2500(TriggerWaveform *s) {
|
||||||
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
||||||
s->isSynchronizationNeeded = true;
|
s->isSynchronizationNeeded = true;
|
||||||
s->setTriggerSynchronizationGap(1);
|
s->setTriggerSynchronizationGap(1);
|
||||||
|
|
|
@ -13,16 +13,16 @@
|
||||||
#define CHRYSLER_NGC4_GAP 1
|
#define CHRYSLER_NGC4_GAP 1
|
||||||
#define CHRYSLER_NGC6_GAP 1.5
|
#define CHRYSLER_NGC6_GAP 1.5
|
||||||
|
|
||||||
void configureNeon1995TriggerShape(TriggerShape *s);
|
void configureNeon1995TriggerWaveform(TriggerWaveform *s);
|
||||||
void configureNeon1995TriggerShapeOnlyCrank(TriggerShape *s);
|
void configureNeon1995TriggerWaveformOnlyCrank(TriggerWaveform *s);
|
||||||
|
|
||||||
void configureNeon2003TriggerShapeCam(TriggerShape *s);
|
void configureNeon2003TriggerWaveformCam(TriggerWaveform *s);
|
||||||
void configureNeon2003TriggerShapeCrank(TriggerShape *s);
|
void configureNeon2003TriggerWaveformCrank(TriggerWaveform *s);
|
||||||
void initDodgeRam(TriggerShape *s);
|
void initDodgeRam(TriggerWaveform *s);
|
||||||
|
|
||||||
void configureDodgeStratusTriggerShape(TriggerShape *s);
|
void configureDodgeStratusTriggerWaveform(TriggerWaveform *s);
|
||||||
|
|
||||||
void initJeep18_2_2_2(TriggerShape *s);
|
void initJeep18_2_2_2(TriggerWaveform *s);
|
||||||
void initJeep_XJ_4cyl_2500(TriggerShape *s);
|
void initJeep_XJ_4cyl_2500(TriggerWaveform *s);
|
||||||
|
|
||||||
#endif /* TRIGGER_CHRYSLER_H_ */
|
#endif /* TRIGGER_CHRYSLER_H_ */
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
|
|
||||||
#include "trigger_gm.h"
|
#include "trigger_gm.h"
|
||||||
|
|
||||||
void configureGmTriggerShape(TriggerShape *s) {
|
void configureGmTriggerWaveform(TriggerWaveform *s) {
|
||||||
s->initialize(FOUR_STROKE_CRANK_SENSOR, false);
|
s->initialize(FOUR_STROKE_CRANK_SENSOR, false);
|
||||||
|
|
||||||
// all angles are x2 here - so, 5 degree width is 10
|
// all angles are x2 here - so, 5 degree width is 10
|
||||||
|
@ -39,7 +39,7 @@ void configureGmTriggerShape(TriggerShape *s) {
|
||||||
s->setTriggerSynchronizationGap(6);
|
s->setTriggerSynchronizationGap(6);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int gm_tooth_pair(float startAngle, bool isShortLong, TriggerShape* s, int mult)
|
static int gm_tooth_pair(float startAngle, bool isShortLong, TriggerWaveform* s, int mult)
|
||||||
{
|
{
|
||||||
int window = (isShortLong ? 5 : 10) * mult;
|
int window = (isShortLong ? 5 : 10) * mult;
|
||||||
int end = startAngle + mult * 15;
|
int end = startAngle + mult * 15;
|
||||||
|
@ -59,7 +59,7 @@ static int gm_tooth_pair(float startAngle, bool isShortLong, TriggerShape* s, in
|
||||||
*
|
*
|
||||||
* based on data in https://rusefi.com/forum/viewtopic.php?f=3&t=936&p=30303#p30285
|
* based on data in https://rusefi.com/forum/viewtopic.php?f=3&t=936&p=30303#p30285
|
||||||
*/
|
*/
|
||||||
void initGmLS24(TriggerShape *s) {
|
void initGmLS24(TriggerWaveform *s) {
|
||||||
s->initialize(FOUR_STROKE_CRANK_SENSOR, false);
|
s->initialize(FOUR_STROKE_CRANK_SENSOR, false);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
#include "trigger_structure.h"
|
#include "trigger_structure.h"
|
||||||
|
|
||||||
void configureGmTriggerShape(TriggerShape *s);
|
void configureGmTriggerWaveform(TriggerWaveform *s);
|
||||||
void initGmLS24(TriggerShape *s);
|
void initGmLS24(TriggerWaveform *s);
|
||||||
|
|
||||||
#endif /* TRIGGER_GM_H_ */
|
#endif /* TRIGGER_GM_H_ */
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
#define S24 (720.0f / 24 / 2)
|
#define S24 (720.0f / 24 / 2)
|
||||||
|
|
||||||
static float addAccordPair(TriggerShape *s, float sb, trigger_wheel_e const channelIndex) {
|
static float addAccordPair(TriggerWaveform *s, float sb, trigger_wheel_e const channelIndex) {
|
||||||
s->addEvent720(sb, channelIndex, TV_RISE);
|
s->addEvent720(sb, channelIndex, TV_RISE);
|
||||||
sb += S24;
|
sb += S24;
|
||||||
s->addEvent720(sb, channelIndex, TV_FALL);
|
s->addEvent720(sb, channelIndex, TV_FALL);
|
||||||
|
@ -20,7 +20,7 @@ static float addAccordPair(TriggerShape *s, float sb, trigger_wheel_e const chan
|
||||||
}
|
}
|
||||||
|
|
||||||
#define DIP 7.5f
|
#define DIP 7.5f
|
||||||
static float addAccordPair3(TriggerShape *s, float sb) {
|
static float addAccordPair3(TriggerWaveform *s, float sb) {
|
||||||
sb += DIP;
|
sb += DIP;
|
||||||
s->addEvent720(sb, T_CHANNEL_3, TV_RISE);
|
s->addEvent720(sb, T_CHANNEL_3, TV_RISE);
|
||||||
sb += DIP;
|
sb += DIP;
|
||||||
|
@ -33,7 +33,7 @@ static float addAccordPair3(TriggerShape *s, float sb) {
|
||||||
* Thank you Dip!
|
* Thank you Dip!
|
||||||
* http://forum.pgmfi.org/viewtopic.php?f=2&t=15570start=210#p139007
|
* http://forum.pgmfi.org/viewtopic.php?f=2&t=15570start=210#p139007
|
||||||
*/
|
*/
|
||||||
void configureHondaAccordCDDip(TriggerShape *s) {
|
void configureHondaAccordCDDip(TriggerWaveform *s) {
|
||||||
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
||||||
|
|
||||||
s->initialState[T_SECONDARY] = TV_RISE;
|
s->initialState[T_SECONDARY] = TV_RISE;
|
||||||
|
@ -102,7 +102,7 @@ void configureHondaAccordCDDip(TriggerShape *s) {
|
||||||
* '4' is conditional
|
* '4' is conditional
|
||||||
* '24' is always secondary channel
|
* '24' is always secondary channel
|
||||||
*/
|
*/
|
||||||
void configureHonda_1_4_24(TriggerShape *s, bool withOneEventSignal, bool withFourEventSignal,
|
void configureHonda_1_4_24(TriggerWaveform *s, bool withOneEventSignal, bool withFourEventSignal,
|
||||||
trigger_wheel_e const oneEventWave,
|
trigger_wheel_e const oneEventWave,
|
||||||
trigger_wheel_e const fourEventWave,
|
trigger_wheel_e const fourEventWave,
|
||||||
float prefix) {
|
float prefix) {
|
||||||
|
@ -166,7 +166,7 @@ void configureHonda_1_4_24(TriggerShape *s, bool withOneEventSignal, bool withFo
|
||||||
s->useOnlyPrimaryForSync = true;
|
s->useOnlyPrimaryForSync = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void configureHondaCbr600(TriggerShape *s) {
|
void configureHondaCbr600(TriggerWaveform *s) {
|
||||||
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
||||||
s->useOnlyPrimaryForSync = true;
|
s->useOnlyPrimaryForSync = true;
|
||||||
s->isSynchronizationNeeded = true;
|
s->isSynchronizationNeeded = true;
|
||||||
|
@ -209,7 +209,7 @@ void configureHondaCbr600(TriggerShape *s) {
|
||||||
s->addEvent720(720.0f, T_PRIMARY, TV_RISE);
|
s->addEvent720(720.0f, T_PRIMARY, TV_RISE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void configureHondaCbr600custom(TriggerShape *s) {
|
void configureHondaCbr600custom(TriggerWaveform *s) {
|
||||||
|
|
||||||
// w = 15
|
// w = 15
|
||||||
float w = 720 / 2 / 24;
|
float w = 720 / 2 / 24;
|
||||||
|
@ -283,7 +283,7 @@ void configureHondaCbr600custom(TriggerShape *s) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void configureHondaAccordShifted(TriggerShape *s) {
|
void configureHondaAccordShifted(TriggerWaveform *s) {
|
||||||
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
||||||
|
|
||||||
float sb = S24;
|
float sb = S24;
|
||||||
|
@ -314,7 +314,7 @@ void configureHondaAccordShifted(TriggerShape *s) {
|
||||||
s->isSynchronizationNeeded = false;
|
s->isSynchronizationNeeded = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void configureOnePlus16(TriggerShape *s, operation_mode_e operationMode) {
|
void configureOnePlus16(TriggerWaveform *s, operation_mode_e operationMode) {
|
||||||
UNUSED(operationMode);
|
UNUSED(operationMode);
|
||||||
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
||||||
|
|
||||||
|
|
|
@ -10,17 +10,17 @@
|
||||||
|
|
||||||
#include "trigger_structure.h"
|
#include "trigger_structure.h"
|
||||||
|
|
||||||
void configureHondaAccordCDDip(TriggerShape *s);
|
void configureHondaAccordCDDip(TriggerWaveform *s);
|
||||||
void configureHondaAccordShifted(TriggerShape *s);
|
void configureHondaAccordShifted(TriggerWaveform *s);
|
||||||
|
|
||||||
void configureHonda_1_4_24(TriggerShape *s, bool withOneEventSignal, bool withFourEventSignal,
|
void configureHonda_1_4_24(TriggerWaveform *s, bool withOneEventSignal, bool withFourEventSignal,
|
||||||
trigger_wheel_e const oneEventWave,
|
trigger_wheel_e const oneEventWave,
|
||||||
trigger_wheel_e const fourEventWave,
|
trigger_wheel_e const fourEventWave,
|
||||||
float d);
|
float d);
|
||||||
|
|
||||||
void configureOnePlus16(TriggerShape *s, operation_mode_e operationMode);
|
void configureOnePlus16(TriggerWaveform *s, operation_mode_e operationMode);
|
||||||
|
|
||||||
void configureHondaCbr600(TriggerShape *s);
|
void configureHondaCbr600(TriggerWaveform *s);
|
||||||
void configureHondaCbr600custom(TriggerShape *s);
|
void configureHondaCbr600custom(TriggerWaveform *s);
|
||||||
|
|
||||||
#endif /* CONTROLLERS_TRIGGER_TRIGGER_HONDA_H_ */
|
#endif /* CONTROLLERS_TRIGGER_TRIGGER_HONDA_H_ */
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
|
|
||||||
#include "trigger_mazda.h"
|
#include "trigger_mazda.h"
|
||||||
|
|
||||||
void initializeMazdaMiataNaShape(TriggerShape *s) {
|
void initializeMazdaMiataNaShape(TriggerWaveform *s) {
|
||||||
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
||||||
s->setTriggerSynchronizationGap2(1.4930 * 0.6f, 1.4930 * 1.3f);
|
s->setTriggerSynchronizationGap2(1.4930 * 0.6f, 1.4930 * 1.3f);
|
||||||
s->useRiseEdge = false;
|
s->useRiseEdge = false;
|
||||||
|
@ -56,7 +56,7 @@ void initializeMazdaMiataNaShape(TriggerShape *s) {
|
||||||
* by alexander-n8hgeg5e
|
* by alexander-n8hgeg5e
|
||||||
* See https://rusefi.com/forum/viewtopic.php?f=5&t=1447
|
* See https://rusefi.com/forum/viewtopic.php?f=5&t=1447
|
||||||
*/
|
*/
|
||||||
void initialize_Mazda_Engine_z5_Shape(TriggerShape *s) {
|
void initialize_Mazda_Engine_z5_Shape(TriggerWaveform *s) {
|
||||||
s->initialize(FOUR_STROKE_CAM_SENSOR, false);
|
s->initialize(FOUR_STROKE_CAM_SENSOR, false);
|
||||||
/**
|
/**
|
||||||
* My Signal is: 60, 60, 102, 60
|
* My Signal is: 60, 60, 102, 60
|
||||||
|
@ -87,7 +87,7 @@ void initialize_Mazda_Engine_z5_Shape(TriggerShape *s) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// TT_MIATA_VVT
|
// TT_MIATA_VVT
|
||||||
void initializeMazdaMiataNb2Crank(TriggerShape *s) {
|
void initializeMazdaMiataNb2Crank(TriggerWaveform *s) {
|
||||||
s->initialize(FOUR_STROKE_SYMMETRICAL_CRANK_SENSOR, false);
|
s->initialize(FOUR_STROKE_SYMMETRICAL_CRANK_SENSOR, false);
|
||||||
|
|
||||||
float o = 160;
|
float o = 160;
|
||||||
|
@ -101,7 +101,7 @@ void initializeMazdaMiataNb2Crank(TriggerShape *s) {
|
||||||
s->addEvent720(o + 4 * 140.0f, T_PRIMARY, TV_RISE);
|
s->addEvent720(o + 4 * 140.0f, T_PRIMARY, TV_RISE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void initializeMazdaMiataNb1ShapeWithOffset(TriggerShape *s, float offset) {
|
static void initializeMazdaMiataNb1ShapeWithOffset(TriggerWaveform *s, float offset) {
|
||||||
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
||||||
s->setTriggerSynchronizationGap3(0, 0.065, 0.17f);
|
s->setTriggerSynchronizationGap3(0, 0.065, 0.17f);
|
||||||
s->useRiseEdge = false;
|
s->useRiseEdge = false;
|
||||||
|
@ -143,15 +143,15 @@ static void initializeMazdaMiataNb1ShapeWithOffset(TriggerShape *s, float offset
|
||||||
s->addEvent720(720.0f, T_PRIMARY, TV_RISE);
|
s->addEvent720(720.0f, T_PRIMARY, TV_RISE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void initializeMazdaMiataNb1Shape(TriggerShape *s) {
|
void initializeMazdaMiataNb1Shape(TriggerWaveform *s) {
|
||||||
initializeMazdaMiataNb1ShapeWithOffset(s, 0);
|
initializeMazdaMiataNb1ShapeWithOffset(s, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void initializeMazdaMiataVVtTestShape(TriggerShape *s) {
|
void initializeMazdaMiataVVtTestShape(TriggerWaveform *s) {
|
||||||
initializeMazdaMiataNb1ShapeWithOffset(s, -22);
|
initializeMazdaMiataNb1ShapeWithOffset(s, -22);
|
||||||
}
|
}
|
||||||
|
|
||||||
void configureMazdaProtegeSOHC(TriggerShape *s) {
|
void configureMazdaProtegeSOHC(TriggerWaveform *s) {
|
||||||
|
|
||||||
// todo: move to into configuration definition s->needSecondTriggerInput = FALSE;
|
// todo: move to into configuration definition s->needSecondTriggerInput = FALSE;
|
||||||
|
|
||||||
|
@ -181,7 +181,7 @@ void configureMazdaProtegeSOHC(TriggerShape *s) {
|
||||||
s->isSynchronizationNeeded = false;
|
s->isSynchronizationNeeded = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void configureMazdaProtegeLx(TriggerShape *s) {
|
void configureMazdaProtegeLx(TriggerWaveform *s) {
|
||||||
// todo: move to into configuration definition s->needSecondTriggerInput = FALSE;
|
// todo: move to into configuration definition s->needSecondTriggerInput = FALSE;
|
||||||
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
||||||
s->useOnlyPrimaryForSync = true;
|
s->useOnlyPrimaryForSync = true;
|
||||||
|
|
|
@ -12,12 +12,12 @@
|
||||||
|
|
||||||
#define MIATA_NA_GAP 1.4930f
|
#define MIATA_NA_GAP 1.4930f
|
||||||
|
|
||||||
void initializeMazdaMiataNaShape(TriggerShape *s);
|
void initializeMazdaMiataNaShape(TriggerWaveform *s);
|
||||||
void initializeMazdaMiataNb1Shape(TriggerShape *s);
|
void initializeMazdaMiataNb1Shape(TriggerWaveform *s);
|
||||||
void initializeMazdaMiataNb2Crank(TriggerShape *s);
|
void initializeMazdaMiataNb2Crank(TriggerWaveform *s);
|
||||||
void initializeMazdaMiataVVtTestShape(TriggerShape *s);
|
void initializeMazdaMiataVVtTestShape(TriggerWaveform *s);
|
||||||
void configureMazdaProtegeSOHC(TriggerShape *s);
|
void configureMazdaProtegeSOHC(TriggerWaveform *s);
|
||||||
void configureMazdaProtegeLx(TriggerShape *s);
|
void configureMazdaProtegeLx(TriggerWaveform *s);
|
||||||
void initialize_Mazda_Engine_z5_Shape(TriggerShape *s);
|
void initialize_Mazda_Engine_z5_Shape(TriggerWaveform *s);
|
||||||
|
|
||||||
#endif /* TRIGGER_MAZDA_H_ */
|
#endif /* TRIGGER_MAZDA_H_ */
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
#include "trigger_misc.h"
|
#include "trigger_misc.h"
|
||||||
|
|
||||||
// TT_FIAT_IAW_P8
|
// TT_FIAT_IAW_P8
|
||||||
void configureFiatIAQ_P8(TriggerShape * s) {
|
void configureFiatIAQ_P8(TriggerWaveform * s) {
|
||||||
s->initialize(FOUR_STROKE_CAM_SENSOR, false);
|
s->initialize(FOUR_STROKE_CAM_SENSOR, false);
|
||||||
|
|
||||||
s->isSynchronizationNeeded = true;
|
s->isSynchronizationNeeded = true;
|
||||||
|
|
|
@ -10,6 +10,6 @@
|
||||||
|
|
||||||
#include "trigger_structure.h"
|
#include "trigger_structure.h"
|
||||||
|
|
||||||
void configureFiatIAQ_P8(TriggerShape * s);
|
void configureFiatIAQ_P8(TriggerWaveform * s);
|
||||||
|
|
||||||
#endif /* CONTROLLERS_TRIGGER_DECODERS_TRIGGER_MISC_H_ */
|
#endif /* CONTROLLERS_TRIGGER_DECODERS_TRIGGER_MISC_H_ */
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
|
|
||||||
#include "trigger_mitsubishi.h"
|
#include "trigger_mitsubishi.h"
|
||||||
|
|
||||||
void configureFordAspireTriggerShape(TriggerShape * s) {
|
void configureFordAspireTriggerWaveform(TriggerWaveform * s) {
|
||||||
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
||||||
s->isSynchronizationNeeded = false;
|
s->isSynchronizationNeeded = false;
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ void configureFordAspireTriggerShape(TriggerShape * s) {
|
||||||
/**
|
/**
|
||||||
* TT_MITSUBISHI = 11
|
* TT_MITSUBISHI = 11
|
||||||
*/
|
*/
|
||||||
void initializeMitsubishi4g18(TriggerShape *s) {
|
void initializeMitsubishi4g18(TriggerWaveform *s) {
|
||||||
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
||||||
s->useRiseEdge = false;
|
s->useRiseEdge = false;
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
|
|
||||||
#include "trigger_structure.h"
|
#include "trigger_structure.h"
|
||||||
|
|
||||||
void initializeMitsubishi4g18(TriggerShape *s);
|
void initializeMitsubishi4g18(TriggerWaveform *s);
|
||||||
void configureFordAspireTriggerShape(TriggerShape * s);
|
void configureFordAspireTriggerWaveform(TriggerWaveform * s);
|
||||||
|
|
||||||
#endif /* TRIGGER_MITSUBISHI_H_ */
|
#endif /* TRIGGER_MITSUBISHI_H_ */
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
/**
|
/**
|
||||||
* 8,2,2,2 Nissan pattern
|
* 8,2,2,2 Nissan pattern
|
||||||
*/
|
*/
|
||||||
static void initializeNissanSR20VE_4_optional_360(TriggerShape *s, bool with2nd) {
|
static void initializeNissanSR20VE_4_optional_360(TriggerWaveform *s, bool with2nd) {
|
||||||
s->initialize(FOUR_STROKE_CAM_SENSOR, with2nd);
|
s->initialize(FOUR_STROKE_CAM_SENSOR, with2nd);
|
||||||
s->isSynchronizationNeeded = true;
|
s->isSynchronizationNeeded = true;
|
||||||
s->gapBothDirections = true;
|
s->gapBothDirections = true;
|
||||||
|
@ -99,10 +99,10 @@ static void initializeNissanSR20VE_4_optional_360(TriggerShape *s, bool with2nd)
|
||||||
* Nissan Primera p11 year 1995-2002
|
* Nissan Primera p11 year 1995-2002
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void initializeNissanSR20VE_4(TriggerShape *s) {
|
void initializeNissanSR20VE_4(TriggerWaveform *s) {
|
||||||
initializeNissanSR20VE_4_optional_360(s, false);
|
initializeNissanSR20VE_4_optional_360(s, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void initializeNissanSR20VE_4_360(TriggerShape *s) {
|
void initializeNissanSR20VE_4_360(TriggerWaveform *s) {
|
||||||
initializeNissanSR20VE_4_optional_360(s, true);
|
initializeNissanSR20VE_4_optional_360(s, true);
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
#include "trigger_structure.h"
|
#include "trigger_structure.h"
|
||||||
|
|
||||||
void initializeNissanSR20VE_4(TriggerShape *s);
|
void initializeNissanSR20VE_4(TriggerWaveform *s);
|
||||||
void initializeNissanSR20VE_4_360(TriggerShape *s);
|
void initializeNissanSR20VE_4_360(TriggerWaveform *s);
|
||||||
|
|
||||||
#endif /* CONTROLLERS_TRIGGER_TRIGGER_NISSAN_H_ */
|
#endif /* CONTROLLERS_TRIGGER_TRIGGER_NISSAN_H_ */
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
/**
|
/**
|
||||||
* https://en.wikipedia.org/wiki/Rover_K-series_engine
|
* https://en.wikipedia.org/wiki/Rover_K-series_engine
|
||||||
*/
|
*/
|
||||||
void initializeRoverK(TriggerShape *s) {
|
void initializeRoverK(TriggerWaveform *s) {
|
||||||
s->initialize(FOUR_STROKE_CRANK_SENSOR, false);
|
s->initialize(FOUR_STROKE_CRANK_SENSOR, false);
|
||||||
|
|
||||||
float tooth = 20;
|
float tooth = 20;
|
||||||
|
|
|
@ -11,6 +11,6 @@
|
||||||
|
|
||||||
#include "trigger_structure.h"
|
#include "trigger_structure.h"
|
||||||
|
|
||||||
void initializeRoverK(TriggerShape *s);
|
void initializeRoverK(TriggerWaveform *s);
|
||||||
|
|
||||||
#endif /* CONTROLLERS_TRIGGER_TRIGGER_ROVER_H_ */
|
#endif /* CONTROLLERS_TRIGGER_TRIGGER_ROVER_H_ */
|
||||||
|
|
|
@ -47,7 +47,7 @@
|
||||||
EXTERN_ENGINE;
|
EXTERN_ENGINE;
|
||||||
|
|
||||||
void event_trigger_position_s::setAngle(angle_t angle DECLARE_ENGINE_PARAMETER_SUFFIX) {
|
void event_trigger_position_s::setAngle(angle_t angle DECLARE_ENGINE_PARAMETER_SUFFIX) {
|
||||||
TRIGGER_SHAPE(findTriggerPosition(this, angle PASS_CONFIG_PARAM(engineConfiguration->globalTriggerAngleOffset)));
|
TRIGGER_WAVEFORM(findTriggerPosition(this, angle PASS_CONFIG_PARAM(engineConfiguration->globalTriggerAngleOffset)));
|
||||||
}
|
}
|
||||||
|
|
||||||
trigger_shape_helper::trigger_shape_helper() {
|
trigger_shape_helper::trigger_shape_helper() {
|
||||||
|
@ -57,7 +57,7 @@ trigger_shape_helper::trigger_shape_helper() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TriggerShape::TriggerShape() :
|
TriggerWaveform::TriggerWaveform() :
|
||||||
wave(switchTimesBuffer, NULL) {
|
wave(switchTimesBuffer, NULL) {
|
||||||
initialize(OM_NONE, false);
|
initialize(OM_NONE, false);
|
||||||
wave.channels = h.channels;
|
wave.channels = h.channels;
|
||||||
|
@ -65,7 +65,7 @@ TriggerShape::TriggerShape() :
|
||||||
memset(triggerIndexByAngle, 0, sizeof(triggerIndexByAngle));
|
memset(triggerIndexByAngle, 0, sizeof(triggerIndexByAngle));
|
||||||
}
|
}
|
||||||
|
|
||||||
void TriggerShape::initialize(operation_mode_e operationMode, bool needSecondTriggerInput) {
|
void TriggerWaveform::initialize(operation_mode_e operationMode, bool needSecondTriggerInput) {
|
||||||
isSynchronizationNeeded = true; // that's default value
|
isSynchronizationNeeded = true; // that's default value
|
||||||
bothFrontsRequired = false;
|
bothFrontsRequired = false;
|
||||||
this->needSecondTriggerInput = needSecondTriggerInput;
|
this->needSecondTriggerInput = needSecondTriggerInput;
|
||||||
|
@ -101,18 +101,18 @@ void TriggerShape::initialize(operation_mode_e operationMode, bool needSecondTri
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
int TriggerShape::getSize() const {
|
int TriggerWaveform::getSize() const {
|
||||||
return privateTriggerDefinitionSize;
|
return privateTriggerDefinitionSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
int TriggerShape::getTriggerShapeSynchPointIndex() const {
|
int TriggerWaveform::getTriggerWaveformSynchPointIndex() const {
|
||||||
return triggerShapeSynchPointIndex;
|
return triggerShapeSynchPointIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* physical primary trigger duration
|
* physical primary trigger duration
|
||||||
*/
|
*/
|
||||||
angle_t TriggerShape::getCycleDuration() const {
|
angle_t TriggerWaveform::getCycleDuration() const {
|
||||||
switch (operationMode) {
|
switch (operationMode) {
|
||||||
case FOUR_STROKE_SYMMETRICAL_CRANK_SENSOR:
|
case FOUR_STROKE_SYMMETRICAL_CRANK_SENSOR:
|
||||||
return 180;
|
return 180;
|
||||||
|
@ -128,7 +128,7 @@ angle_t TriggerShape::getCycleDuration() const {
|
||||||
* Trigger event count equals engine cycle event count if we have a cam sensor.
|
* Trigger event count equals engine cycle event count if we have a cam sensor.
|
||||||
* Two trigger cycles make one engine cycle in case of a four stroke engine If we only have a cranksensor.
|
* Two trigger cycles make one engine cycle in case of a four stroke engine If we only have a cranksensor.
|
||||||
*/
|
*/
|
||||||
uint32_t TriggerShape::getLength() const {
|
uint32_t TriggerWaveform::getLength() const {
|
||||||
/**
|
/**
|
||||||
* 4 for FOUR_STROKE_SYMMETRICAL_CRANK_SENSOR
|
* 4 for FOUR_STROKE_SYMMETRICAL_CRANK_SENSOR
|
||||||
* 2 for FOUR_STROKE_CRANK_SENSOR
|
* 2 for FOUR_STROKE_CRANK_SENSOR
|
||||||
|
@ -138,7 +138,7 @@ uint32_t TriggerShape::getLength() const {
|
||||||
return multiplier * getSize();
|
return multiplier * getSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
angle_t TriggerShape::getAngle(int index) const {
|
angle_t TriggerWaveform::getAngle(int index) const {
|
||||||
// todo: why is this check here? looks like the code below could be used universally
|
// todo: why is this check here? looks like the code below could be used universally
|
||||||
if (operationMode == FOUR_STROKE_CAM_SENSOR) {
|
if (operationMode == FOUR_STROKE_CAM_SENSOR) {
|
||||||
return getSwitchAngle(index);
|
return getSwitchAngle(index);
|
||||||
|
@ -156,7 +156,7 @@ angle_t TriggerShape::getAngle(int index) const {
|
||||||
return getCycleDuration() * crankCycle + getSwitchAngle(remainder);
|
return getCycleDuration() * crankCycle + getSwitchAngle(remainder);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TriggerShape::addEventClamped(angle_t angle, trigger_wheel_e const channelIndex, trigger_value_e const stateParam, float filterLeft, float filterRight) {
|
void TriggerWaveform::addEventClamped(angle_t angle, trigger_wheel_e const channelIndex, trigger_value_e const stateParam, float filterLeft, float filterRight) {
|
||||||
if (angle > filterLeft && angle < filterRight) {
|
if (angle > filterLeft && angle < filterRight) {
|
||||||
#if EFI_UNIT_TEST
|
#if EFI_UNIT_TEST
|
||||||
// printf("addEventClamped %f %s\r\n", angle, getTrigger_value_e(stateParam));
|
// printf("addEventClamped %f %s\r\n", angle, getTrigger_value_e(stateParam));
|
||||||
|
@ -165,7 +165,7 @@ void TriggerShape::addEventClamped(angle_t angle, trigger_wheel_e const channelI
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
operation_mode_e TriggerShape::getOperationMode() const {
|
operation_mode_e TriggerWaveform::getOperationMode() const {
|
||||||
return operationMode;
|
return operationMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -173,7 +173,7 @@ operation_mode_e TriggerShape::getOperationMode() const {
|
||||||
extern bool printTriggerDebug;
|
extern bool printTriggerDebug;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void TriggerShape::calculateExpectedEventCounts(bool useOnlyRisingEdgeForTrigger) {
|
void TriggerWaveform::calculateExpectedEventCounts(bool useOnlyRisingEdgeForTrigger) {
|
||||||
UNUSED(useOnlyRisingEdgeForTrigger);
|
UNUSED(useOnlyRisingEdgeForTrigger);
|
||||||
// todo: move the following logic from below here
|
// todo: move the following logic from below here
|
||||||
// if (!useOnlyRisingEdgeForTrigger || stateParam == TV_RISE) {
|
// if (!useOnlyRisingEdgeForTrigger || stateParam == TV_RISE) {
|
||||||
|
@ -182,11 +182,11 @@ void TriggerShape::calculateExpectedEventCounts(bool useOnlyRisingEdgeForTrigger
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TriggerShape::addEvent720(angle_t angle, trigger_wheel_e const channelIndex, trigger_value_e const stateParam) {
|
void TriggerWaveform::addEvent720(angle_t angle, trigger_wheel_e const channelIndex, trigger_value_e const stateParam) {
|
||||||
addEvent(angle / 720, channelIndex, stateParam);
|
addEvent(angle / 720, channelIndex, stateParam);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TriggerShape::addEvent(angle_t angle, trigger_wheel_e const channelIndex, trigger_value_e const stateParam) {
|
void TriggerWaveform::addEvent(angle_t angle, trigger_wheel_e const channelIndex, trigger_value_e const stateParam) {
|
||||||
efiAssertVoid(CUSTOM_OMODE_UNDEF, operationMode != OM_NONE, "operationMode not set");
|
efiAssertVoid(CUSTOM_OMODE_UNDEF, operationMode != OM_NONE, "operationMode not set");
|
||||||
|
|
||||||
efiAssertVoid(CUSTOM_ERR_6598, channelIndex!= T_SECONDARY || needSecondTriggerInput, "secondary needed or not?");
|
efiAssertVoid(CUSTOM_ERR_6598, channelIndex!= T_SECONDARY || needSecondTriggerInput, "secondary needed or not?");
|
||||||
|
@ -283,26 +283,26 @@ void TriggerShape::addEvent(angle_t angle, trigger_wheel_e const channelIndex, t
|
||||||
wave.channels[channelIndex].setState(index, state);
|
wave.channels[channelIndex].setState(index, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
angle_t TriggerShape::getSwitchAngle(int index) const {
|
angle_t TriggerWaveform::getSwitchAngle(int index) const {
|
||||||
return getCycleDuration() * wave.getSwitchTime(index);
|
return getCycleDuration() * wave.getSwitchTime(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setToothedWheelConfiguration(TriggerShape *s, int total, int skipped,
|
void setToothedWheelConfiguration(TriggerWaveform *s, int total, int skipped,
|
||||||
operation_mode_e operationMode) {
|
operation_mode_e operationMode) {
|
||||||
#if EFI_ENGINE_CONTROL
|
#if EFI_ENGINE_CONTROL
|
||||||
|
|
||||||
s->useRiseEdge = true;
|
s->useRiseEdge = true;
|
||||||
|
|
||||||
initializeSkippedToothTriggerShapeExt(s, total, skipped,
|
initializeSkippedToothTriggerWaveformExt(s, total, skipped,
|
||||||
operationMode);
|
operationMode);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void TriggerShape::setTriggerSynchronizationGap2(float syncRatioFrom, float syncRatioTo) {
|
void TriggerWaveform::setTriggerSynchronizationGap2(float syncRatioFrom, float syncRatioTo) {
|
||||||
setTriggerSynchronizationGap3(/*gapIndex*/0, syncRatioFrom, syncRatioTo);
|
setTriggerSynchronizationGap3(/*gapIndex*/0, syncRatioFrom, syncRatioTo);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TriggerShape::setTriggerSynchronizationGap3(int gapIndex, float syncRatioFrom, float syncRatioTo) {
|
void TriggerWaveform::setTriggerSynchronizationGap3(int gapIndex, float syncRatioFrom, float syncRatioTo) {
|
||||||
isSynchronizationNeeded = true;
|
isSynchronizationNeeded = true;
|
||||||
this->syncronizationRatioFrom[gapIndex] = syncRatioFrom;
|
this->syncronizationRatioFrom[gapIndex] = syncRatioFrom;
|
||||||
this->syncronizationRatioTo[gapIndex] = syncRatioTo;
|
this->syncronizationRatioTo[gapIndex] = syncRatioTo;
|
||||||
|
@ -322,7 +322,7 @@ void TriggerShape::setTriggerSynchronizationGap3(int gapIndex, float syncRatioFr
|
||||||
/**
|
/**
|
||||||
* this method is only used on initialization
|
* this method is only used on initialization
|
||||||
*/
|
*/
|
||||||
int TriggerShape::findAngleIndex(float target) const {
|
int TriggerWaveform::findAngleIndex(float target) const {
|
||||||
int engineCycleEventCount = getLength();
|
int engineCycleEventCount = getLength();
|
||||||
|
|
||||||
efiAssert(CUSTOM_ERR_ASSERT, engineCycleEventCount > 0, "engineCycleEventCount", 0);
|
efiAssert(CUSTOM_ERR_ASSERT, engineCycleEventCount > 0, "engineCycleEventCount", 0);
|
||||||
|
@ -350,11 +350,11 @@ int TriggerShape::findAngleIndex(float target) const {
|
||||||
return left - 1;
|
return left - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TriggerShape::setShapeDefinitionError(bool value) {
|
void TriggerWaveform::setShapeDefinitionError(bool value) {
|
||||||
shapeDefinitionError = value;
|
shapeDefinitionError = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TriggerShape::findTriggerPosition(event_trigger_position_s *position,
|
void TriggerWaveform::findTriggerPosition(event_trigger_position_s *position,
|
||||||
angle_t angle DEFINE_CONFIG_PARAM(angle_t, globalTriggerAngleOffset)) {
|
angle_t angle DEFINE_CONFIG_PARAM(angle_t, globalTriggerAngleOffset)) {
|
||||||
efiAssertVoid(CUSTOM_ERR_6574, !cisnan(angle), "findAngle#1");
|
efiAssertVoid(CUSTOM_ERR_6574, !cisnan(angle), "findAngle#1");
|
||||||
assertAngleRange(angle, "findAngle#a1", CUSTOM_ERR_6545);
|
assertAngleRange(angle, "findAngle#a1", CUSTOM_ERR_6545);
|
||||||
|
@ -381,7 +381,7 @@ void TriggerShape::findTriggerPosition(event_trigger_position_s *position,
|
||||||
position->angleOffsetFromTriggerEvent = angle - triggerEventAngle;
|
position->angleOffsetFromTriggerEvent = angle - triggerEventAngle;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TriggerShape::prepareShape() {
|
void TriggerWaveform::prepareShape() {
|
||||||
#if EFI_ENGINE_CONTROL && EFI_SHAFT_POSITION_INPUT
|
#if EFI_ENGINE_CONTROL && EFI_SHAFT_POSITION_INPUT
|
||||||
int engineCycleInt = (int) getEngineCycle(operationMode);
|
int engineCycleInt = (int) getEngineCycle(operationMode);
|
||||||
for (int angle = 0; angle < engineCycleInt; angle++) {
|
for (int angle = 0; angle < engineCycleInt; angle++) {
|
||||||
|
@ -395,19 +395,19 @@ void TriggerShape::prepareShape() {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void TriggerShape::setTriggerSynchronizationGap(float syncRatio) {
|
void TriggerWaveform::setTriggerSynchronizationGap(float syncRatio) {
|
||||||
setTriggerSynchronizationGap3(/*gapIndex*/0, syncRatio * 0.75f, syncRatio * 1.25f);
|
setTriggerSynchronizationGap3(/*gapIndex*/0, syncRatio * 0.75f, syncRatio * 1.25f);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TriggerShape::setSecondTriggerSynchronizationGap2(float syncRatioFrom, float syncRatioTo) {
|
void TriggerWaveform::setSecondTriggerSynchronizationGap2(float syncRatioFrom, float syncRatioTo) {
|
||||||
setTriggerSynchronizationGap3(/*gapIndex*/1, syncRatioFrom, syncRatioTo);
|
setTriggerSynchronizationGap3(/*gapIndex*/1, syncRatioFrom, syncRatioTo);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TriggerShape::setThirdTriggerSynchronizationGap(float syncRatio) {
|
void TriggerWaveform::setThirdTriggerSynchronizationGap(float syncRatio) {
|
||||||
setTriggerSynchronizationGap3(/*gapIndex*/2, syncRatio * 0.75f, syncRatio * 1.25f);
|
setTriggerSynchronizationGap3(/*gapIndex*/2, syncRatio * 0.75f, syncRatio * 1.25f);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TriggerShape::setSecondTriggerSynchronizationGap(float syncRatio) {
|
void TriggerWaveform::setSecondTriggerSynchronizationGap(float syncRatio) {
|
||||||
setTriggerSynchronizationGap3(/*gapIndex*/1, syncRatio * 0.75f, syncRatio * 1.25f);
|
setTriggerSynchronizationGap3(/*gapIndex*/1, syncRatio * 0.75f, syncRatio * 1.25f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -415,11 +415,11 @@ void TriggerShape::setSecondTriggerSynchronizationGap(float syncRatio) {
|
||||||
/**
|
/**
|
||||||
* External logger is needed because at this point our logger is not yet initialized
|
* External logger is needed because at this point our logger is not yet initialized
|
||||||
*/
|
*/
|
||||||
void TriggerShape::initializeTriggerShape(Logging *logger, operation_mode_e ambiguousOperationMode, bool useOnlyRisingEdgeForTrigger, const trigger_config_s *triggerConfig) {
|
void TriggerWaveform::initializeTriggerWaveform(Logging *logger, operation_mode_e ambiguousOperationMode, bool useOnlyRisingEdgeForTrigger, const trigger_config_s *triggerConfig) {
|
||||||
|
|
||||||
#if EFI_PROD_CODE
|
#if EFI_PROD_CODE
|
||||||
efiAssertVoid(CUSTOM_ERR_6641, getCurrentRemainingStack() > 256, "init t");
|
efiAssertVoid(CUSTOM_ERR_6641, getCurrentRemainingStack() > 256, "init t");
|
||||||
scheduleMsg(logger, "initializeTriggerShape(%s/%d)", getTrigger_type_e(triggerConfig->type), (int) triggerConfig->type);
|
scheduleMsg(logger, "initializeTriggerWaveform(%s/%d)", getTrigger_type_e(triggerConfig->type), (int) triggerConfig->type);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
shapeDefinitionError = false;
|
shapeDefinitionError = false;
|
||||||
|
@ -429,7 +429,7 @@ void TriggerShape::initializeTriggerShape(Logging *logger, operation_mode_e ambi
|
||||||
switch (triggerConfig->type) {
|
switch (triggerConfig->type) {
|
||||||
|
|
||||||
case TT_TOOTHED_WHEEL:
|
case TT_TOOTHED_WHEEL:
|
||||||
initializeSkippedToothTriggerShapeExt(this, triggerConfig->customTotalToothCount,
|
initializeSkippedToothTriggerWaveformExt(this, triggerConfig->customTotalToothCount,
|
||||||
triggerConfig->customSkippedToothCount, ambiguousOperationMode);
|
triggerConfig->customSkippedToothCount, ambiguousOperationMode);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -454,32 +454,32 @@ void TriggerShape::initializeTriggerShape(Logging *logger, operation_mode_e ambi
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TT_DODGE_NEON_1995:
|
case TT_DODGE_NEON_1995:
|
||||||
configureNeon1995TriggerShape(this);
|
configureNeon1995TriggerWaveform(this);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TT_DODGE_NEON_1995_ONLY_CRANK:
|
case TT_DODGE_NEON_1995_ONLY_CRANK:
|
||||||
configureNeon1995TriggerShapeOnlyCrank(this);
|
configureNeon1995TriggerWaveformOnlyCrank(this);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TT_DODGE_STRATUS:
|
case TT_DODGE_STRATUS:
|
||||||
configureDodgeStratusTriggerShape(this);
|
configureDodgeStratusTriggerWaveform(this);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TT_DODGE_NEON_2003_CAM:
|
case TT_DODGE_NEON_2003_CAM:
|
||||||
configureNeon2003TriggerShapeCam(this);
|
configureNeon2003TriggerWaveformCam(this);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TT_DODGE_NEON_2003_CRANK:
|
case TT_DODGE_NEON_2003_CRANK:
|
||||||
configureNeon2003TriggerShapeCam(this);
|
configureNeon2003TriggerWaveformCam(this);
|
||||||
// configureNeon2003TriggerShapeCrank(triggerShape);
|
// configureNeon2003TriggerWaveformCrank(triggerShape);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TT_FORD_ASPIRE:
|
case TT_FORD_ASPIRE:
|
||||||
configureFordAspireTriggerShape(this);
|
configureFordAspireTriggerWaveform(this);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TT_GM_7X:
|
case TT_GM_7X:
|
||||||
configureGmTriggerShape(this);
|
configureGmTriggerWaveform(this);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TT_MAZDA_DOHC_1_4:
|
case TT_MAZDA_DOHC_1_4:
|
||||||
|
@ -507,7 +507,7 @@ void TriggerShape::initializeTriggerShape(Logging *logger, operation_mode_e ambi
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TT_MINI_COOPER_R50:
|
case TT_MINI_COOPER_R50:
|
||||||
configureMiniCooperTriggerShape(this);
|
configureMiniCooperTriggerWaveform(this);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TT_TOOTHED_WHEEL_60_2:
|
case TT_TOOTHED_WHEEL_60_2:
|
||||||
|
@ -604,7 +604,7 @@ void TriggerShape::initializeTriggerShape(Logging *logger, operation_mode_e ambi
|
||||||
|
|
||||||
default:
|
default:
|
||||||
setShapeDefinitionError(true);
|
setShapeDefinitionError(true);
|
||||||
warning(CUSTOM_ERR_NO_SHAPE, "initializeTriggerShape() not implemented: %d", triggerConfig->type);
|
warning(CUSTOM_ERR_NO_SHAPE, "initializeTriggerWaveform() not implemented: %d", triggerConfig->type);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Feb 2019 suggestion: it would be an improvement to remove 'expectedEventCount' logic from 'addEvent'
|
* Feb 2019 suggestion: it would be an improvement to remove 'expectedEventCount' logic from 'addEvent'
|
||||||
|
|
|
@ -72,10 +72,10 @@ class TriggerState;
|
||||||
* @brief Trigger shape has all the fields needed to describe and decode trigger signal.
|
* @brief Trigger shape has all the fields needed to describe and decode trigger signal.
|
||||||
* @see TriggerState for trigger decoder state which works based on this trigger shape model
|
* @see TriggerState for trigger decoder state which works based on this trigger shape model
|
||||||
*/
|
*/
|
||||||
class TriggerShape {
|
class TriggerWaveform {
|
||||||
public:
|
public:
|
||||||
TriggerShape();
|
TriggerWaveform();
|
||||||
void initializeTriggerShape(Logging *logger, operation_mode_e ambiguousOperationMode,
|
void initializeTriggerWaveform(Logging *logger, operation_mode_e ambiguousOperationMode,
|
||||||
bool useOnlyRisingEdgeForTrigger, const trigger_config_s *triggerConfig);
|
bool useOnlyRisingEdgeForTrigger, const trigger_config_s *triggerConfig);
|
||||||
void findTriggerPosition(event_trigger_position_s *position,
|
void findTriggerPosition(event_trigger_position_s *position,
|
||||||
angle_t angle DEFINE_CONFIG_PARAM(angle_t, globalTriggerAngleOffset));
|
angle_t angle DEFINE_CONFIG_PARAM(angle_t, globalTriggerAngleOffset));
|
||||||
|
@ -240,7 +240,7 @@ public:
|
||||||
uint32_t getLength() const;
|
uint32_t getLength() const;
|
||||||
int getSize() const;
|
int getSize() const;
|
||||||
|
|
||||||
int getTriggerShapeSynchPointIndex() const;
|
int getTriggerWaveformSynchPointIndex() const;
|
||||||
void prepareShape();
|
void prepareShape();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -250,7 +250,7 @@ public:
|
||||||
angle_t getAngle(int phaseIndex) const;
|
angle_t getAngle(int phaseIndex) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* index of synchronization event within TriggerShape
|
* index of synchronization event within TriggerWaveform
|
||||||
* See findTriggerZeroEventIndex()
|
* See findTriggerZeroEventIndex()
|
||||||
*/
|
*/
|
||||||
int triggerShapeSynchPointIndex;
|
int triggerShapeSynchPointIndex;
|
||||||
|
@ -283,8 +283,8 @@ private:
|
||||||
angle_t getCycleDuration() const;
|
angle_t getCycleDuration() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
void setToothedWheelConfiguration(TriggerShape *s, int total, int skipped, operation_mode_e operationMode);
|
void setToothedWheelConfiguration(TriggerWaveform *s, int total, int skipped, operation_mode_e operationMode);
|
||||||
|
|
||||||
#define TRIGGER_SHAPE(x) ENGINE(triggerCentral.triggerShape.x)
|
#define TRIGGER_WAVEFORM(x) ENGINE(triggerCentral.triggerShape.x)
|
||||||
|
|
||||||
#define getTriggerSize() TRIGGER_SHAPE(privateTriggerDefinitionSize)
|
#define getTriggerSize() TRIGGER_WAVEFORM(privateTriggerDefinitionSize)
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
/**
|
/**
|
||||||
* This trigger is also used by Nissan and Mazda
|
* This trigger is also used by Nissan and Mazda
|
||||||
*/
|
*/
|
||||||
void initialize36_2_2_2(TriggerShape *s) {
|
void initialize36_2_2_2(TriggerWaveform *s) {
|
||||||
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
||||||
|
|
||||||
float wide = 30 * 2;
|
float wide = 30 * 2;
|
||||||
|
@ -46,7 +46,7 @@ void initialize36_2_2_2(TriggerShape *s) {
|
||||||
s->useOnlyPrimaryForSync = true;
|
s->useOnlyPrimaryForSync = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void initializeSubaru7_6(TriggerShape *s) {
|
void initializeSubaru7_6(TriggerWaveform *s) {
|
||||||
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
||||||
|
|
||||||
float magic = 333;
|
float magic = 333;
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
#include "trigger_structure.h"
|
#include "trigger_structure.h"
|
||||||
|
|
||||||
void initialize36_2_2_2(TriggerShape *s);
|
void initialize36_2_2_2(TriggerWaveform *s);
|
||||||
void initializeSubaru7_6(TriggerShape *s);
|
void initializeSubaru7_6(TriggerWaveform *s);
|
||||||
|
|
||||||
#endif /* CONTROLLERS_TRIGGER_TRIGGER_SUBARU_H_ */
|
#endif /* CONTROLLERS_TRIGGER_TRIGGER_SUBARU_H_ */
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
|
|
||||||
#include "trigger_toyota.h"
|
#include "trigger_toyota.h"
|
||||||
|
|
||||||
void initialize2jzGE1_12(TriggerShape *s) {
|
void initialize2jzGE1_12(TriggerWaveform *s) {
|
||||||
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
||||||
|
|
||||||
float crankD = 360 / 12 / 2; // 15
|
float crankD = 360 / 12 / 2; // 15
|
||||||
|
@ -43,7 +43,7 @@ void initialize2jzGE1_12(TriggerShape *s) {
|
||||||
s->isSynchronizationNeeded = false;
|
s->isSynchronizationNeeded = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void initialize2jzGE3_34(TriggerShape *s) {
|
void initialize2jzGE3_34(TriggerWaveform *s) {
|
||||||
setToothedWheelConfiguration(s, 36, 2, FOUR_STROKE_CRANK_SENSOR);
|
setToothedWheelConfiguration(s, 36, 2, FOUR_STROKE_CRANK_SENSOR);
|
||||||
|
|
||||||
// s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
// s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
#include "trigger_structure.h"
|
#include "trigger_structure.h"
|
||||||
|
|
||||||
void initialize2jzGE1_12(TriggerShape *s);
|
void initialize2jzGE1_12(TriggerWaveform *s);
|
||||||
void initialize2jzGE3_34(TriggerShape *s);
|
void initialize2jzGE3_34(TriggerWaveform *s);
|
||||||
|
|
||||||
#endif /* CONTROLLERS_TRIGGER_TRIGGER_TOYOTA_H_ */
|
#endif /* CONTROLLERS_TRIGGER_TRIGGER_TOYOTA_H_ */
|
||||||
|
|
|
@ -11,7 +11,7 @@ angle_t getEngineCycle(operation_mode_e operationMode) {
|
||||||
return operationMode == TWO_STROKE ? 360 : FOUR_STROKE_ENGINE_CYCLE;
|
return operationMode == TWO_STROKE ? 360 : FOUR_STROKE_ENGINE_CYCLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void addSkippedToothTriggerEvents(trigger_wheel_e wheel, TriggerShape *s, int totalTeethCount, int skippedCount,
|
void addSkippedToothTriggerEvents(trigger_wheel_e wheel, TriggerWaveform *s, int totalTeethCount, int skippedCount,
|
||||||
float toothWidth, float offset, float engineCycle, float filterLeft, float filterRight) {
|
float toothWidth, float offset, float engineCycle, float filterLeft, float filterRight) {
|
||||||
efiAssertVoid(CUSTOM_ERR_6586, totalTeethCount > 0, "total count");
|
efiAssertVoid(CUSTOM_ERR_6586, totalTeethCount > 0, "total count");
|
||||||
efiAssertVoid(CUSTOM_ERR_6587, skippedCount >= 0, "skipped count");
|
efiAssertVoid(CUSTOM_ERR_6587, skippedCount >= 0, "skipped count");
|
||||||
|
@ -28,14 +28,14 @@ void addSkippedToothTriggerEvents(trigger_wheel_e wheel, TriggerShape *s, int to
|
||||||
s->addEventClamped(offset + engineCycle, wheel, TV_FALL, filterLeft, filterRight);
|
s->addEventClamped(offset + engineCycle, wheel, TV_FALL, filterLeft, filterRight);
|
||||||
}
|
}
|
||||||
|
|
||||||
void initializeSkippedToothTriggerShapeExt(TriggerShape *s, int totalTeethCount, int skippedCount,
|
void initializeSkippedToothTriggerWaveformExt(TriggerWaveform *s, int totalTeethCount, int skippedCount,
|
||||||
operation_mode_e operationMode) {
|
operation_mode_e operationMode) {
|
||||||
if (totalTeethCount <= 0) {
|
if (totalTeethCount <= 0) {
|
||||||
warning(CUSTOM_OBD_TRIGGER_SHAPE, "totalTeethCount is zero or less: %d", totalTeethCount);
|
warning(CUSTOM_OBD_TRIGGER_WAVEFORM, "totalTeethCount is zero or less: %d", totalTeethCount);
|
||||||
s->setShapeDefinitionError(true);
|
s->setShapeDefinitionError(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
efiAssertVoid(CUSTOM_NULL_SHAPE, s != NULL, "TriggerShape is NULL");
|
efiAssertVoid(CUSTOM_NULL_SHAPE, s != NULL, "TriggerWaveform is NULL");
|
||||||
s->initialize(operationMode, false);
|
s->initialize(operationMode, false);
|
||||||
|
|
||||||
s->setTriggerSynchronizationGap(skippedCount + 1);
|
s->setTriggerSynchronizationGap(skippedCount + 1);
|
||||||
|
@ -46,7 +46,7 @@ void initializeSkippedToothTriggerShapeExt(TriggerShape *s, int totalTeethCount,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void configureOnePlusOne(TriggerShape *s, operation_mode_e operationMode) {
|
void configureOnePlusOne(TriggerWaveform *s, operation_mode_e operationMode) {
|
||||||
UNUSED(operationMode);
|
UNUSED(operationMode);
|
||||||
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@ void configureOnePlusOne(TriggerShape *s, operation_mode_e operationMode) {
|
||||||
s->useOnlyPrimaryForSync = true;
|
s->useOnlyPrimaryForSync = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void configureOnePlus60_2(TriggerShape *s, operation_mode_e operationMode) {
|
void configureOnePlus60_2(TriggerWaveform *s, operation_mode_e operationMode) {
|
||||||
UNUSED(operationMode);
|
UNUSED(operationMode);
|
||||||
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
||||||
|
|
||||||
|
@ -79,7 +79,7 @@ void configureOnePlus60_2(TriggerShape *s, operation_mode_e operationMode) {
|
||||||
s->useOnlyPrimaryForSync = true;
|
s->useOnlyPrimaryForSync = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void configure3_1_cam(TriggerShape *s, operation_mode_e operationMode) {
|
void configure3_1_cam(TriggerWaveform *s, operation_mode_e operationMode) {
|
||||||
UNUSED(operationMode);
|
UNUSED(operationMode);
|
||||||
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
||||||
|
|
||||||
|
|
|
@ -14,17 +14,17 @@
|
||||||
#define NO_LEFT_FILTER -1
|
#define NO_LEFT_FILTER -1
|
||||||
#define NO_RIGHT_FILTER 1000
|
#define NO_RIGHT_FILTER 1000
|
||||||
|
|
||||||
void addSkippedToothTriggerEvents(trigger_wheel_e wheel, TriggerShape *s,
|
void addSkippedToothTriggerEvents(trigger_wheel_e wheel, TriggerWaveform *s,
|
||||||
int totalTeethCount, int skippedCount,
|
int totalTeethCount, int skippedCount,
|
||||||
float toothWidth,
|
float toothWidth,
|
||||||
float offset, float engineCycle, float filterLeft, float filterRight);
|
float offset, float engineCycle, float filterLeft, float filterRight);
|
||||||
|
|
||||||
|
|
||||||
void initializeSkippedToothTriggerShapeExt(TriggerShape *s, int totalTeethCount, int skippedCount, operation_mode_e operationMode);;
|
void initializeSkippedToothTriggerWaveformExt(TriggerWaveform *s, int totalTeethCount, int skippedCount, operation_mode_e operationMode);;
|
||||||
|
|
||||||
void configureOnePlus60_2(TriggerShape *s, operation_mode_e operationMode);
|
void configureOnePlus60_2(TriggerWaveform *s, operation_mode_e operationMode);
|
||||||
|
|
||||||
void configure3_1_cam(TriggerShape *s, operation_mode_e operationMode);
|
void configure3_1_cam(TriggerWaveform *s, operation_mode_e operationMode);
|
||||||
|
|
||||||
void configureOnePlusOne(TriggerShape *s, operation_mode_e operationMode);
|
void configureOnePlusOne(TriggerWaveform *s, operation_mode_e operationMode);
|
||||||
#endif /* CONTROLLERS_TRIGGER_DECODERS_TRIGGER_UNIVERSAL_H_ */
|
#endif /* CONTROLLERS_TRIGGER_DECODERS_TRIGGER_UNIVERSAL_H_ */
|
||||||
|
|
|
@ -8,8 +8,8 @@
|
||||||
#include "trigger_vw.h"
|
#include "trigger_vw.h"
|
||||||
#include "trigger_universal.h"
|
#include "trigger_universal.h"
|
||||||
|
|
||||||
void setVwConfiguration(TriggerShape *s) {
|
void setVwConfiguration(TriggerWaveform *s) {
|
||||||
efiAssertVoid(CUSTOM_ERR_6660, s != NULL, "TriggerShape is NULL");
|
efiAssertVoid(CUSTOM_ERR_6660, s != NULL, "TriggerWaveform is NULL");
|
||||||
|
|
||||||
s->initialize(FOUR_STROKE_CRANK_SENSOR, false);
|
s->initialize(FOUR_STROKE_CRANK_SENSOR, false);
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,6 @@
|
||||||
|
|
||||||
#include "trigger_structure.h"
|
#include "trigger_structure.h"
|
||||||
|
|
||||||
void setVwConfiguration(TriggerShape *s);
|
void setVwConfiguration(TriggerWaveform *s);
|
||||||
|
|
||||||
#endif /* CONTROLLERS_TRIGGER_DECODERS_TRIGGER_VW_H_ */
|
#endif /* CONTROLLERS_TRIGGER_DECODERS_TRIGGER_VW_H_ */
|
||||||
|
|
|
@ -497,7 +497,7 @@ void mainTriggerCallback(trigger_event_e ckpSignalType, uint32_t trgEventIndex D
|
||||||
engine->ignitionEvents.isReady = false; // we need to rebuild complete ignition schedule
|
engine->ignitionEvents.isReady = false; // we need to rebuild complete ignition schedule
|
||||||
engine->injectionEvents.isReady = false;
|
engine->injectionEvents.isReady = false;
|
||||||
// moved 'triggerIndexByAngle' into trigger initialization (why was it invoked from here if it's only about trigger shape & optimization?)
|
// moved 'triggerIndexByAngle' into trigger initialization (why was it invoked from here if it's only about trigger shape & optimization?)
|
||||||
// see initializeTriggerShape() -> prepareOutputSignals(PASS_ENGINE_PARAMETER_SIGNATURE)
|
// see initializeTriggerWaveform() -> prepareOutputSignals(PASS_ENGINE_PARAMETER_SIGNATURE)
|
||||||
|
|
||||||
// we need this to apply new 'triggerIndexByAngle' values
|
// we need this to apply new 'triggerIndexByAngle' values
|
||||||
engine->periodicFastCallback(PASS_ENGINE_PARAMETER_SIGNATURE);
|
engine->periodicFastCallback(PASS_ENGINE_PARAMETER_SIGNATURE);
|
||||||
|
|
|
@ -290,12 +290,12 @@ bool TriggerCentral::noiseFilter(efitick_t nowNt, trigger_event_e signal DECLARE
|
||||||
efitick_t allowedPeriod = accumSignalPrevPeriods[os];
|
efitick_t allowedPeriod = accumSignalPrevPeriods[os];
|
||||||
|
|
||||||
// but first check if we're expecting a gap
|
// but first check if we're expecting a gap
|
||||||
bool isGapExpected = TRIGGER_SHAPE(isSynchronizationNeeded) && triggerState.shaft_is_synchronized &&
|
bool isGapExpected = TRIGGER_WAVEFORM(isSynchronizationNeeded) && triggerState.shaft_is_synchronized &&
|
||||||
(triggerState.currentCycle.eventCount[ti] + 1) == TRIGGER_SHAPE(expectedEventCount[ti]);
|
(triggerState.currentCycle.eventCount[ti] + 1) == TRIGGER_WAVEFORM(expectedEventCount[ti]);
|
||||||
|
|
||||||
if (isGapExpected) {
|
if (isGapExpected) {
|
||||||
// usually we need to extend the period for gaps, based on the trigger info
|
// usually we need to extend the period for gaps, based on the trigger info
|
||||||
allowedPeriod *= TRIGGER_SHAPE(syncRatioAvg);
|
allowedPeriod *= TRIGGER_WAVEFORM(syncRatioAvg);
|
||||||
}
|
}
|
||||||
|
|
||||||
// also we need some margin for rapidly changing trigger-wheel speed,
|
// also we need some margin for rapidly changing trigger-wheel speed,
|
||||||
|
@ -430,9 +430,9 @@ EXTERN_ENGINE
|
||||||
|
|
||||||
static void triggerShapeInfo(void) {
|
static void triggerShapeInfo(void) {
|
||||||
#if EFI_PROD_CODE || EFI_SIMULATOR
|
#if EFI_PROD_CODE || EFI_SIMULATOR
|
||||||
TriggerShape *s = &engine->triggerCentral.triggerShape;
|
TriggerWaveform *s = &engine->triggerCentral.triggerShape;
|
||||||
scheduleMsg(logger, "useRise=%s", boolToString(TRIGGER_SHAPE(useRiseEdge)));
|
scheduleMsg(logger, "useRise=%s", boolToString(TRIGGER_WAVEFORM(useRiseEdge)));
|
||||||
scheduleMsg(logger, "gap from %.2f to %.2f", TRIGGER_SHAPE(syncronizationRatioFrom[0]), TRIGGER_SHAPE(syncronizationRatioTo[0]));
|
scheduleMsg(logger, "gap from %.2f to %.2f", TRIGGER_WAVEFORM(syncronizationRatioFrom[0]), TRIGGER_WAVEFORM(syncronizationRatioTo[0]));
|
||||||
|
|
||||||
for (int i = 0; i < s->getSize(); i++) {
|
for (int i = 0; i < s->getSize(); i++) {
|
||||||
scheduleMsg(logger, "event %d %.2f", i, s->eventAngles[i]);
|
scheduleMsg(logger, "event %d %.2f", i, s->eventAngles[i]);
|
||||||
|
@ -474,8 +474,8 @@ void printAllTriggers() {
|
||||||
engineConfiguration->trigger.type = tt;
|
engineConfiguration->trigger.type = tt;
|
||||||
engineConfiguration->ambiguousOperationMode = FOUR_STROKE_CAM_SENSOR;
|
engineConfiguration->ambiguousOperationMode = FOUR_STROKE_CAM_SENSOR;
|
||||||
|
|
||||||
TriggerShape *s = &engine->triggerCentral.triggerShape;
|
TriggerWaveform *s = &engine->triggerCentral.triggerShape;
|
||||||
engine->eInitializeTriggerShape(NULL PASS_ENGINE_PARAMETER_SUFFIX);
|
engine->initializeTriggerWaveform(NULL PASS_ENGINE_PARAMETER_SUFFIX);
|
||||||
|
|
||||||
if (s->shapeDefinitionError) {
|
if (s->shapeDefinitionError) {
|
||||||
printf("Trigger error %d\r\n", triggerId);
|
printf("Trigger error %d\r\n", triggerId);
|
||||||
|
@ -488,7 +488,7 @@ void printAllTriggers() {
|
||||||
|
|
||||||
for (int i = 0; i < s->getLength(); i++) {
|
for (int i = 0; i < s->getLength(); i++) {
|
||||||
|
|
||||||
int triggerDefinitionCoordinate = (s->getTriggerShapeSynchPointIndex() + i) % s->getSize();
|
int triggerDefinitionCoordinate = (s->getTriggerWaveformSynchPointIndex() + i) % s->getSize();
|
||||||
|
|
||||||
|
|
||||||
fprintf(fp, "event %d %d %.2f\n", i, s->triggerSignals[triggerDefinitionCoordinate], s->eventAngles[i]);
|
fprintf(fp, "event %d %d %.2f\n", i, s->triggerSignals[triggerDefinitionCoordinate], s->eventAngles[i]);
|
||||||
|
@ -546,7 +546,7 @@ extern int icuWidthPeriodCounter;
|
||||||
void triggerInfo(void) {
|
void triggerInfo(void) {
|
||||||
#if EFI_PROD_CODE || EFI_SIMULATOR
|
#if EFI_PROD_CODE || EFI_SIMULATOR
|
||||||
|
|
||||||
TriggerShape *ts = &engine->triggerCentral.triggerShape;
|
TriggerWaveform *ts = &engine->triggerCentral.triggerShape;
|
||||||
|
|
||||||
|
|
||||||
#if (HAL_TRIGGER_USE_PAL == TRUE) && (PAL_USE_CALLBACKS == TRUE)
|
#if (HAL_TRIGGER_USE_PAL == TRUE) && (PAL_USE_CALLBACKS == TRUE)
|
||||||
|
@ -562,8 +562,8 @@ void triggerInfo(void) {
|
||||||
scheduleMsg(logger, "Template %s (%d) trigger %s (%d) useRiseEdge=%s onlyFront=%s useOnlyFirstChannel=%s tdcOffset=%.2f",
|
scheduleMsg(logger, "Template %s (%d) trigger %s (%d) useRiseEdge=%s onlyFront=%s useOnlyFirstChannel=%s tdcOffset=%.2f",
|
||||||
getConfigurationName(engineConfiguration->engineType), engineConfiguration->engineType,
|
getConfigurationName(engineConfiguration->engineType), engineConfiguration->engineType,
|
||||||
getTrigger_type_e(engineConfiguration->trigger.type), engineConfiguration->trigger.type,
|
getTrigger_type_e(engineConfiguration->trigger.type), engineConfiguration->trigger.type,
|
||||||
boolToString(TRIGGER_SHAPE(useRiseEdge)), boolToString(engineConfiguration->useOnlyRisingEdgeForTrigger),
|
boolToString(TRIGGER_WAVEFORM(useRiseEdge)), boolToString(engineConfiguration->useOnlyRisingEdgeForTrigger),
|
||||||
boolToString(engineConfiguration->trigger.useOnlyFirstChannel), TRIGGER_SHAPE(tdcPosition));
|
boolToString(engineConfiguration->trigger.useOnlyFirstChannel), TRIGGER_WAVEFORM(tdcPosition));
|
||||||
|
|
||||||
if (engineConfiguration->trigger.type == TT_TOOTHED_WHEEL) {
|
if (engineConfiguration->trigger.type == TT_TOOTHED_WHEEL) {
|
||||||
scheduleMsg(logger, "total %d/skipped %d", engineConfiguration->trigger.customTotalToothCount,
|
scheduleMsg(logger, "total %d/skipped %d", engineConfiguration->trigger.customTotalToothCount,
|
||||||
|
@ -577,12 +577,12 @@ void triggerInfo(void) {
|
||||||
scheduleMsg(logger, "trigger#2 event counters up=%d/down=%d", engine->triggerCentral.getHwEventCounter(2),
|
scheduleMsg(logger, "trigger#2 event counters up=%d/down=%d", engine->triggerCentral.getHwEventCounter(2),
|
||||||
engine->triggerCentral.getHwEventCounter(3));
|
engine->triggerCentral.getHwEventCounter(3));
|
||||||
}
|
}
|
||||||
scheduleMsg(logger, "expected cycle events %d/%d/%d", TRIGGER_SHAPE(expectedEventCount[0]),
|
scheduleMsg(logger, "expected cycle events %d/%d/%d", TRIGGER_WAVEFORM(expectedEventCount[0]),
|
||||||
TRIGGER_SHAPE(expectedEventCount[1]), TRIGGER_SHAPE(expectedEventCount[2]));
|
TRIGGER_WAVEFORM(expectedEventCount[1]), TRIGGER_WAVEFORM(expectedEventCount[2]));
|
||||||
|
|
||||||
scheduleMsg(logger, "trigger type=%d/need2ndChannel=%s", engineConfiguration->trigger.type,
|
scheduleMsg(logger, "trigger type=%d/need2ndChannel=%s", engineConfiguration->trigger.type,
|
||||||
boolToString(TRIGGER_SHAPE(needSecondTriggerInput)));
|
boolToString(TRIGGER_WAVEFORM(needSecondTriggerInput)));
|
||||||
scheduleMsg(logger, "expected duty #0=%.2f/#1=%.2f", TRIGGER_SHAPE(expectedDutyCycle[0]), TRIGGER_SHAPE(expectedDutyCycle[1]));
|
scheduleMsg(logger, "expected duty #0=%.2f/#1=%.2f", TRIGGER_WAVEFORM(expectedDutyCycle[0]), TRIGGER_WAVEFORM(expectedDutyCycle[1]));
|
||||||
|
|
||||||
scheduleMsg(logger, "synchronizationNeeded=%s/isError=%s/total errors=%d ord_err=%d/total revolutions=%d/self=%s",
|
scheduleMsg(logger, "synchronizationNeeded=%s/isError=%s/total errors=%d ord_err=%d/total revolutions=%d/self=%s",
|
||||||
boolToString(ts->isSynchronizationNeeded),
|
boolToString(ts->isSynchronizationNeeded),
|
||||||
|
@ -590,8 +590,8 @@ void triggerInfo(void) {
|
||||||
engine->triggerCentral.triggerState.orderingErrorCounter, engine->triggerCentral.triggerState.getTotalRevolutionCounter(),
|
engine->triggerCentral.triggerState.orderingErrorCounter, engine->triggerCentral.triggerState.getTotalRevolutionCounter(),
|
||||||
boolToString(engineConfiguration->directSelfStimulation));
|
boolToString(engineConfiguration->directSelfStimulation));
|
||||||
|
|
||||||
if (TRIGGER_SHAPE(isSynchronizationNeeded)) {
|
if (TRIGGER_WAVEFORM(isSynchronizationNeeded)) {
|
||||||
scheduleMsg(logger, "gap from %.2f to %.2f", TRIGGER_SHAPE(syncronizationRatioFrom[0]), TRIGGER_SHAPE(syncronizationRatioTo[0]));
|
scheduleMsg(logger, "gap from %.2f to %.2f", TRIGGER_WAVEFORM(syncronizationRatioFrom[0]), TRIGGER_WAVEFORM(syncronizationRatioTo[0]));
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* EFI_PROD_CODE || EFI_SIMULATOR */
|
#endif /* EFI_PROD_CODE || EFI_SIMULATOR */
|
||||||
|
@ -699,7 +699,7 @@ void onConfigurationChangeTriggerCallback(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
|
||||||
assertEngineReference();
|
assertEngineReference();
|
||||||
|
|
||||||
#if EFI_ENGINE_CONTROL
|
#if EFI_ENGINE_CONTROL
|
||||||
ENGINE(eInitializeTriggerShape(logger PASS_ENGINE_PARAMETER_SUFFIX));
|
ENGINE(initializeTriggerWaveform(logger PASS_ENGINE_PARAMETER_SUFFIX));
|
||||||
engine->triggerCentral.resetAccumSignalData();
|
engine->triggerCentral.resetAccumSignalData();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,7 +41,7 @@ public:
|
||||||
*/
|
*/
|
||||||
efitick_t timeAtVirtualZeroNt = 0;
|
efitick_t timeAtVirtualZeroNt = 0;
|
||||||
|
|
||||||
TriggerShape triggerShape;
|
TriggerWaveform triggerShape;
|
||||||
|
|
||||||
efitick_t previousVvtCamTime = 0;
|
efitick_t previousVvtCamTime = 0;
|
||||||
efitick_t previousVvtCamDuration = 0;
|
efitick_t previousVvtCamDuration = 0;
|
||||||
|
|
|
@ -120,7 +120,7 @@ bool isTriggerDecoderError(void) {
|
||||||
return errorDetection.sum(6) > 4;
|
return errorDetection.sum(6) > 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
void calculateTriggerSynchPoint(TriggerShape *shape, TriggerState *state DECLARE_ENGINE_PARAMETER_SUFFIX) {
|
void calculateTriggerSynchPoint(TriggerWaveform *shape, TriggerState *state DECLARE_ENGINE_PARAMETER_SUFFIX) {
|
||||||
#if EFI_PROD_CODE
|
#if EFI_PROD_CODE
|
||||||
efiAssertVoid(CUSTOM_ERR_6642, getCurrentRemainingStack() > 256, "calc s");
|
efiAssertVoid(CUSTOM_ERR_6642, getCurrentRemainingStack() > 256, "calc s");
|
||||||
#endif
|
#endif
|
||||||
|
@ -132,7 +132,7 @@ void calculateTriggerSynchPoint(TriggerShape *shape, TriggerState *state DECLARE
|
||||||
engine->engineCycleEventCount = length;
|
engine->engineCycleEventCount = length;
|
||||||
efiAssertVoid(CUSTOM_SHAPE_LEN_ZERO, length > 0, "shapeLength=0");
|
efiAssertVoid(CUSTOM_SHAPE_LEN_ZERO, length > 0, "shapeLength=0");
|
||||||
if (length >= PWM_PHASE_MAX_COUNT) {
|
if (length >= PWM_PHASE_MAX_COUNT) {
|
||||||
warning(CUSTOM_ERR_TRIGGER_SHAPE_TOO_LONG, "Count above %d", length);
|
warning(CUSTOM_ERR_TRIGGER_WAVEFORM_TOO_LONG, "Count above %d", length);
|
||||||
shape->setShapeDefinitionError(true);
|
shape->setShapeDefinitionError(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -194,7 +194,7 @@ float TriggerStateWithRunningStatistics::calculateInstantRpm(int *prevIndexOut,
|
||||||
/**
|
/**
|
||||||
* Here we calculate RPM based on last 90 degrees
|
* Here we calculate RPM based on last 90 degrees
|
||||||
*/
|
*/
|
||||||
angle_t currentAngle = TRIGGER_SHAPE(eventAngles[current_index]);
|
angle_t currentAngle = TRIGGER_WAVEFORM(eventAngles[current_index]);
|
||||||
// todo: make this '90' depend on cylinder count or trigger shape?
|
// todo: make this '90' depend on cylinder count or trigger shape?
|
||||||
if (cisnan(currentAngle)) {
|
if (cisnan(currentAngle)) {
|
||||||
return NOISY_RPM;
|
return NOISY_RPM;
|
||||||
|
@ -202,14 +202,14 @@ float TriggerStateWithRunningStatistics::calculateInstantRpm(int *prevIndexOut,
|
||||||
angle_t previousAngle = currentAngle - 90;
|
angle_t previousAngle = currentAngle - 90;
|
||||||
fixAngle(previousAngle, "prevAngle", CUSTOM_ERR_TRIGGER_ANGLE_RANGE);
|
fixAngle(previousAngle, "prevAngle", CUSTOM_ERR_TRIGGER_ANGLE_RANGE);
|
||||||
// todo: prevIndex should be pre-calculated
|
// todo: prevIndex should be pre-calculated
|
||||||
int prevIndex = TRIGGER_SHAPE(triggerIndexByAngle[(int)previousAngle]);
|
int prevIndex = TRIGGER_WAVEFORM(triggerIndexByAngle[(int)previousAngle]);
|
||||||
|
|
||||||
if (prevIndexOut != NULL) {
|
if (prevIndexOut != NULL) {
|
||||||
*prevIndexOut = prevIndex;
|
*prevIndexOut = prevIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
// now let's get precise angle for that event
|
// now let's get precise angle for that event
|
||||||
angle_t prevIndexAngle = TRIGGER_SHAPE(eventAngles[prevIndex]);
|
angle_t prevIndexAngle = TRIGGER_WAVEFORM(eventAngles[prevIndex]);
|
||||||
efitick_t time90ago = timeOfLastEvent[prevIndex];
|
efitick_t time90ago = timeOfLastEvent[prevIndex];
|
||||||
if (time90ago == 0) {
|
if (time90ago == 0) {
|
||||||
return prevInstantRpmValue;
|
return prevInstantRpmValue;
|
||||||
|
@ -259,7 +259,7 @@ void TriggerStateWithRunningStatistics::runtimeStatistics(efitime_t nowNt DECLAR
|
||||||
instantRpm = calculateInstantRpm(&prevIndex, nowNt PASS_ENGINE_PARAMETER_SUFFIX);
|
instantRpm = calculateInstantRpm(&prevIndex, nowNt PASS_ENGINE_PARAMETER_SUFFIX);
|
||||||
|
|
||||||
#if EFI_SENSOR_CHART
|
#if EFI_SENSOR_CHART
|
||||||
angle_t currentAngle = TRIGGER_SHAPE(eventAngles[currentCycle.current_index]);
|
angle_t currentAngle = TRIGGER_WAVEFORM(eventAngles[currentCycle.current_index]);
|
||||||
if (CONFIGB(sensorChartMode) == SC_DETAILED_RPM) {
|
if (CONFIGB(sensorChartMode) == SC_DETAILED_RPM) {
|
||||||
scAddData(currentAngle, instantRpm);
|
scAddData(currentAngle, instantRpm);
|
||||||
} else {
|
} else {
|
||||||
|
@ -303,10 +303,10 @@ static trigger_value_e eventType[6] = { TV_FALL, TV_RISE, TV_FALL, TV_RISE, TV_F
|
||||||
PRINT_INC_INDEX; \
|
PRINT_INC_INDEX; \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define considerEventForGap() (!TRIGGER_SHAPE(useOnlyPrimaryForSync) || isPrimary)
|
#define considerEventForGap() (!TRIGGER_WAVEFORM(useOnlyPrimaryForSync) || isPrimary)
|
||||||
|
|
||||||
#define needToSkipFall(type) ((!TRIGGER_SHAPE(gapBothDirections)) && (( TRIGGER_SHAPE(useRiseEdge)) && (type != TV_RISE)))
|
#define needToSkipFall(type) ((!TRIGGER_WAVEFORM(gapBothDirections)) && (( TRIGGER_WAVEFORM(useRiseEdge)) && (type != TV_RISE)))
|
||||||
#define needToSkipRise(type) ((!TRIGGER_SHAPE(gapBothDirections)) && ((!TRIGGER_SHAPE(useRiseEdge)) && (type != TV_FALL)))
|
#define needToSkipRise(type) ((!TRIGGER_WAVEFORM(gapBothDirections)) && ((!TRIGGER_WAVEFORM(useRiseEdge)) && (type != TV_FALL)))
|
||||||
|
|
||||||
int TriggerState::getCurrentIndex() const {
|
int TriggerState::getCurrentIndex() const {
|
||||||
return currentCycle.current_index;
|
return currentCycle.current_index;
|
||||||
|
@ -338,16 +338,16 @@ void TriggerState::onSynchronizationLost(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TriggerState::validateEventCounters(DECLARE_ENGINE_PARAMETER_SIGNATURE) const {
|
bool TriggerState::validateEventCounters(DECLARE_ENGINE_PARAMETER_SIGNATURE) const {
|
||||||
bool isDecodingError = currentCycle.eventCount[0] != TRIGGER_SHAPE(expectedEventCount[0])
|
bool isDecodingError = currentCycle.eventCount[0] != TRIGGER_WAVEFORM(expectedEventCount[0])
|
||||||
|| currentCycle.eventCount[1] != TRIGGER_SHAPE(expectedEventCount[1])
|
|| currentCycle.eventCount[1] != TRIGGER_WAVEFORM(expectedEventCount[1])
|
||||||
|| currentCycle.eventCount[2] != TRIGGER_SHAPE(expectedEventCount[2]);
|
|| currentCycle.eventCount[2] != TRIGGER_WAVEFORM(expectedEventCount[2]);
|
||||||
|
|
||||||
#if EFI_UNIT_TEST
|
#if EFI_UNIT_TEST
|
||||||
printf("sync point: isDecodingError=%d\r\n", isDecodingError);
|
printf("sync point: isDecodingError=%d\r\n", isDecodingError);
|
||||||
if (isDecodingError) {
|
if (isDecodingError) {
|
||||||
printf("count: cur=%d exp=%d\r\n", currentCycle.eventCount[0], TRIGGER_SHAPE(expectedEventCount[0]));
|
printf("count: cur=%d exp=%d\r\n", currentCycle.eventCount[0], TRIGGER_WAVEFORM(expectedEventCount[0]));
|
||||||
printf("count: cur=%d exp=%d\r\n", currentCycle.eventCount[1], TRIGGER_SHAPE(expectedEventCount[1]));
|
printf("count: cur=%d exp=%d\r\n", currentCycle.eventCount[1], TRIGGER_WAVEFORM(expectedEventCount[1]));
|
||||||
printf("count: cur=%d exp=%d\r\n", currentCycle.eventCount[2], TRIGGER_SHAPE(expectedEventCount[2]));
|
printf("count: cur=%d exp=%d\r\n", currentCycle.eventCount[2], TRIGGER_WAVEFORM(expectedEventCount[2]));
|
||||||
}
|
}
|
||||||
#endif /* EFI_UNIT_TEST */
|
#endif /* EFI_UNIT_TEST */
|
||||||
|
|
||||||
|
@ -367,9 +367,9 @@ void TriggerState::handleTriggerError(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
|
||||||
currentCycle.eventCount[0],
|
currentCycle.eventCount[0],
|
||||||
currentCycle.eventCount[1],
|
currentCycle.eventCount[1],
|
||||||
currentCycle.eventCount[2],
|
currentCycle.eventCount[2],
|
||||||
TRIGGER_SHAPE(expectedEventCount[0]),
|
TRIGGER_WAVEFORM(expectedEventCount[0]),
|
||||||
TRIGGER_SHAPE(expectedEventCount[1]),
|
TRIGGER_WAVEFORM(expectedEventCount[1]),
|
||||||
TRIGGER_SHAPE(expectedEventCount[2]));
|
TRIGGER_WAVEFORM(expectedEventCount[2]));
|
||||||
lastDecodingErrorTime = getTimeNowNt();
|
lastDecodingErrorTime = getTimeNowNt();
|
||||||
someSortOfTriggerError = true;
|
someSortOfTriggerError = true;
|
||||||
|
|
||||||
|
@ -377,8 +377,8 @@ void TriggerState::handleTriggerError(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
|
||||||
if (CONFIG(verboseTriggerSynchDetails) || (someSortOfTriggerError && !CONFIG(silentTriggerError))) {
|
if (CONFIG(verboseTriggerSynchDetails) || (someSortOfTriggerError && !CONFIG(silentTriggerError))) {
|
||||||
#if EFI_PROD_CODE
|
#if EFI_PROD_CODE
|
||||||
scheduleMsg(logger, "error: synchronizationPoint @ index %d expected %d/%d/%d got %d/%d/%d",
|
scheduleMsg(logger, "error: synchronizationPoint @ index %d expected %d/%d/%d got %d/%d/%d",
|
||||||
currentCycle.current_index, TRIGGER_SHAPE(expectedEventCount[0]),
|
currentCycle.current_index, TRIGGER_WAVEFORM(expectedEventCount[0]),
|
||||||
TRIGGER_SHAPE(expectedEventCount[1]), TRIGGER_SHAPE(expectedEventCount[2]),
|
TRIGGER_WAVEFORM(expectedEventCount[1]), TRIGGER_WAVEFORM(expectedEventCount[2]),
|
||||||
currentCycle.eventCount[0], currentCycle.eventCount[1], currentCycle.eventCount[2]);
|
currentCycle.eventCount[0], currentCycle.eventCount[1], currentCycle.eventCount[2]);
|
||||||
#endif /* EFI_PROD_CODE */
|
#endif /* EFI_PROD_CODE */
|
||||||
}
|
}
|
||||||
|
@ -422,8 +422,8 @@ void TriggerState::decodeTriggerEvent(const TriggerStateCallback triggerCycleCal
|
||||||
ScopePerf perf(PE::DecodeTriggerEvent, static_cast<uint8_t>(signal));
|
ScopePerf perf(PE::DecodeTriggerEvent, static_cast<uint8_t>(signal));
|
||||||
|
|
||||||
bool useOnlyRisingEdgeForTrigger = CONFIG(useOnlyRisingEdgeForTrigger);
|
bool useOnlyRisingEdgeForTrigger = CONFIG(useOnlyRisingEdgeForTrigger);
|
||||||
// todo: use 'triggerShape' instead of TRIGGER_SHAPE in order to decouple this method from engine #635
|
// todo: use 'triggerShape' instead of TRIGGER_WAVEFORM in order to decouple this method from engine #635
|
||||||
TriggerShape *triggerShape = &ENGINE(triggerCentral.triggerShape);
|
TriggerWaveform *triggerShape = &ENGINE(triggerCentral.triggerShape);
|
||||||
|
|
||||||
efiAssertVoid(CUSTOM_ERR_6640, signal <= SHAFT_3RD_RISING, "unexpected signal");
|
efiAssertVoid(CUSTOM_ERR_6640, signal <= SHAFT_3RD_RISING, "unexpected signal");
|
||||||
|
|
||||||
|
@ -536,7 +536,7 @@ void TriggerState::decodeTriggerEvent(const TriggerStateCallback triggerCycleCal
|
||||||
|
|
||||||
bool isSync = true;
|
bool isSync = true;
|
||||||
for (int i = 0;i<GAP_TRACKING_LENGTH;i++) {
|
for (int i = 0;i<GAP_TRACKING_LENGTH;i++) {
|
||||||
bool isGapCondition = cisnan(triggerShape->syncronizationRatioFrom[i]) || (toothDurations[i] > toothDurations[i + 1] * TRIGGER_SHAPE(syncronizationRatioFrom[i])
|
bool isGapCondition = cisnan(triggerShape->syncronizationRatioFrom[i]) || (toothDurations[i] > toothDurations[i + 1] * TRIGGER_WAVEFORM(syncronizationRatioFrom[i])
|
||||||
&& toothDurations[i] < toothDurations[i + 1] * triggerShape->syncronizationRatioTo[i]);
|
&& toothDurations[i] < toothDurations[i + 1] * triggerShape->syncronizationRatioTo[i]);
|
||||||
|
|
||||||
isSync &= isGapCondition;
|
isSync &= isGapCondition;
|
||||||
|
@ -571,8 +571,8 @@ void TriggerState::decodeTriggerEvent(const TriggerStateCallback triggerCycleCal
|
||||||
/* cast is needed to make sure we do not put 64 bit value to stack*/ (int)getTimeNowSeconds(),
|
/* cast is needed to make sure we do not put 64 bit value to stack*/ (int)getTimeNowSeconds(),
|
||||||
i,
|
i,
|
||||||
gap,
|
gap,
|
||||||
TRIGGER_SHAPE(syncronizationRatioFrom[i]),
|
TRIGGER_WAVEFORM(syncronizationRatioFrom[i]),
|
||||||
TRIGGER_SHAPE(syncronizationRatioTo[i]),
|
TRIGGER_WAVEFORM(syncronizationRatioTo[i]),
|
||||||
boolToString(someSortOfTriggerError));
|
boolToString(someSortOfTriggerError));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -585,8 +585,8 @@ void TriggerState::decodeTriggerEvent(const TriggerStateCallback triggerCycleCal
|
||||||
print("index=%d: gap=%.2f expected from %.2f to %.2f error=%s\r\n",
|
print("index=%d: gap=%.2f expected from %.2f to %.2f error=%s\r\n",
|
||||||
i,
|
i,
|
||||||
gap,
|
gap,
|
||||||
TRIGGER_SHAPE(syncronizationRatioFrom[i]),
|
TRIGGER_WAVEFORM(syncronizationRatioFrom[i]),
|
||||||
TRIGGER_SHAPE(syncronizationRatioTo[i]),
|
TRIGGER_WAVEFORM(syncronizationRatioTo[i]),
|
||||||
boolToString(someSortOfTriggerError));
|
boolToString(someSortOfTriggerError));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -659,8 +659,8 @@ void TriggerState::decodeTriggerEvent(const TriggerStateCallback triggerCycleCal
|
||||||
|
|
||||||
if (isTriggerDecoderError()) {
|
if (isTriggerDecoderError()) {
|
||||||
warning(CUSTOM_OBD_TRG_DECODING, "trigger decoding issue. expected %d/%d/%d got %d/%d/%d",
|
warning(CUSTOM_OBD_TRG_DECODING, "trigger decoding issue. expected %d/%d/%d got %d/%d/%d",
|
||||||
TRIGGER_SHAPE(expectedEventCount[0]), TRIGGER_SHAPE(expectedEventCount[1]),
|
TRIGGER_WAVEFORM(expectedEventCount[0]), TRIGGER_WAVEFORM(expectedEventCount[1]),
|
||||||
TRIGGER_SHAPE(expectedEventCount[2]), currentCycle.eventCount[0], currentCycle.eventCount[1],
|
TRIGGER_WAVEFORM(expectedEventCount[2]), currentCycle.eventCount[0], currentCycle.eventCount[1],
|
||||||
currentCycle.eventCount[2]);
|
currentCycle.eventCount[2]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -711,9 +711,9 @@ static void onFindIndexCallback(TriggerState *state) {
|
||||||
* Trigger shape is defined in a way which is convenient for trigger shape definition
|
* 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.
|
* On the other hand, trigger decoder indexing begins from synchronization event.
|
||||||
*
|
*
|
||||||
* This function finds the index of synchronization event within TriggerShape
|
* This function finds the index of synchronization event within TriggerWaveform
|
||||||
*/
|
*/
|
||||||
uint32_t findTriggerZeroEventIndex(TriggerState *state, TriggerShape * shape,
|
uint32_t findTriggerZeroEventIndex(TriggerState *state, TriggerWaveform * shape,
|
||||||
trigger_config_s const*triggerConfig DECLARE_ENGINE_PARAMETER_SUFFIX) {
|
trigger_config_s const*triggerConfig DECLARE_ENGINE_PARAMETER_SUFFIX) {
|
||||||
UNUSED(triggerConfig);
|
UNUSED(triggerConfig);
|
||||||
#if EFI_PROD_CODE
|
#if EFI_PROD_CODE
|
||||||
|
|
|
@ -30,7 +30,7 @@ typedef struct {
|
||||||
/**
|
/**
|
||||||
* Number of actual events of each channel within current trigger cycle, these
|
* Number of actual events of each channel within current trigger cycle, these
|
||||||
* values are used to detect trigger signal errors.
|
* values are used to detect trigger signal errors.
|
||||||
* see TriggerShape
|
* see TriggerWaveform
|
||||||
*/
|
*/
|
||||||
uint32_t eventCount[PWM_PHASE_MAX_WAVE_PER_PWM];
|
uint32_t eventCount[PWM_PHASE_MAX_WAVE_PER_PWM];
|
||||||
/**
|
/**
|
||||||
|
@ -48,7 +48,7 @@ typedef struct {
|
||||||
} current_cycle_state_s;
|
} current_cycle_state_s;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see TriggerShape for trigger wheel shape definition
|
* @see TriggerWaveform for trigger wheel shape definition
|
||||||
*/
|
*/
|
||||||
class TriggerState : public trigger_state_s {
|
class TriggerState : public trigger_state_s {
|
||||||
public:
|
public:
|
||||||
|
@ -170,7 +170,7 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
angle_t getEngineCycle(operation_mode_e operationMode);
|
angle_t getEngineCycle(operation_mode_e operationMode);
|
||||||
uint32_t findTriggerZeroEventIndex(TriggerState *state, TriggerShape * shape, trigger_config_s const*triggerConfig DECLARE_ENGINE_PARAMETER_SUFFIX);
|
uint32_t findTriggerZeroEventIndex(TriggerState *state, TriggerWaveform * shape, trigger_config_s const*triggerConfig DECLARE_ENGINE_PARAMETER_SUFFIX);
|
||||||
|
|
||||||
class Engine;
|
class Engine;
|
||||||
|
|
||||||
|
@ -179,5 +179,5 @@ void initTriggerDecoderLogger(Logging *sharedLogger);
|
||||||
|
|
||||||
bool isTriggerDecoderError(void);
|
bool isTriggerDecoderError(void);
|
||||||
|
|
||||||
void calculateTriggerSynchPoint(TriggerShape *shape, TriggerState *state DECLARE_ENGINE_PARAMETER_SUFFIX);
|
void calculateTriggerSynchPoint(TriggerWaveform *shape, TriggerState *state DECLARE_ENGINE_PARAMETER_SUFFIX);
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* @file trigger_emulator_algo.cpp
|
* @file trigger_emulator_algo.cpp
|
||||||
*
|
*
|
||||||
* This file is about producing real electrical signals which emulate trigger signal based on
|
* This file is about producing real electrical signals which emulate trigger signal based on
|
||||||
* a known TriggerShape.
|
* a known TriggerWaveform.
|
||||||
*
|
*
|
||||||
* Historically this implementation was implemented based on PwmConfig which is maybe not the
|
* Historically this implementation was implemented based on PwmConfig which is maybe not the
|
||||||
* best way to implement it. (todo: why is not the best way?)
|
* best way to implement it. (todo: why is not the best way?)
|
||||||
|
@ -115,14 +115,14 @@ void setTriggerEmulatorRPM(int rpm DECLARE_ENGINE_PARAMETER_SUFFIX) {
|
||||||
scheduleMsg(logger, "Emulating position sensor(s). RPM=%d", rpm);
|
scheduleMsg(logger, "Emulating position sensor(s). RPM=%d", rpm);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void updateTriggerShapeIfNeeded(PwmConfig *state) {
|
static void updateTriggerWaveformIfNeeded(PwmConfig *state) {
|
||||||
if (atTriggerVersion < engine->triggerCentral.triggerShape.version) {
|
if (atTriggerVersion < engine->triggerCentral.triggerShape.version) {
|
||||||
atTriggerVersion = engine->triggerCentral.triggerShape.version;
|
atTriggerVersion = engine->triggerCentral.triggerShape.version;
|
||||||
scheduleMsg(logger, "Stimulator: updating trigger shape: %d/%d %d", atTriggerVersion,
|
scheduleMsg(logger, "Stimulator: updating trigger shape: %d/%d %d", atTriggerVersion,
|
||||||
engine->getGlobalConfigurationVersion(), currentTimeMillis());
|
engine->getGlobalConfigurationVersion(), currentTimeMillis());
|
||||||
|
|
||||||
|
|
||||||
TriggerShape *s = &engine->triggerCentral.triggerShape;
|
TriggerWaveform *s = &engine->triggerCentral.triggerShape;
|
||||||
pin_state_t *pinStates[PWM_PHASE_MAX_WAVE_PER_PWM] = {
|
pin_state_t *pinStates[PWM_PHASE_MAX_WAVE_PER_PWM] = {
|
||||||
s->wave.channels[0].pinStates,
|
s->wave.channels[0].pinStates,
|
||||||
s->wave.channels[1].pinStates,
|
s->wave.channels[1].pinStates,
|
||||||
|
@ -164,7 +164,7 @@ static void resumeStimulator() {
|
||||||
void initTriggerEmulatorLogic(Logging *sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX) {
|
void initTriggerEmulatorLogic(Logging *sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX) {
|
||||||
logger = sharedLogger;
|
logger = sharedLogger;
|
||||||
|
|
||||||
TriggerShape *s = &engine->triggerCentral.triggerShape;
|
TriggerWaveform *s = &engine->triggerCentral.triggerShape;
|
||||||
setTriggerEmulatorRPM(engineConfiguration->bc.triggerSimulatorFrequency PASS_ENGINE_PARAMETER_SUFFIX);
|
setTriggerEmulatorRPM(engineConfiguration->bc.triggerSimulatorFrequency PASS_ENGINE_PARAMETER_SUFFIX);
|
||||||
pin_state_t *pinStates[PWM_PHASE_MAX_WAVE_PER_PWM] = {
|
pin_state_t *pinStates[PWM_PHASE_MAX_WAVE_PER_PWM] = {
|
||||||
s->wave.channels[0].pinStates,
|
s->wave.channels[0].pinStates,
|
||||||
|
@ -173,7 +173,7 @@ void initTriggerEmulatorLogic(Logging *sharedLogger DECLARE_ENGINE_PARAMETER_SUF
|
||||||
triggerSignal.weComplexInit("position sensor",
|
triggerSignal.weComplexInit("position sensor",
|
||||||
&engine->executor,
|
&engine->executor,
|
||||||
s->getSize(), s->wave.switchTimes, PWM_PHASE_MAX_WAVE_PER_PWM,
|
s->getSize(), s->wave.switchTimes, PWM_PHASE_MAX_WAVE_PER_PWM,
|
||||||
pinStates, updateTriggerShapeIfNeeded, (pwm_gen_callback*)emulatorApplyPinState);
|
pinStates, updateTriggerWaveformIfNeeded, (pwm_gen_callback*)emulatorApplyPinState);
|
||||||
|
|
||||||
addConsoleActionI("rpm", setTriggerEmulatorRPM);
|
addConsoleActionI("rpm", setTriggerEmulatorRPM);
|
||||||
addConsoleActionI("stop_stimulator_at_index", setEmulatorAtIndex);
|
addConsoleActionI("stop_stimulator_at_index", setEmulatorAtIndex);
|
||||||
|
|
|
@ -27,7 +27,7 @@ extern bool printTriggerDebug;
|
||||||
#endif /* ! EFI_UNIT_TEST */
|
#endif /* ! EFI_UNIT_TEST */
|
||||||
|
|
||||||
void TriggerStimulatorHelper::feedSimulatedEvent(const TriggerStateCallback triggerCycleCallback,
|
void TriggerStimulatorHelper::feedSimulatedEvent(const TriggerStateCallback triggerCycleCallback,
|
||||||
TriggerState *state, TriggerShape * shape, int i
|
TriggerState *state, TriggerWaveform * shape, int i
|
||||||
DECLARE_ENGINE_PARAMETER_SUFFIX) {
|
DECLARE_ENGINE_PARAMETER_SUFFIX) {
|
||||||
efiAssertVoid(CUSTOM_ERR_6593, shape->getSize() > 0, "size not zero");
|
efiAssertVoid(CUSTOM_ERR_6593, shape->getSize() > 0, "size not zero");
|
||||||
int stateIndex = i % shape->getSize();
|
int stateIndex = i % shape->getSize();
|
||||||
|
@ -92,7 +92,7 @@ void TriggerStimulatorHelper::feedSimulatedEvent(const TriggerStateCallback trig
|
||||||
}
|
}
|
||||||
|
|
||||||
void TriggerStimulatorHelper::assertSyncPositionAndSetDutyCycle(const TriggerStateCallback triggerCycleCallback,
|
void TriggerStimulatorHelper::assertSyncPositionAndSetDutyCycle(const TriggerStateCallback triggerCycleCallback,
|
||||||
const uint32_t syncIndex, TriggerState *state, TriggerShape * shape
|
const uint32_t syncIndex, TriggerState *state, TriggerWaveform * shape
|
||||||
DECLARE_ENGINE_PARAMETER_SUFFIX) {
|
DECLARE_ENGINE_PARAMETER_SUFFIX) {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -103,7 +103,7 @@ void TriggerStimulatorHelper::assertSyncPositionAndSetDutyCycle(const TriggerSta
|
||||||
}
|
}
|
||||||
int revolutionCounter = state->getTotalRevolutionCounter();
|
int revolutionCounter = state->getTotalRevolutionCounter();
|
||||||
if (revolutionCounter != GAP_TRACKING_LENGTH + 1) {
|
if (revolutionCounter != GAP_TRACKING_LENGTH + 1) {
|
||||||
warning(CUSTOM_OBD_TRIGGER_SHAPE, "sync failed/wrong gap parameters trigger=%s rc=%d", getTrigger_type_e(engineConfiguration->trigger.type), revolutionCounter);
|
warning(CUSTOM_OBD_TRIGGER_WAVEFORM, "sync failed/wrong gap parameters trigger=%s rc=%d", getTrigger_type_e(engineConfiguration->trigger.type), revolutionCounter);
|
||||||
shape->setShapeDefinitionError(true);
|
shape->setShapeDefinitionError(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -117,7 +117,7 @@ void TriggerStimulatorHelper::assertSyncPositionAndSetDutyCycle(const TriggerSta
|
||||||
/**
|
/**
|
||||||
* @return trigger synchronization point index, or error code if not found
|
* @return trigger synchronization point index, or error code if not found
|
||||||
*/
|
*/
|
||||||
uint32_t TriggerStimulatorHelper::findTriggerSyncPoint(TriggerShape * shape,
|
uint32_t TriggerStimulatorHelper::findTriggerSyncPoint(TriggerWaveform * shape,
|
||||||
TriggerState *state DECLARE_ENGINE_PARAMETER_SUFFIX) {
|
TriggerState *state DECLARE_ENGINE_PARAMETER_SUFFIX) {
|
||||||
for (int i = 0; i < 4 * PWM_PHASE_MAX_COUNT; i++) {
|
for (int i = 0; i < 4 * PWM_PHASE_MAX_COUNT; i++) {
|
||||||
feedSimulatedEvent(nullptr, state, shape, i PASS_ENGINE_PARAMETER_SUFFIX);
|
feedSimulatedEvent(nullptr, state, shape, i PASS_ENGINE_PARAMETER_SUFFIX);
|
||||||
|
|
|
@ -13,16 +13,16 @@
|
||||||
class TriggerStimulatorHelper {
|
class TriggerStimulatorHelper {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
uint32_t findTriggerSyncPoint(TriggerShape * shape,
|
uint32_t findTriggerSyncPoint(TriggerWaveform * shape,
|
||||||
TriggerState *state DECLARE_ENGINE_PARAMETER_SUFFIX);
|
TriggerState *state DECLARE_ENGINE_PARAMETER_SUFFIX);
|
||||||
|
|
||||||
void assertSyncPositionAndSetDutyCycle(const TriggerStateCallback triggerCycleCallback,
|
void assertSyncPositionAndSetDutyCycle(const TriggerStateCallback triggerCycleCallback,
|
||||||
const uint32_t index, TriggerState *state, TriggerShape * shape
|
const uint32_t index, TriggerState *state, TriggerWaveform * shape
|
||||||
DECLARE_ENGINE_PARAMETER_SUFFIX);
|
DECLARE_ENGINE_PARAMETER_SUFFIX);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// send next event so that we can see how state reacts
|
// send next event so that we can see how state reacts
|
||||||
void feedSimulatedEvent(const TriggerStateCallback triggerCycleCallback, TriggerState *state, TriggerShape * shape, int i DECLARE_ENGINE_PARAMETER_SUFFIX);
|
void feedSimulatedEvent(const TriggerStateCallback triggerCycleCallback, TriggerState *state, TriggerWaveform * shape, int i DECLARE_ENGINE_PARAMETER_SUFFIX);
|
||||||
};
|
};
|
||||||
|
|
||||||
bool isUsefulSignal(trigger_event_e signal DECLARE_ENGINE_PARAMETER_SUFFIX);
|
bool isUsefulSignal(trigger_event_e signal DECLARE_ENGINE_PARAMETER_SUFFIX);
|
||||||
|
|
|
@ -57,7 +57,7 @@ static void setHysteresis(COMPDriver *comp, int sign) {
|
||||||
static void comp_shaft_callback(COMPDriver *comp) {
|
static void comp_shaft_callback(COMPDriver *comp) {
|
||||||
uint32_t status = comp_lld_get_status(comp);
|
uint32_t status = comp_lld_get_status(comp);
|
||||||
int isPrimary = (comp == EFI_COMP_PRIMARY_DEVICE);
|
int isPrimary = (comp == EFI_COMP_PRIMARY_DEVICE);
|
||||||
if (!isPrimary && !TRIGGER_SHAPE(needSecondTriggerInput)) {
|
if (!isPrimary && !TRIGGER_WAVEFORM(needSecondTriggerInput)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
trigger_event_e signal;
|
trigger_event_e signal;
|
||||||
|
|
|
@ -32,7 +32,7 @@ static void shaft_callback(void *arg) {
|
||||||
return;
|
return;
|
||||||
|
|
||||||
bool isPrimary = pal_line == primary_line;
|
bool isPrimary = pal_line == primary_line;
|
||||||
if (!isPrimary && !TRIGGER_SHAPE(needSecondTriggerInput)) {
|
if (!isPrimary && !TRIGGER_WAVEFORM(needSecondTriggerInput)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -51,7 +51,7 @@ static void shaftWidthCallback(bool isPrimary) {
|
||||||
// todo: start using real event time from HW event, not just software timer?
|
// todo: start using real event time from HW event, not just software timer?
|
||||||
if (hasFirmwareErrorFlag)
|
if (hasFirmwareErrorFlag)
|
||||||
return;
|
return;
|
||||||
if (!isPrimary && !TRIGGER_SHAPE(needSecondTriggerInput)) {
|
if (!isPrimary && !TRIGGER_WAVEFORM(needSecondTriggerInput)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// icucnt_t last_width = icuGetWidth(icup); so far we are fine with system time
|
// icucnt_t last_width = icuGetWidth(icup); so far we are fine with system time
|
||||||
|
@ -68,7 +68,7 @@ static void shaftPeriodCallback(bool isPrimary) {
|
||||||
icuWidthPeriodCounter++;
|
icuWidthPeriodCounter++;
|
||||||
if (hasFirmwareErrorFlag)
|
if (hasFirmwareErrorFlag)
|
||||||
return;
|
return;
|
||||||
if (!isPrimary && !TRIGGER_SHAPE(needSecondTriggerInput)) {
|
if (!isPrimary && !TRIGGER_WAVEFORM(needSecondTriggerInput)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -75,7 +75,7 @@ EngineTestHelper::EngineTestHelper(engine_type_e engineType, configuration_callb
|
||||||
//todo: reuse initPeriodicEvents(PASS_ENGINE_PARAMETER_SIGNATURE) method
|
//todo: reuse initPeriodicEvents(PASS_ENGINE_PARAMETER_SIGNATURE) method
|
||||||
engine->periodicSlowCallback(PASS_ENGINE_PARAMETER_SIGNATURE);
|
engine->periodicSlowCallback(PASS_ENGINE_PARAMETER_SIGNATURE);
|
||||||
|
|
||||||
engine->eInitializeTriggerShape(NULL PASS_ENGINE_PARAMETER_SUFFIX);
|
engine->initializeTriggerWaveform(NULL PASS_ENGINE_PARAMETER_SUFFIX);
|
||||||
initRpmCalculator(NULL PASS_ENGINE_PARAMETER_SUFFIX);
|
initRpmCalculator(NULL PASS_ENGINE_PARAMETER_SUFFIX);
|
||||||
initMainEventListener(NULL PASS_ENGINE_PARAMETER_SUFFIX);
|
initMainEventListener(NULL PASS_ENGINE_PARAMETER_SUFFIX);
|
||||||
}
|
}
|
||||||
|
@ -214,11 +214,11 @@ void EngineTestHelper::assertEvent(const char *msg, int index, void *callback, e
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EngineTestHelper::applyTriggerShape() {
|
void EngineTestHelper::applyTriggerWaveform() {
|
||||||
Engine *engine = &this->engine;
|
Engine *engine = &this->engine;
|
||||||
EXPAND_Engine
|
EXPAND_Engine
|
||||||
|
|
||||||
ENGINE(eInitializeTriggerShape(NULL PASS_ENGINE_PARAMETER_SUFFIX));
|
ENGINE(initializeTriggerWaveform(NULL PASS_ENGINE_PARAMETER_SUFFIX));
|
||||||
|
|
||||||
incrementGlobalConfigurationVersion(PASS_ENGINE_PARAMETER_SIGNATURE);
|
incrementGlobalConfigurationVersion(PASS_ENGINE_PARAMETER_SIGNATURE);
|
||||||
}
|
}
|
||||||
|
@ -261,7 +261,7 @@ void EngineTestHelper::setTriggerType(trigger_type_e trigger DECLARE_ENGINE_PARA
|
||||||
engineConfiguration->trigger.type = trigger;
|
engineConfiguration->trigger.type = trigger;
|
||||||
incrementGlobalConfigurationVersion(PASS_ENGINE_PARAMETER_SIGNATURE);
|
incrementGlobalConfigurationVersion(PASS_ENGINE_PARAMETER_SIGNATURE);
|
||||||
ASSERT_EQ( 1, isTriggerConfigChanged(PASS_ENGINE_PARAMETER_SIGNATURE)) << "trigger #2";
|
ASSERT_EQ( 1, isTriggerConfigChanged(PASS_ENGINE_PARAMETER_SIGNATURE)) << "trigger #2";
|
||||||
applyTriggerShape();
|
applyTriggerWaveform();
|
||||||
}
|
}
|
||||||
|
|
||||||
void setupSimpleTestEngineWithMafAndTT_ONE_trigger(EngineTestHelper *eth, injection_mode_e injectionMode) {
|
void setupSimpleTestEngineWithMafAndTT_ONE_trigger(EngineTestHelper *eth, injection_mode_e injectionMode) {
|
||||||
|
|
|
@ -28,7 +28,7 @@ class EngineTestHelper : public EngineTestHelperBase {
|
||||||
public:
|
public:
|
||||||
EngineTestHelper(engine_type_e engineType);
|
EngineTestHelper(engine_type_e engineType);
|
||||||
EngineTestHelper(engine_type_e engineType, configuration_callback_t boardCallback);
|
EngineTestHelper(engine_type_e engineType, configuration_callback_t boardCallback);
|
||||||
void applyTriggerShape();
|
void applyTriggerWaveform();
|
||||||
void setTriggerType(trigger_type_e trigger DECLARE_ENGINE_PARAMETER_SUFFIX);
|
void setTriggerType(trigger_type_e trigger DECLARE_ENGINE_PARAMETER_SUFFIX);
|
||||||
void fireRise(float delayMs);
|
void fireRise(float delayMs);
|
||||||
void fireFall(float delayMs);
|
void fireFall(float delayMs);
|
||||||
|
|
|
@ -114,7 +114,7 @@ TEST(misc, testFuelMap) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void confgiureFordAspireTriggerShape(TriggerShape * s) {
|
static void confgiureFordAspireTriggerWaveform(TriggerWaveform * s) {
|
||||||
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
|
||||||
|
|
||||||
s->addEvent720(53.747, T_SECONDARY, TV_RISE);
|
s->addEvent720(53.747, T_SECONDARY, TV_RISE);
|
||||||
|
@ -163,52 +163,52 @@ TEST(misc, testAngleResolver) {
|
||||||
|
|
||||||
engineConfiguration->globalTriggerAngleOffset = 175;
|
engineConfiguration->globalTriggerAngleOffset = 175;
|
||||||
|
|
||||||
TriggerShape * ts = &engine->triggerCentral.triggerShape;
|
TriggerWaveform * ts = &engine->triggerCentral.triggerShape;
|
||||||
engine->eInitializeTriggerShape(NULL PASS_ENGINE_PARAMETER_SUFFIX);
|
engine->initializeTriggerWaveform(NULL PASS_ENGINE_PARAMETER_SUFFIX);
|
||||||
|
|
||||||
assertEqualsM("index 2", 52.76, ts->eventAngles[3]); // this angle is relation to synch point
|
assertEqualsM("index 2", 52.76, ts->eventAngles[3]); // this angle is relation to synch point
|
||||||
assertEqualsM("time 2", 0.3233, ts->wave.getSwitchTime(2));
|
assertEqualsM("time 2", 0.3233, ts->wave.getSwitchTime(2));
|
||||||
assertEqualsM("index 5", 412.76, ts->eventAngles[6]);
|
assertEqualsM("index 5", 412.76, ts->eventAngles[6]);
|
||||||
assertEqualsM("time 5", 0.5733, ts->wave.getSwitchTime(5));
|
assertEqualsM("time 5", 0.5733, ts->wave.getSwitchTime(5));
|
||||||
|
|
||||||
ASSERT_EQ(4, ts->getTriggerShapeSynchPointIndex());
|
ASSERT_EQ(4, ts->getTriggerWaveformSynchPointIndex());
|
||||||
|
|
||||||
ASSERT_EQ( 10, ts->getSize()) << "shape size";
|
ASSERT_EQ( 10, ts->getSize()) << "shape size";
|
||||||
|
|
||||||
event_trigger_position_s injectionStart;
|
event_trigger_position_s injectionStart;
|
||||||
|
|
||||||
printf("*************************************************** testAngleResolver 0\r\n");
|
printf("*************************************************** testAngleResolver 0\r\n");
|
||||||
TRIGGER_SHAPE(findTriggerPosition(&injectionStart, -122, engineConfiguration->globalTriggerAngleOffset));
|
TRIGGER_WAVEFORM(findTriggerPosition(&injectionStart, -122, engineConfiguration->globalTriggerAngleOffset));
|
||||||
ASSERT_EQ( 2, injectionStart.triggerEventIndex) << "eventIndex@0";
|
ASSERT_EQ( 2, injectionStart.triggerEventIndex) << "eventIndex@0";
|
||||||
ASSERT_NEAR(0.24, injectionStart.angleOffsetFromTriggerEvent, EPS5D);
|
ASSERT_NEAR(0.24, injectionStart.angleOffsetFromTriggerEvent, EPS5D);
|
||||||
|
|
||||||
printf("*************************************************** testAngleResolver 0.1\r\n");
|
printf("*************************************************** testAngleResolver 0.1\r\n");
|
||||||
TRIGGER_SHAPE(findTriggerPosition(&injectionStart, -80, engineConfiguration->globalTriggerAngleOffset));
|
TRIGGER_WAVEFORM(findTriggerPosition(&injectionStart, -80, engineConfiguration->globalTriggerAngleOffset));
|
||||||
ASSERT_EQ( 2, injectionStart.triggerEventIndex) << "eventIndex@0";
|
ASSERT_EQ( 2, injectionStart.triggerEventIndex) << "eventIndex@0";
|
||||||
ASSERT_FLOAT_EQ(42.24, injectionStart.angleOffsetFromTriggerEvent);
|
ASSERT_FLOAT_EQ(42.24, injectionStart.angleOffsetFromTriggerEvent);
|
||||||
|
|
||||||
printf("*************************************************** testAngleResolver 0.2\r\n");
|
printf("*************************************************** testAngleResolver 0.2\r\n");
|
||||||
TRIGGER_SHAPE(findTriggerPosition(&injectionStart, -54, engineConfiguration->globalTriggerAngleOffset));
|
TRIGGER_WAVEFORM(findTriggerPosition(&injectionStart, -54, engineConfiguration->globalTriggerAngleOffset));
|
||||||
ASSERT_EQ( 2, injectionStart.triggerEventIndex) << "eventIndex@0";
|
ASSERT_EQ( 2, injectionStart.triggerEventIndex) << "eventIndex@0";
|
||||||
ASSERT_FLOAT_EQ(68.2400, injectionStart.angleOffsetFromTriggerEvent);
|
ASSERT_FLOAT_EQ(68.2400, injectionStart.angleOffsetFromTriggerEvent);
|
||||||
|
|
||||||
printf("*************************************************** testAngleResolver 0.3\r\n");
|
printf("*************************************************** testAngleResolver 0.3\r\n");
|
||||||
TRIGGER_SHAPE(findTriggerPosition(&injectionStart, -53, engineConfiguration->globalTriggerAngleOffset));
|
TRIGGER_WAVEFORM(findTriggerPosition(&injectionStart, -53, engineConfiguration->globalTriggerAngleOffset));
|
||||||
ASSERT_EQ(2, injectionStart.triggerEventIndex);
|
ASSERT_EQ(2, injectionStart.triggerEventIndex);
|
||||||
ASSERT_FLOAT_EQ(69.24, injectionStart.angleOffsetFromTriggerEvent);
|
ASSERT_FLOAT_EQ(69.24, injectionStart.angleOffsetFromTriggerEvent);
|
||||||
|
|
||||||
printf("*************************************************** testAngleResolver 1\r\n");
|
printf("*************************************************** testAngleResolver 1\r\n");
|
||||||
TRIGGER_SHAPE(findTriggerPosition(&injectionStart, 0, engineConfiguration->globalTriggerAngleOffset));
|
TRIGGER_WAVEFORM(findTriggerPosition(&injectionStart, 0, engineConfiguration->globalTriggerAngleOffset));
|
||||||
ASSERT_EQ(2, injectionStart.triggerEventIndex);
|
ASSERT_EQ(2, injectionStart.triggerEventIndex);
|
||||||
ASSERT_FLOAT_EQ(122.24, injectionStart.angleOffsetFromTriggerEvent);
|
ASSERT_FLOAT_EQ(122.24, injectionStart.angleOffsetFromTriggerEvent);
|
||||||
|
|
||||||
printf("*************************************************** testAngleResolver 2\r\n");
|
printf("*************************************************** testAngleResolver 2\r\n");
|
||||||
TRIGGER_SHAPE(findTriggerPosition(&injectionStart, 56, engineConfiguration->globalTriggerAngleOffset));
|
TRIGGER_WAVEFORM(findTriggerPosition(&injectionStart, 56, engineConfiguration->globalTriggerAngleOffset));
|
||||||
ASSERT_EQ(2, injectionStart.triggerEventIndex);
|
ASSERT_EQ(2, injectionStart.triggerEventIndex);
|
||||||
ASSERT_FLOAT_EQ(178.24, injectionStart.angleOffsetFromTriggerEvent);
|
ASSERT_FLOAT_EQ(178.24, injectionStart.angleOffsetFromTriggerEvent);
|
||||||
|
|
||||||
TriggerShape t;
|
TriggerWaveform t;
|
||||||
confgiureFordAspireTriggerShape(&t);
|
confgiureFordAspireTriggerWaveform(&t);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(misc, testPinHelper) {
|
TEST(misc, testPinHelper) {
|
||||||
|
|
|
@ -13,7 +13,7 @@ TEST(big, testSpeedDensity) {
|
||||||
WITH_ENGINE_TEST_HELPER(FORD_INLINE_6_1995);
|
WITH_ENGINE_TEST_HELPER(FORD_INLINE_6_1995);
|
||||||
|
|
||||||
engineConfiguration->trigger.customTotalToothCount = 8;
|
engineConfiguration->trigger.customTotalToothCount = 8;
|
||||||
eth.applyTriggerShape();
|
eth.applyTriggerWaveform();
|
||||||
|
|
||||||
eth.fireTriggerEvents(36);
|
eth.fireTriggerEvents(36);
|
||||||
ASSERT_EQ( 1500, GET_RPM()) << "RPM";
|
ASSERT_EQ( 1500, GET_RPM()) << "RPM";
|
||||||
|
|
|
@ -49,7 +49,7 @@ static int getTriggerZeroEventIndex(engine_type_e engineType) {
|
||||||
|
|
||||||
initDataStructures(PASS_ENGINE_PARAMETER_SIGNATURE);
|
initDataStructures(PASS_ENGINE_PARAMETER_SIGNATURE);
|
||||||
|
|
||||||
TriggerShape * shape = ð.engine.triggerCentral.triggerShape;
|
TriggerWaveform * shape = ð.engine.triggerCentral.triggerShape;
|
||||||
return findTriggerZeroEventIndex(ð.engine.triggerCentral.triggerState, shape, &engineConfiguration->trigger PASS_ENGINE_PARAMETER_SUFFIX);
|
return findTriggerZeroEventIndex(ð.engine.triggerCentral.triggerState, shape, &engineConfiguration->trigger PASS_ENGINE_PARAMETER_SUFFIX);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,8 +60,8 @@ static void testDodgeNeonDecoder(void) {
|
||||||
|
|
||||||
WITH_ENGINE_TEST_HELPER(DODGE_NEON_1995);
|
WITH_ENGINE_TEST_HELPER(DODGE_NEON_1995);
|
||||||
|
|
||||||
TriggerShape * shape = ð.engine.triggerCentral.triggerShape;
|
TriggerWaveform * shape = ð.engine.triggerCentral.triggerShape;
|
||||||
ASSERT_EQ(8, shape->getTriggerShapeSynchPointIndex());
|
ASSERT_EQ(8, shape->getTriggerWaveformSynchPointIndex());
|
||||||
|
|
||||||
TriggerState state;
|
TriggerState state;
|
||||||
|
|
||||||
|
@ -151,22 +151,22 @@ TEST(misc, test1995FordInline6TriggerDecoder) {
|
||||||
|
|
||||||
WITH_ENGINE_TEST_HELPER(FORD_INLINE_6_1995);
|
WITH_ENGINE_TEST_HELPER(FORD_INLINE_6_1995);
|
||||||
|
|
||||||
TriggerShape * shape = &engine->triggerCentral.triggerShape;
|
TriggerWaveform * shape = &engine->triggerCentral.triggerShape;
|
||||||
|
|
||||||
ASSERT_EQ( 0, shape->getTriggerShapeSynchPointIndex()) << "triggerShapeSynchPointIndex";
|
ASSERT_EQ( 0, shape->getTriggerWaveformSynchPointIndex()) << "triggerShapeSynchPointIndex";
|
||||||
|
|
||||||
event_trigger_position_s position;
|
event_trigger_position_s position;
|
||||||
ASSERT_EQ( 0, engineConfiguration->globalTriggerAngleOffset) << "globalTriggerAngleOffset";
|
ASSERT_EQ( 0, engineConfiguration->globalTriggerAngleOffset) << "globalTriggerAngleOffset";
|
||||||
TRIGGER_SHAPE(findTriggerPosition(&position, 0, engineConfiguration->globalTriggerAngleOffset));
|
TRIGGER_WAVEFORM(findTriggerPosition(&position, 0, engineConfiguration->globalTriggerAngleOffset));
|
||||||
assertTriggerPosition(&position, 0, 0);
|
assertTriggerPosition(&position, 0, 0);
|
||||||
|
|
||||||
TRIGGER_SHAPE(findTriggerPosition(&position, 200, engineConfiguration->globalTriggerAngleOffset));
|
TRIGGER_WAVEFORM(findTriggerPosition(&position, 200, engineConfiguration->globalTriggerAngleOffset));
|
||||||
assertTriggerPosition(&position, 3, 20);
|
assertTriggerPosition(&position, 3, 20);
|
||||||
|
|
||||||
TRIGGER_SHAPE(findTriggerPosition(&position, 360, engineConfiguration->globalTriggerAngleOffset));
|
TRIGGER_WAVEFORM(findTriggerPosition(&position, 360, engineConfiguration->globalTriggerAngleOffset));
|
||||||
assertTriggerPosition(&position, 6, 0);
|
assertTriggerPosition(&position, 6, 0);
|
||||||
|
|
||||||
eth.applyTriggerShape();
|
eth.applyTriggerWaveform();
|
||||||
|
|
||||||
engine->periodicFastCallback(PASS_ENGINE_PARAMETER_SIGNATURE);
|
engine->periodicFastCallback(PASS_ENGINE_PARAMETER_SIGNATURE);
|
||||||
eth.fireTriggerEvents(48);
|
eth.fireTriggerEvents(48);
|
||||||
|
@ -203,7 +203,7 @@ TEST(misc, testFordAspire) {
|
||||||
|
|
||||||
WITH_ENGINE_TEST_HELPER(FORD_ASPIRE_1996);
|
WITH_ENGINE_TEST_HELPER(FORD_ASPIRE_1996);
|
||||||
|
|
||||||
ASSERT_EQ( 4, TRIGGER_SHAPE(getTriggerShapeSynchPointIndex())) << "getTriggerShapeSynchPointIndex";
|
ASSERT_EQ( 4, TRIGGER_WAVEFORM(getTriggerWaveformSynchPointIndex())) << "getTriggerWaveformSynchPointIndex";
|
||||||
|
|
||||||
ASSERT_EQ(800, config->fuelRpmBins[0]);
|
ASSERT_EQ(800, config->fuelRpmBins[0]);
|
||||||
ASSERT_EQ(7000, config->fuelRpmBins[15]);
|
ASSERT_EQ(7000, config->fuelRpmBins[15]);
|
||||||
|
@ -228,11 +228,11 @@ static void testTriggerDecoder2(const char *msg, engine_type_e type, int synchPo
|
||||||
|
|
||||||
WITH_ENGINE_TEST_HELPER(type);
|
WITH_ENGINE_TEST_HELPER(type);
|
||||||
|
|
||||||
TriggerShape *t = &ENGINE(triggerCentral.triggerShape);
|
TriggerWaveform *t = &ENGINE(triggerCentral.triggerShape);
|
||||||
|
|
||||||
ASSERT_FALSE(t->shapeDefinitionError) << "isError";
|
ASSERT_FALSE(t->shapeDefinitionError) << "isError";
|
||||||
|
|
||||||
assertEqualsM("synchPointIndex", synchPointIndex, t->getTriggerShapeSynchPointIndex());
|
assertEqualsM("synchPointIndex", synchPointIndex, t->getTriggerWaveformSynchPointIndex());
|
||||||
|
|
||||||
ASSERT_NEAR(channel1duty, t->expectedDutyCycle[0], 0.0001) << msg << " channel1duty";
|
ASSERT_NEAR(channel1duty, t->expectedDutyCycle[0], 0.0001) << msg << " channel1duty";
|
||||||
ASSERT_NEAR(channel2duty, t->expectedDutyCycle[1], 0.0001) << msg << " channel2duty";
|
ASSERT_NEAR(channel2duty, t->expectedDutyCycle[1], 0.0001) << msg << " channel2duty";
|
||||||
|
@ -307,7 +307,7 @@ TEST(misc, testRpmCalculator) {
|
||||||
|
|
||||||
engineConfiguration->trigger.customTotalToothCount = 8;
|
engineConfiguration->trigger.customTotalToothCount = 8;
|
||||||
engineConfiguration->globalFuelCorrection = 3;
|
engineConfiguration->globalFuelCorrection = 3;
|
||||||
eth.applyTriggerShape();
|
eth.applyTriggerWaveform();
|
||||||
|
|
||||||
setFlatInjectorLag(0 PASS_CONFIG_PARAMETER_SUFFIX);
|
setFlatInjectorLag(0 PASS_CONFIG_PARAMETER_SUFFIX);
|
||||||
|
|
||||||
|
@ -318,8 +318,8 @@ TEST(misc, testRpmCalculator) {
|
||||||
ASSERT_EQ(0, GET_RPM());
|
ASSERT_EQ(0, GET_RPM());
|
||||||
|
|
||||||
// triggerIndexByAngle update is now fixed! prepareOutputSignals() wasn't reliably called
|
// triggerIndexByAngle update is now fixed! prepareOutputSignals() wasn't reliably called
|
||||||
ASSERT_EQ(5, TRIGGER_SHAPE(triggerIndexByAngle[240]));
|
ASSERT_EQ(5, TRIGGER_WAVEFORM(triggerIndexByAngle[240]));
|
||||||
ASSERT_EQ(5, TRIGGER_SHAPE(triggerIndexByAngle[241]));
|
ASSERT_EQ(5, TRIGGER_WAVEFORM(triggerIndexByAngle[241]));
|
||||||
|
|
||||||
eth.fireTriggerEvents(/* count */ 48);
|
eth.fireTriggerEvents(/* count */ 48);
|
||||||
|
|
||||||
|
@ -382,8 +382,8 @@ TEST(misc, testRpmCalculator) {
|
||||||
assertEqualsM("3/3", start + 14777, engine->executor.getForUnitTest(2)->momentX);
|
assertEqualsM("3/3", start + 14777, engine->executor.getForUnitTest(2)->momentX);
|
||||||
engine->executor.clear();
|
engine->executor.clear();
|
||||||
|
|
||||||
ASSERT_EQ(5, TRIGGER_SHAPE(triggerIndexByAngle[240]));
|
ASSERT_EQ(5, TRIGGER_WAVEFORM(triggerIndexByAngle[240]));
|
||||||
ASSERT_EQ(5, TRIGGER_SHAPE(triggerIndexByAngle[241]));
|
ASSERT_EQ(5, TRIGGER_WAVEFORM(triggerIndexByAngle[241]));
|
||||||
|
|
||||||
|
|
||||||
eth.fireFall(5);
|
eth.fireFall(5);
|
||||||
|
@ -448,7 +448,7 @@ TEST(misc, testTriggerDecoder) {
|
||||||
|
|
||||||
persistent_config_s c;
|
persistent_config_s c;
|
||||||
Engine e(&c);
|
Engine e(&c);
|
||||||
TriggerShape * s = &e.triggerCentral.triggerShape;
|
TriggerWaveform * s = &e.triggerCentral.triggerShape;
|
||||||
|
|
||||||
|
|
||||||
persistent_config_s *config = &c;
|
persistent_config_s *config = &c;
|
||||||
|
@ -457,7 +457,7 @@ TEST(misc, testTriggerDecoder) {
|
||||||
engine_configuration_s *engineConfiguration = &c.engineConfiguration;
|
engine_configuration_s *engineConfiguration = &c.engineConfiguration;
|
||||||
board_configuration_s *boardConfiguration = &c.engineConfiguration.bc;
|
board_configuration_s *boardConfiguration = &c.engineConfiguration.bc;
|
||||||
|
|
||||||
initializeSkippedToothTriggerShapeExt(s, 2, 0, FOUR_STROKE_CAM_SENSOR);
|
initializeSkippedToothTriggerWaveformExt(s, 2, 0, FOUR_STROKE_CAM_SENSOR);
|
||||||
assertEqualsM("shape size", s->getSize(), 4);
|
assertEqualsM("shape size", s->getSize(), 4);
|
||||||
ASSERT_EQ(s->wave.switchTimes[0], 0.25);
|
ASSERT_EQ(s->wave.switchTimes[0], 0.25);
|
||||||
ASSERT_EQ(s->wave.switchTimes[1], 0.5);
|
ASSERT_EQ(s->wave.switchTimes[1], 0.5);
|
||||||
|
@ -507,7 +507,7 @@ TEST(misc, testTriggerDecoder) {
|
||||||
WITH_ENGINE_TEST_HELPER(MITSU_4G93);
|
WITH_ENGINE_TEST_HELPER(MITSU_4G93);
|
||||||
|
|
||||||
|
|
||||||
// TriggerShape *t = ð.engine.triggerShape;
|
// TriggerWaveform *t = ð.engine.triggerShape;
|
||||||
// ASSERT_EQ(1, t->eventAngles[1]);
|
// ASSERT_EQ(1, t->eventAngles[1]);
|
||||||
// ASSERT_EQ( 0, t->triggerIndexByAngle[56]) << "index at 0";
|
// ASSERT_EQ( 0, t->triggerIndexByAngle[56]) << "index at 0";
|
||||||
// ASSERT_EQ( 1, t->triggerIndexByAngle[57]) << "index at 1";
|
// ASSERT_EQ( 1, t->triggerIndexByAngle[57]) << "index at 1";
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
#include "trigger_mazda.h"
|
#include "trigger_mazda.h"
|
||||||
|
|
||||||
TEST(trigger, miataNA) {
|
TEST(trigger, miataNA) {
|
||||||
TriggerShape naShape;
|
TriggerWaveform naShape;
|
||||||
initializeMazdaMiataNaShape(&naShape);
|
initializeMazdaMiataNaShape(&naShape);
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -84,7 +84,7 @@ static void fireNoisyCycle60_2(EngineTestHelper *eth, int numCycles, int duratio
|
||||||
}
|
}
|
||||||
|
|
||||||
static void resetTrigger(EngineTestHelper ð) {
|
static void resetTrigger(EngineTestHelper ð) {
|
||||||
eth.applyTriggerShape();
|
eth.applyTriggerWaveform();
|
||||||
eth.engine.triggerCentral.resetAccumSignalData();
|
eth.engine.triggerCentral.resetAccumSignalData();
|
||||||
// reset error counter
|
// reset error counter
|
||||||
eth.engine.triggerCentral.triggerState.totalTriggerErrorCounter = 0;
|
eth.engine.triggerCentral.triggerState.totalTriggerErrorCounter = 0;
|
||||||
|
|
Loading…
Reference in New Issue