diff --git a/firmware/controllers/PwmTester.cpp b/firmware/controllers/PwmTester.cpp index 5961f6bd86..b353fc906e 100644 --- a/firmware/controllers/PwmTester.cpp +++ b/firmware/controllers/PwmTester.cpp @@ -57,15 +57,18 @@ static void testCallback(void *arg) { */ float delayMs = 0.1; float durationMs = 1.6; - scheduleOutput(&outSignals[0], delayMs, durationMs); - scheduleOutput(&outSignals[1], delayMs, durationMs); - scheduleOutput(&outSignals[2], delayMs, durationMs); - scheduleOutput(&outSignals[3], delayMs, durationMs); - scheduleOutput(&outSignals[4], delayMs, durationMs); - scheduleOutput(&outSignals[5], delayMs, durationMs); - scheduleOutput(&outSignals[6], delayMs, durationMs); - scheduleOutput(&outSignals[7], delayMs, durationMs); + efitimeus_t nowUs = getTimeNowUs(); + + scheduleOutput(&outSignals[0], nowUs, delayMs, durationMs); + scheduleOutput(&outSignals[1], nowUs, delayMs, durationMs); + scheduleOutput(&outSignals[2], nowUs, delayMs, durationMs); + scheduleOutput(&outSignals[3], nowUs, delayMs, durationMs); + + scheduleOutput(&outSignals[4], nowUs, delayMs, durationMs); + scheduleOutput(&outSignals[5], nowUs, delayMs, durationMs); + scheduleOutput(&outSignals[6], nowUs, delayMs, durationMs); + scheduleOutput(&outSignals[7], nowUs, delayMs, durationMs); /** * this would re-schedule another callback in 2ms from now diff --git a/firmware/controllers/algo/signal_executor.cpp b/firmware/controllers/algo/signal_executor.cpp index 392c9f0be7..383e2ab3c5 100644 --- a/firmware/controllers/algo/signal_executor.cpp +++ b/firmware/controllers/algo/signal_executor.cpp @@ -118,7 +118,7 @@ int getRevolutionCounter(void); * @param dwell the number of ticks of output duration * */ -void scheduleOutput(OutputSignal *signal, float delayMs, float durationMs) { +void scheduleOutput(OutputSignal *signal, efitimeus_t nowUs, float delayMs, float durationMs) { #if EFI_GPIO if (durationMs < 0) { firmwareError("duration cannot be negative: %d", durationMs); @@ -134,8 +134,6 @@ void scheduleOutput(OutputSignal *signal, float delayMs, float durationMs) { scheduling_s * sUp = &signal->signalTimerUp[index]; scheduling_s * sDown = &signal->signalTimerDown[index]; - efitimeus_t nowUs = getTimeNowUs(); - scheduleByTime("out up", sUp, nowUs + (int) MS2US(delayMs), (schfunc_t) &turnPinHigh, signal->output); scheduleByTime("out down", sDown, nowUs + (int) MS2US(delayMs + durationMs), (schfunc_t) &turnPinLow, signal->output); #endif diff --git a/firmware/controllers/algo/signal_executor.h b/firmware/controllers/algo/signal_executor.h index bd58c17fbe..36eb7ce89c 100644 --- a/firmware/controllers/algo/signal_executor.h +++ b/firmware/controllers/algo/signal_executor.h @@ -39,19 +39,10 @@ struct OutputSignal_struct { scheduling_s signalTimerDown[2]; }; -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -void scheduleOutput(OutputSignal *signal, float delayMs, float durationMs); - +void scheduleOutput(OutputSignal *signal, efitimeus_t nowUs, float delayMs, float durationMs); void initSignalExecutor(void); -void scheduleByAngle(int rpm, scheduling_s *timer, angle_t angle, schfunc_t callback, void *param); -#ifdef __cplusplus -} -#endif /* __cplusplus */ +void scheduleByAngle(int rpm, scheduling_s *timer, angle_t angle, schfunc_t callback, void *param); void initSignalExecutorImpl(void); diff --git a/firmware/controllers/engine_controller.cpp b/firmware/controllers/engine_controller.cpp index 79f30877b7..78640ea1a9 100644 --- a/firmware/controllers/engine_controller.cpp +++ b/firmware/controllers/engine_controller.cpp @@ -154,10 +154,12 @@ static void updateErrorCodes(void) { Overflow64Counter halTime; +//todo: macro to save method invocation efitimeus_t getTimeNowUs(void) { return getTimeNowNt() / (CORE_CLOCK / 1000000); } +//todo: macro to save method invocation efitick_t getTimeNowNt(void) { return halTime.get(); } diff --git a/firmware/controllers/trigger/main_trigger_callback.cpp b/firmware/controllers/trigger/main_trigger_callback.cpp index 6aa21c85d0..ae5ecd414e 100644 --- a/firmware/controllers/trigger/main_trigger_callback.cpp +++ b/firmware/controllers/trigger/main_trigger_callback.cpp @@ -142,7 +142,7 @@ static ALWAYS_INLINE void handleFuelInjectionEvent(InjectionEvent *event, int rp scheduleTask("out down", sDown, (int) MS2US(delayMs) + MS2US(fuelMs), (schfunc_t) &endSimultaniousInjection, engine); } else { - scheduleOutput(event->actuator, delayMs, fuelMs); + scheduleOutput(event->actuator, getTimeNowUs(), delayMs, fuelMs); } } diff --git a/unit_tests/test_signal_executor.cpp b/unit_tests/test_signal_executor.cpp index 9832c90cef..2d7e3a9709 100644 --- a/unit_tests/test_signal_executor.cpp +++ b/unit_tests/test_signal_executor.cpp @@ -17,15 +17,13 @@ EventQueue schedulingQueue; void scheduleTask(const char *msg, scheduling_s *scheduling, int delayUs, schfunc_t callback, void *param) { - schedulingQueue.insertTask(scheduling, getTimeNowUs() + delayUs, callback, param); + scheduleByTime(msg, scheduling, getTimeNowUs() + delayUs, callback, param); } -void scheduleTask2(const char *prefix, scheduling_s *scheduling, uint64_t time, schfunc_t callback, void *param) { - firmwareError("not implemented"); - //schedulingQueue.insertTask(scheduling, getTimeNowUs() + delayUs, callback, param); +void scheduleByTime(const char *prefix, scheduling_s *scheduling, efitimeus_t time, schfunc_t callback, void *param) { + schedulingQueue.insertTask(scheduling, time, callback, param); } - void initSignalExecutorImpl(void) { } diff --git a/unit_tests/test_signal_executor.h b/unit_tests/test_signal_executor.h index 14bc40124b..9a8d08c9b5 100644 --- a/unit_tests/test_signal_executor.h +++ b/unit_tests/test_signal_executor.h @@ -9,16 +9,6 @@ #define TEST_SIGNAL_EXECUTOR_H_ int getRevolutionCounter(); - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - void testSignalExecutor(void); -#ifdef __cplusplus -} -#endif /* __cplusplus */ - #endif /* TEST_SIGNAL_EXECUTOR_H_ */