start switching TriggerValue to bool #55

This commit is contained in:
Matthew Kennedy 2023-05-30 22:55:03 -07:00
parent 2ed148fa9b
commit ef10a91c59
4 changed files with 51 additions and 41 deletions

View File

@ -163,7 +163,11 @@ angle_t TriggerWaveform::getAngle(int index) const {
return cycleStartAngle + positionWithinCycle; return cycleStartAngle + positionWithinCycle;
} }
void TriggerWaveform::addEventClamped(angle_t angle, TriggerValue const stateParam, TriggerWheel const channelIndex, float filterLeft, float filterRight) { void TriggerWaveform::addEventClamped(angle_t angle, TriggerValue const state, TriggerWheel const channelIndex, float filterLeft, float filterRight) {
addEventClamped(angle, state == TriggerValue::RISE, channelIndex, filterLeft, filterRight);
}
void TriggerWaveform::addEventClamped(angle_t angle, bool stateParam, TriggerWheel const channelIndex, float filterLeft, float filterRight) {
if (angle > filterLeft && angle < filterRight) { if (angle > filterLeft && angle < filterRight) {
addEvent(angle / getEngineCycle(operationMode), stateParam, channelIndex); addEvent(angle / getEngineCycle(operationMode), stateParam, channelIndex);
} }
@ -232,6 +236,10 @@ void TriggerWaveform::addEvent360(angle_t angle, bool state, TriggerWheel const
} }
void TriggerWaveform::addEventAngle(angle_t angle, TriggerValue const state, TriggerWheel const channelIndex) { void TriggerWaveform::addEventAngle(angle_t angle, TriggerValue const state, TriggerWheel const channelIndex) {
addEventAngle(angle, state == TriggerValue::RISE, channelIndex);
}
void TriggerWaveform::addEventAngle(angle_t angle, bool state, TriggerWheel const channelIndex) {
addEvent(angle / getCycleDuration(), state, channelIndex); addEvent(angle / getCycleDuration(), state, channelIndex);
} }

View File

@ -206,11 +206,13 @@ public:
* @param angle (0..360] or (0..720] depending on configuration * @param angle (0..360] or (0..720] depending on configuration
*/ */
void addEventAngle(angle_t angle, TriggerValue const state, TriggerWheel const channelIndex = TriggerWheel::T_PRIMARY); void addEventAngle(angle_t angle, TriggerValue const state, TriggerWheel const channelIndex = TriggerWheel::T_PRIMARY);
void addEventAngle(angle_t angle, bool state, TriggerWheel const channelIndex = TriggerWheel::T_PRIMARY);
/* (0..720] angle range /* (0..720] angle range
* Deprecated? * Deprecated?
*/ */
void addEventClamped(angle_t angle, TriggerValue const state, TriggerWheel const channelIndex, float filterLeft, float filterRight); void addEventClamped(angle_t angle, TriggerValue const state, TriggerWheel const channelIndex, float filterLeft, float filterRight);
void addEventClamped(angle_t angle, bool state, TriggerWheel const channelIndex, float filterLeft, float filterRight);
operation_mode_e getWheelOperationMode() const; operation_mode_e getWheelOperationMode() const;
void initialize(operation_mode_e operationMode, SyncEdge syncEdge); void initialize(operation_mode_e operationMode, SyncEdge syncEdge);

View File

@ -24,14 +24,14 @@ void addSkippedToothTriggerEvents(TriggerWheel wheel, TriggerWaveform *s, int to
for (int i = 0; i < totalTeethCount - skippedCount - 1; i++) { for (int i = 0; i < totalTeethCount - skippedCount - 1; i++) {
float angleDown = engineCycle / totalTeethCount * (i + (1 - toothWidth)); float angleDown = engineCycle / totalTeethCount * (i + (1 - toothWidth));
float angleUp = engineCycle / totalTeethCount * (i + 1); float angleUp = engineCycle / totalTeethCount * (i + 1);
s->addEventClamped(offset + angleDown, TriggerValue::RISE, wheel, filterLeft, filterRight); s->addEventClamped(offset + angleDown, true, wheel, filterLeft, filterRight);
s->addEventClamped(offset + angleUp, TriggerValue::FALL, wheel, filterLeft, filterRight); s->addEventClamped(offset + angleUp, false, wheel, filterLeft, filterRight);
} }
float angleDown = engineCycle / totalTeethCount * (totalTeethCount - skippedCount - 1 + (1 - toothWidth)); float angleDown = engineCycle / totalTeethCount * (totalTeethCount - skippedCount - 1 + (1 - toothWidth));
s->addEventClamped(offset + angleDown, TriggerValue::RISE, wheel, filterLeft, filterRight); s->addEventClamped(offset + angleDown, true, wheel, filterLeft, filterRight);
// custom handling of last event in order to avoid rounding error // custom handling of last event in order to avoid rounding error
s->addEventClamped(offset + engineCycle, TriggerValue::FALL, wheel, filterLeft, filterRight); s->addEventClamped(offset + engineCycle, false, wheel, filterLeft, filterRight);
} }
void initializeSkippedToothTrigger(TriggerWaveform *s, int totalTeethCount, int skippedCount, void initializeSkippedToothTrigger(TriggerWaveform *s, int totalTeethCount, int skippedCount,
@ -65,11 +65,11 @@ void initializeSkippedToothTrigger(TriggerWaveform *s, int totalTeethCount, int
void configureOnePlusOne(TriggerWaveform *s) { void configureOnePlusOne(TriggerWaveform *s) {
s->initialize(FOUR_STROKE_CAM_SENSOR, SyncEdge::Rise); s->initialize(FOUR_STROKE_CAM_SENSOR, SyncEdge::Rise);
s->addEvent360( 90, TriggerValue::RISE, TriggerWheel::T_PRIMARY); s->addEvent360( 90, true, TriggerWheel::T_PRIMARY);
s->addEvent360(180, TriggerValue::FALL, TriggerWheel::T_PRIMARY); s->addEvent360(180, false, TriggerWheel::T_PRIMARY);
s->addEvent360(270, TriggerValue::RISE, TriggerWheel::T_SECONDARY); s->addEvent360(270, true, TriggerWheel::T_SECONDARY);
s->addEvent360(360, TriggerValue::FALL, TriggerWheel::T_SECONDARY); s->addEvent360(360, false, TriggerWheel::T_SECONDARY);
s->isSynchronizationNeeded = false; s->isSynchronizationNeeded = false;
s->useOnlyPrimaryForSync = true; s->useOnlyPrimaryForSync = true;
@ -84,29 +84,29 @@ void configure3_1_cam(TriggerWaveform *s) {
TriggerWheel crank = TriggerWheel::T_SECONDARY; TriggerWheel crank = TriggerWheel::T_SECONDARY;
s->addEvent720(10, TriggerValue::RISE, TriggerWheel::T_PRIMARY); s->addEvent720(10, true, TriggerWheel::T_PRIMARY);
s->addEvent720(50, TriggerValue::FALL, TriggerWheel::T_PRIMARY); s->addEvent720(50, false, TriggerWheel::T_PRIMARY);
float a = 2 * crankW; float a = 2 * crankW;
// #1/3 // #1/3
s->addEvent720(a += crankW, TriggerValue::RISE, crank); s->addEvent720(a += crankW, true, crank);
s->addEvent720(a += crankW, TriggerValue::FALL, crank); s->addEvent720(a += crankW, false, crank);
// #2/3 // #2/3
s->addEvent720(a += crankW, TriggerValue::RISE, crank); s->addEvent720(a += crankW, true, crank);
s->addEvent720(a += crankW, TriggerValue::FALL, crank); s->addEvent720(a += crankW, false, crank);
// #3/3 // #3/3
a += crankW; a += crankW;
a += crankW; a += crankW;
// 2nd #1/3 // 2nd #1/3
s->addEvent720(a += crankW, TriggerValue::RISE, crank); s->addEvent720(a += crankW, true, crank);
s->addEvent720(a += crankW, TriggerValue::FALL, crank); s->addEvent720(a += crankW, false, crank);
// 2nd #2/3 // 2nd #2/3
s->addEvent720(a += crankW, TriggerValue::RISE, crank); s->addEvent720(a += crankW, true, crank);
s->addEvent720(a += crankW, TriggerValue::FALL, crank); s->addEvent720(a += crankW, false, crank);
s->isSynchronizationNeeded = false; s->isSynchronizationNeeded = false;
} }
@ -125,8 +125,8 @@ void configureKawaKX450F(TriggerWaveform *s) {
addSkippedToothTriggerEvents(TriggerWheel::T_PRIMARY, s, 18, 0, toothWidth, 0, engineCycle, addSkippedToothTriggerEvents(TriggerWheel::T_PRIMARY, s, 18, 0, toothWidth, 0, engineCycle,
NO_LEFT_FILTER, 720 - 39); NO_LEFT_FILTER, 720 - 39);
s->addEvent(0.97, TriggerValue::RISE, TriggerWheel::T_PRIMARY); s->addEvent(0.97, true, TriggerWheel::T_PRIMARY);
s->addEvent(1, TriggerValue::FALL, TriggerWheel::T_PRIMARY); s->addEvent(1, false, TriggerWheel::T_PRIMARY);
} }
void configureQuickStartSenderWheel(TriggerWaveform *s) { void configureQuickStartSenderWheel(TriggerWaveform *s) {
@ -138,17 +138,17 @@ void configureQuickStartSenderWheel(TriggerWaveform *s) {
s->setTriggerSynchronizationGap(0.645); s->setTriggerSynchronizationGap(0.645);
s->setSecondTriggerSynchronizationGap(1.556); s->setSecondTriggerSynchronizationGap(1.556);
s->addEvent360(offset + 0, TriggerValue::RISE, TriggerWheel::T_PRIMARY); s->addEvent360(offset + 0, true, TriggerWheel::T_PRIMARY);
s->addEvent360(offset + 70, TriggerValue::FALL, TriggerWheel::T_PRIMARY); s->addEvent360(offset + 70, false, TriggerWheel::T_PRIMARY);
s->addEvent360(offset + 90, TriggerValue::RISE, TriggerWheel::T_PRIMARY); s->addEvent360(offset + 90, true, TriggerWheel::T_PRIMARY);
s->addEvent360(offset + 110, TriggerValue::FALL, TriggerWheel::T_PRIMARY); s->addEvent360(offset + 110, false, TriggerWheel::T_PRIMARY);
s->addEvent360(offset + 180, TriggerValue::RISE, TriggerWheel::T_PRIMARY); s->addEvent360(offset + 180, true, TriggerWheel::T_PRIMARY);
s->addEvent360(offset + 200, TriggerValue::FALL, TriggerWheel::T_PRIMARY); s->addEvent360(offset + 200, false, TriggerWheel::T_PRIMARY);
s->addEvent360(offset + 270, TriggerValue::RISE, TriggerWheel::T_PRIMARY); s->addEvent360(offset + 270, true, TriggerWheel::T_PRIMARY);
s->addEvent360(offset + 340, TriggerValue::FALL, TriggerWheel::T_PRIMARY); s->addEvent360(offset + 340, false, TriggerWheel::T_PRIMARY);
} }
// Useful for: // Useful for:
@ -173,6 +173,6 @@ void configure12ToothCrank(TriggerWaveform* s) {
float width = 360 / 12; float width = 360 / 12;
// Just a single tooth with 50% duty cycle // Just a single tooth with 50% duty cycle
s->addEventAngle(width / 2, TriggerValue::FALL, TriggerWheel::T_PRIMARY); s->addEventAngle(width / 2, false, TriggerWheel::T_PRIMARY);
s->addEventAngle(width, TriggerValue::RISE, TriggerWheel::T_PRIMARY); s->addEventAngle(width, true, TriggerWheel::T_PRIMARY);
} }

View File

@ -87,17 +87,17 @@ TEST(misc, testFuelMap) {
static void configureFordAspireTriggerWaveform(TriggerWaveform * s) { static void configureFordAspireTriggerWaveform(TriggerWaveform * s) {
s->initialize(FOUR_STROKE_CAM_SENSOR, SyncEdge::Rise); s->initialize(FOUR_STROKE_CAM_SENSOR, SyncEdge::Rise);
s->addEvent720(53.747, TriggerValue::RISE, TriggerWheel::T_SECONDARY); s->addEvent720(53.747, true, TriggerWheel::T_SECONDARY);
s->addEvent720(121.90, TriggerValue::FALL, TriggerWheel::T_SECONDARY); s->addEvent720(121.90, false, TriggerWheel::T_SECONDARY);
s->addEvent720(232.76, TriggerValue::RISE, TriggerWheel::T_SECONDARY); s->addEvent720(232.76, true, TriggerWheel::T_SECONDARY);
s->addEvent720(300.54, TriggerValue::FALL, TriggerWheel::T_SECONDARY); s->addEvent720(300.54, false, TriggerWheel::T_SECONDARY);
s->addEvent720(360, TriggerValue::RISE, TriggerWheel::T_PRIMARY); s->addEvent720(360, true, TriggerWheel::T_PRIMARY);
s->addEvent720(409.8412, TriggerValue::RISE, TriggerWheel::T_SECONDARY); s->addEvent720(409.8412, true, TriggerWheel::T_SECONDARY);
s->addEvent720(478.6505, TriggerValue::FALL, TriggerWheel::T_SECONDARY); s->addEvent720(478.6505, false, TriggerWheel::T_SECONDARY);
s->addEvent720(588.045, TriggerValue::RISE, TriggerWheel::T_SECONDARY); s->addEvent720(588.045, true, TriggerWheel::T_SECONDARY);
s->addEvent720(657.03, TriggerValue::FALL, TriggerWheel::T_SECONDARY); s->addEvent720(657.03, false, TriggerWheel::T_SECONDARY);
s->addEvent720(720, TriggerValue::FALL, TriggerWheel::T_PRIMARY); s->addEvent720(720, false, TriggerWheel::T_PRIMARY);
ASSERT_FLOAT_EQ(53.747 / 720, s->wave.getSwitchTime(0)); ASSERT_FLOAT_EQ(53.747 / 720, s->wave.getSwitchTime(0));
ASSERT_EQ(true, s->wave.getChannelState(1, 0)) << "@0"; ASSERT_EQ(true, s->wave.getChannelState(1, 0)) << "@0";