diff --git a/firmware/controllers/can/can_bench_test.cpp b/firmware/controllers/can/can_bench_test.cpp index b131152a4b..3f2fc0b1d5 100644 --- a/firmware/controllers/can/can_bench_test.cpp +++ b/firmware/controllers/can/can_bench_test.cpp @@ -2,12 +2,16 @@ #include "pch.h" #include "can_bench_test.h" #include "can_msg_tx.h" +#include "can_common.h" #define CAN_BENCH_HEADER 0x66 #define CAN_BENCH_GET_COUNT 0 #define CAN_BENCH_GET_SET 1 #define CAN_BENCH_GET_CLEAR 2 +#define TRUNCATE_TO_BYTE(i) ((i) & 0xff) + + #if EFI_CAN_SUPPORT static void setPin(const CANRxFrame& frame, int value) { @@ -20,6 +24,30 @@ static void setPin(const CANRxFrame& frame, int value) { #endif // EFI_GPIO_HARDWARE && EFI_PROD_CODE } +void sendEventCounters() { +#if EFI_SHAFT_POSITION_INPUT + CanTxMessage msg(CanCategory::BENCH_TEST, BENCH_TEST_EVENT_COUNTERS, 8); + + int primaryFall = engine->triggerCentral.getHwEventCounter((int)SHAFT_PRIMARY_FALLING); + int primaryRise = engine->triggerCentral.getHwEventCounter((int)SHAFT_PRIMARY_RISING); + int secondaryFall = engine->triggerCentral.getHwEventCounter((int)SHAFT_SECONDARY_FALLING); + int secondaryRise = engine->triggerCentral.getHwEventCounter((int)SHAFT_SECONDARY_RISING); + + msg[0] = TRUNCATE_TO_BYTE(primaryRise + primaryFall); + msg[1] = TRUNCATE_TO_BYTE(secondaryRise + secondaryFall); + + for (int camIdx = 0; camIdx < 4; camIdx++) { + int vvtRise = 0, vvtFall = 0; + if (camIdx < CAM_INPUTS_COUNT) { + vvtRise = engine->triggerCentral.vvtEventRiseCounter[camIdx]; + vvtFall = engine->triggerCentral.vvtEventFallCounter[camIdx]; + } + + msg[2 + camIdx] = TRUNCATE_TO_BYTE(vvtRise + vvtFall); + } +#endif // EFI_SHAFT_POSITION_INPUT +} + void processCanBenchTest(const CANRxFrame& frame) { if (CAN_EID(frame) != CAN_ECU_HW_META) { return; diff --git a/firmware/controllers/can/can_bench_test.h b/firmware/controllers/can/can_bench_test.h index 7df43673c7..ba602e538c 100644 --- a/firmware/controllers/can/can_bench_test.h +++ b/firmware/controllers/can/can_bench_test.h @@ -5,4 +5,5 @@ #pragma once #include "can.h" -void processCanBenchTest(const CANRxFrame& frame); \ No newline at end of file +void processCanBenchTest(const CANRxFrame& frame); +void sendEventCounters(); diff --git a/firmware/controllers/can/can_tx.cpp b/firmware/controllers/can/can_tx.cpp index 061e5897b9..b028befeab 100644 --- a/firmware/controllers/can/can_tx.cpp +++ b/firmware/controllers/can/can_tx.cpp @@ -15,6 +15,7 @@ #include "can_dash.h" #include "obd2.h" #include "can_sensor.h" +#include "can_bench_test.h" #include "rusefi_wideband.h" extern CanListener* canListeners_head; @@ -54,6 +55,10 @@ void CanWrite::PeriodicTask(efitick_t nowNt) { updateDash(cycle); + if (cycle.isInterval(CI::_100ms)) { + sendEventCounters(); + } + #if EFI_WIDEBAND_FIRMWARE_UPDATE if (engineConfiguration->enableAemXSeries && cycle.isInterval(CI::_50ms)) { sendWidebandInfo(); diff --git a/firmware/libfirmware b/firmware/libfirmware index 273697e2de..5dcb1fef09 160000 --- a/firmware/libfirmware +++ b/firmware/libfirmware @@ -1 +1 @@ -Subproject commit 273697e2dec95dd4cd56ae8803370e696be90ab8 +Subproject commit 5dcb1fef0956b8fc35a8d184f4056aa1b81e737f