void scheduleTask(const bool monitorReuse, const char *msg, scheduling_s *scheduling, int delayUs, schfunc_t callback, void *param) { if (debugSignalExecutor) { printf("scheduleTask %d\r\n", delayUs); } scheduleByTime(monitorReuse, msg, scheduling, getTimeNowUs() + delayUs, callback, param); }
/** * * @param delay the number of ticks before the output signal * immediate output if delay is zero * @param dwell the number of ticks of output duration * */ void scheduleOutput(OutputSignal *signal, efitimeus_t nowUs, float delayUs, float durationUs) { #if EFI_GPIO if (durationUs < 0) { warning(OBD_PCM_Processor_Fault, "duration cannot be negative: %d", durationUs); return; } if (cisnan(durationUs)) { warning(OBD_PCM_Processor_Fault, "NaN in scheduleOutput", durationUs); return; } efiAssertVoid(signal!=NULL, "signal is NULL"); int index = getRevolutionCounter() % 2; scheduling_s * sUp = &signal->signalTimerUp[index]; scheduling_s * sDown = &signal->signalTimerDown[index]; scheduleByTime("out up", sUp, nowUs + (int) delayUs, (schfunc_t) &turnPinHigh, signal->output); scheduleByTime("out down", sDown, nowUs + (int) (delayUs + durationUs), (schfunc_t) &turnPinLow, signal->output); #endif }
static void seScheduleByTime(const char *prefix, scheduling_s *scheduling, efitimeus_t time, schfunc_t callback, OutputSignalPair *pair) { InjectorOutputPin *param = pair->outputs[0]; #if FUEL_MATH_EXTREME_LOGGING || defined(__DOXYGEN__) // scheduleMsg(&sharedLogger, "schX %s %x %d", prefix, scheduling, time); // scheduleMsg(&sharedLogger, "schX %s", param->name); #endif /* FUEL_MATH_EXTREME_LOGGING */ #if FUEL_MATH_EXTREME_LOGGING || defined(__DOXYGEN__) const char *direction = callback == (schfunc_t) &seTurnPinHigh ? "up" : "down"; printf("seScheduleByTime %s %s %d sch=%d\r\n", direction, param->name, (int)time, (int)scheduling); #endif /* FUEL_MATH_EXTREME_LOGGING || EFI_UNIT_TEST */ scheduleByTime(true, prefix, scheduling, time, callback, pair); }