static void doScheduleForLater(scheduling_s *scheduling, int delayUs, schfunc_t callback, void *param) { int delaySt = MY_US2ST(delayUs); if (delaySt <= 0) { /** * in case of zero delay, we should invoke the callback */ callback(param); return; } bool alreadyLocked = lockAnyContext(); scheduling->callback = callback; scheduling->param = param; int isArmed = chVTIsArmedI(&scheduling->timer); if (isArmed) { /** * timer reuse is normal for example in case of sudden RPM increase */ chVTResetI(&scheduling->timer); } #if EFI_SIMULATOR if (callback == (schfunc_t)&seTurnPinLow) { printf("setTime cb=seTurnPinLow p=%d\r\n", (int)param); } else { // printf("setTime cb=%d p=%d\r\n", (int)callback, (int)param); } #endif /* EFI_SIMULATOR */ chVTSetI(&scheduling->timer, delaySt, (vtfunc_t)timerCallback, scheduling); if (!alreadyLocked) { unlockAnyContext(); } }
void scheduleTask(const char *prefix, scheduling_s *scheduling, int delayUs, schfunc_t callback, void *param) { int delaySt = MY_US2ST(delayUs); if (delaySt <= 0) { /** * in case of zero delay, we should invoke the callback */ callback(param); return; } lockAnyContext(); int isArmed = chVTIsArmedI(&scheduling->timer); if (isArmed) chVTResetI(&scheduling->timer); chVTSetI(&scheduling->timer, delaySt, (vtfunc_t)callback, param); unlockAnyContext(); }