26 efiPrintf(
"Priming pulse mass: %.4f g", primeMass);
53 if (ignSwitchCounter > 10) {
60 ignSwitchCounter = -1;
64 if (ignSwitchCounter == 0) {
66 constexpr float minimumPrimeDelayMs = 100;
70 getScheduler()->
schedule(
"primingDelay",
nullptr, startTime, action_s::make<onPrimeStartAdapter>(
this ));
72 efiPrintf(
"Skipped priming pulse since ignSwitchCounter = %lu", ignSwitchCounter);
97 if (durationMs <= 0) {
98 efiPrintf(
"Skipped zero-duration priming pulse.");
102 if (durationMs >= TOO_FAR_INTO_FUTURE_MS) {
103 criticalError(
"Priming duration too long %dms", durationMs);
107 efiPrintf(
"Firing priming pulse of %.2f ms", durationMs);
115 getScheduler()->
schedule(
"onPrimeStart",
nullptr, endTime, action_s::make<onPrimeEndAdapter>(
this ));
Non-volatile backup-RAM registers support.
uint32_t backupRamLoad(backup_ram_e idx)
void backupRamSave(backup_ram_e idx, uint32_t value)
TunerStudioOutputChannels outputChannels
constexpr auto & module()
floatms_t getPrimeDuration() const
void onSlowCallback() override
void setKeyCycleCounter(uint32_t count)
uint32_t getKeyCycleCounter() const
void onIgnitionStateChanged(bool ignitionOn) override
virtual SensorResult get() const =0
static float getOrZero(SensorType type)
efitick_t sumTickAndFloat(efitick_t ticks, float extra)
constexpr int32_t assertFloatFitsInto32BitsAndCast(const char *msg, float value)
Scheduler * getScheduler()
EngineRotationState * getEngineRotationState()
static EngineAccessor engine
static constexpr engine_configuration_s * engineConfiguration
static CCM_OPTIONAL FunctionalSensor clt(SensorType::Clt, MS2NT(10))
void startSimultaneousInjection()
void endSimultaneousInjectionOnlyTogglePins()
static bool isPrimeInjectionPulseSkipped()
Base class for sensors. Inherit this class to implement a new type of sensor.
virtual void schedule(const char *msg, scheduling_s *scheduling, efitick_t targetTime, action_s const &action)=0
Schedule an action to be executed in the future.
scaled_channel< uint8_t, 100, 1 > primingDelay
scaled_channel< int16_t, 1, 1 > primeBins[PRIME_CURVE_COUNT]
scaled_channel< uint8_t, 1, 5 > primeValues[PRIME_CURVE_COUNT]
bool isCylinderCleanupEnabled
uint8_t injectionPrimingCounter