mirror of https://github.com/rusefi/rusefi.git
tooth-event angle cannot be negative
This commit is contained in:
parent
d9b00d8124
commit
a6103dca56
|
@ -25,7 +25,9 @@ static void plainPinTurnOff(NamedOutputPin *output) {
|
|||
|
||||
|
||||
static void scheduleOpen(AuxActor *current) {
|
||||
engine->module<TriggerScheduler>()->schedule(¤t->open,
|
||||
engine->module<TriggerScheduler>()->schedule(
|
||||
"aux-valve",
|
||||
¤t->open,
|
||||
current->extra + engine->engineState.auxValveStart,
|
||||
{ auxPlainPinTurnOn, current }
|
||||
);
|
||||
|
@ -41,7 +43,9 @@ void auxPlainPinTurnOn(AuxActor *current) {
|
|||
|
||||
fixAngle(duration, "duration", ObdCode::CUSTOM_ERR_6557);
|
||||
|
||||
engine->module<TriggerScheduler>()->schedule(¤t->close,
|
||||
engine->module<TriggerScheduler>()->schedule(
|
||||
"aux-valve",
|
||||
¤t->close,
|
||||
current->extra + engine->engineState.auxValveEnd,
|
||||
{ plainPinTurnOff, output }
|
||||
);
|
||||
|
|
|
@ -224,6 +224,7 @@ void HpfpController::scheduleNextCycle() {
|
|||
* We are good to use just one m_event instance because new events are scheduled when we turn off valve.
|
||||
*/
|
||||
engine->module<TriggerScheduler>()->schedule(
|
||||
"hpfp",
|
||||
&m_event,
|
||||
di_nextStart,
|
||||
{ pinTurnOn, this });
|
||||
|
@ -235,6 +236,7 @@ void HpfpController::scheduleNextCycle() {
|
|||
// will schedule the next lobe.
|
||||
// todo: would it have been cleaner to schedule 'scheduleNextCycle' directly?
|
||||
engine->module<TriggerScheduler>()->schedule(
|
||||
"hpfp",
|
||||
&m_event, lobe,
|
||||
{ pinTurnOff, this });
|
||||
}
|
||||
|
|
|
@ -375,6 +375,7 @@ static void scheduleSparkEvent(bool limitedSpark, IgnitionEvent *event,
|
|||
assertAngleRange(sparkAngle, "findAngle#a5", ObdCode::CUSTOM_ERR_6549);
|
||||
|
||||
bool scheduled = engine->module<TriggerScheduler>()->scheduleOrQueue(
|
||||
"spark",
|
||||
&event->sparkEvent, edgeTimestamp, sparkAngle,
|
||||
{ fireSparkAndPrepareNextSchedule, event },
|
||||
currentPhase, nextPhase);
|
||||
|
|
|
@ -6,10 +6,10 @@ bool TriggerScheduler::assertNotInList(AngleBasedEvent *head, AngleBasedEvent *e
|
|||
assertNotInListMethodBody(head, element, nextToothEvent)
|
||||
}
|
||||
|
||||
void TriggerScheduler::schedule(AngleBasedEvent* event, angle_t angle, action_s action) {
|
||||
void TriggerScheduler::schedule(const char *msg, AngleBasedEvent* event, angle_t angle, action_s action) {
|
||||
event->setAngle(angle);
|
||||
|
||||
schedule(event, action);
|
||||
schedule(msg, event, action);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -18,7 +18,7 @@ void TriggerScheduler::schedule(AngleBasedEvent* event, angle_t angle, action_s
|
|||
* @return true if event corresponds to current tooth and was time-based scheduler
|
||||
* false if event was put into queue for scheduling at a later tooth
|
||||
*/
|
||||
bool TriggerScheduler::scheduleOrQueue(AngleBasedEvent *event,
|
||||
bool TriggerScheduler::scheduleOrQueue(const char *msg, AngleBasedEvent *event,
|
||||
efitick_t edgeTimestamp,
|
||||
angle_t angle,
|
||||
action_s action,
|
||||
|
@ -38,13 +38,17 @@ bool TriggerScheduler::scheduleOrQueue(AngleBasedEvent *event,
|
|||
return true;
|
||||
} else {
|
||||
// If not due now, add it to the queue to be scheduled later
|
||||
schedule(event, action);
|
||||
schedule(msg, event, action);
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void TriggerScheduler::schedule(AngleBasedEvent* event, action_s action) {
|
||||
void TriggerScheduler::schedule(const char *msg, AngleBasedEvent* event, action_s action) {
|
||||
if (event->enginePhase < 0) {
|
||||
criticalError("Negative angle %s %f", msg, event->enginePhase);
|
||||
}
|
||||
|
||||
event->action = action;
|
||||
|
||||
{
|
||||
|
|
|
@ -6,10 +6,10 @@ class TriggerScheduler : public EngineModule {
|
|||
public:
|
||||
// *kludge* we have three methods with *schedule* in the name meaning three different things
|
||||
// this method just places event into the collection of tooth-based events
|
||||
void schedule(AngleBasedEvent* event, angle_t angle, action_s action);
|
||||
void schedule(const char *msg, AngleBasedEvent* event, angle_t angle, action_s action);
|
||||
|
||||
// 'schedule' means 'delegates to time-based scheduler' and 'queue' here matches the 'schedule' method above
|
||||
bool scheduleOrQueue(AngleBasedEvent *event,
|
||||
bool scheduleOrQueue(const char *msg, AngleBasedEvent *event,
|
||||
efitick_t edgeTimestamp,
|
||||
angle_t angle,
|
||||
action_s action,
|
||||
|
@ -25,7 +25,7 @@ public:
|
|||
#endif // EFI_UNIT_TEST
|
||||
|
||||
private:
|
||||
void schedule(AngleBasedEvent* event, action_s action);
|
||||
void schedule(const char *msg, AngleBasedEvent* event, action_s action);
|
||||
|
||||
bool assertNotInList(AngleBasedEvent *head, AngleBasedEvent *element);
|
||||
|
||||
|
|
Loading…
Reference in New Issue