rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
Functions
fuel_schedule.cpp File Reference

Detailed Description

Handles injection scheduling

Definition in file fuel_schedule.cpp.

Functions

void turnInjectionPinHigh (scheduler_arg_t const arg)
 
static float getInjectionAngleCorrection (float fuelMs, float oneDegreeUs)
 

Function Documentation

◆ getInjectionAngleCorrection()

static float getInjectionAngleCorrection ( float  fuelMs,
float  oneDegreeUs 
)
static

Definition at line 54 of file fuel_schedule.cpp.

54 {
56 if (mode == InjectionTimingMode::Start) {
57 // Start of injection gets no correction for duration
58 return 0;
59 }
60
61 efiAssert(ObdCode::CUSTOM_ERR_ASSERT, !std::isnan(fuelMs), "NaN fuelMs", false);
62
63 angle_t injectionDurationAngle = MS2US(fuelMs) / oneDegreeUs;
64 efiAssert(ObdCode::CUSTOM_ERR_ASSERT, !std::isnan(injectionDurationAngle), "NaN injectionDurationAngle", false);
65 assertAngleRange(injectionDurationAngle, "injectionDuration_r", ObdCode::CUSTOM_INJ_DURATION);
66
67 if (mode == InjectionTimingMode::Center) {
68 // Center of injection is half-corrected for duration
69 return injectionDurationAngle * 0.5f;
70 } else {
71 // End of injection gets "full correction" so we advance opening by the full duration
72 return injectionDurationAngle;
73 }
74}
static constexpr engine_configuration_s * engineConfiguration
@ CUSTOM_INJ_DURATION
@ CUSTOM_ERR_ASSERT
float angle_t

Referenced by InjectionEvent::computeInjectionAngle().

Here is the caller graph for this function:

◆ turnInjectionPinHigh()

void turnInjectionPinHigh ( scheduler_arg_t const  arg)

Definition at line 11 of file fuel_schedule.cpp.

11 {
12 auto const nowNt{ getTimeNowNt() };
13
14 auto const taggedPointer{ TaggedPointer<InjectionEvent>::fromRaw(arg) };
15 auto const event{ taggedPointer.getOriginalPointer() };
16 auto const hasStage2Injection{ taggedPointer.getFlag() };
17
18 for (auto const& output: event->outputs) {
19 if (output) {
20 output->open(nowNt);
21 }
22 }
23
24 if (hasStage2Injection) {
25 for (auto const& output: event->outputsStage2) {
26 if (output) {
27 output->open(nowNt);
28 }
29 }
30 }
31}
efitick_t getTimeNowNt()
Definition efitime.cpp:19
static SimplePwm outputs[GPPWM_CHANNELS]
Definition gppwm.cpp:8
constexpr T * getOriginalPointer() const
Definition scheduler.h:64
static constexpr TaggedPointer fromRaw(scheduler_arg_t raw)
Definition scheduler.h:52
Here is the call graph for this function:

Go to the source code of this file.