diff --git a/firmware/CHANGELOG.md b/firmware/CHANGELOG.md index d0b59a8f49..973dcbaea3 100644 --- a/firmware/CHANGELOG.md +++ b/firmware/CHANGELOG.md @@ -40,6 +40,7 @@ Release template (copy/paste this for new release): - Disable radiator fans after certain vehicle speed #5875 - LIS2DW12TR on-board Accelerometer support #4870 - Wheel slip ratio using aux speed inputs #5897 + - 4 cylinder daihatsu cam sensor decoder #5925 ### Fixed - Honda CBR 600 cam decoder #5909 diff --git a/firmware/controllers/trigger/decoders/trigger_misc.cpp b/firmware/controllers/trigger/decoders/trigger_misc.cpp index 80d2cd0694..ff210e31ee 100644 --- a/firmware/controllers/trigger/decoders/trigger_misc.cpp +++ b/firmware/controllers/trigger/decoders/trigger_misc.cpp @@ -100,26 +100,29 @@ void configureFordST170(TriggerWaveform * s) { s->addEventAngle(8 * total, TriggerValue::FALL); } -void configureDaihatsu3cyl(TriggerWaveform * s) { +static void daihatsu(TriggerWaveform * s, int count) { s->initialize(FOUR_STROKE_CAM_SENSOR, SyncEdge::RiseOnly); int width = 10; - s->setTriggerSynchronizationGap(0.125); - s->addEventAngle(30 - width, TriggerValue::RISE); s->addEventAngle(30, TriggerValue::FALL); + for (int i = 1;i<=count;i++) { + s->addEventAngle(s->getCycleDuration() / count * i - width, TriggerValue::RISE); + s->addEventAngle(s->getCycleDuration() / count * i, TriggerValue::FALL); + } +} - s->addEventAngle(s->getCycleDuration() / 3 - width, TriggerValue::RISE); - s->addEventAngle(s->getCycleDuration() / 3, TriggerValue::FALL); +void configureDaihatsu3cyl(TriggerWaveform * s) { + daihatsu(s, 3); + s->setTriggerSynchronizationGap(0.125); +} - s->addEventAngle(s->getCycleDuration() / 3 * 2 - width, TriggerValue::RISE); - s->addEventAngle(s->getCycleDuration() / 3 * 2, TriggerValue::FALL); - - s->addEventAngle(s->getCycleDuration() - width, TriggerValue::RISE); - s->addEventAngle(s->getCycleDuration(), TriggerValue::FALL); +void configureDaihatsu4cyl(TriggerWaveform * s) { + daihatsu(s, 4); + s->setTriggerSynchronizationGap(0.17); } void configureBarra3plus1cam(TriggerWaveform *s) { diff --git a/firmware/controllers/trigger/decoders/trigger_misc.h b/firmware/controllers/trigger/decoders/trigger_misc.h index 2b0b6a2e2d..44e9e5a98d 100644 --- a/firmware/controllers/trigger/decoders/trigger_misc.h +++ b/firmware/controllers/trigger/decoders/trigger_misc.h @@ -11,6 +11,7 @@ class TriggerWaveform; void configureFiatIAQ_P8(TriggerWaveform * s); void configureDaihatsu3cyl(TriggerWaveform * s); +void configureDaihatsu4cyl(TriggerWaveform * s); void configureFordPip(TriggerWaveform * s); void configureFordST170(TriggerWaveform * s); void configureTriTach(TriggerWaveform * s); diff --git a/firmware/controllers/trigger/decoders/trigger_structure.cpp b/firmware/controllers/trigger/decoders/trigger_structure.cpp index cf599aab6d..527d4bcd3f 100644 --- a/firmware/controllers/trigger/decoders/trigger_structure.cpp +++ b/firmware/controllers/trigger/decoders/trigger_structure.cpp @@ -579,10 +579,13 @@ void TriggerWaveform::initializeTriggerWaveform(operation_mode_e triggerOperatio break; case trigger_type_e::TT_DAIHATSU_3_CYL: - case trigger_type_e::TT_DAIHATSU_4_CYL: configureDaihatsu3cyl(this); break; + case trigger_type_e::TT_DAIHATSU_4_CYL: + configureDaihatsu4cyl(this); + break; + case trigger_type_e::TT_VVT_TOYOTA_3_TOOTH: initializeSkippedToothTrigger(this, 3, 0, triggerOperationMode, SyncEdge::RiseOnly); break;