rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
Public Member Functions | Data Fields
MapAveragingModule Class Reference

#include <map_averaging.h>

Inheritance diagram for MapAveragingModule:
Inheritance graph
[legend]
Collaboration diagram for MapAveragingModule:
Collaboration graph
[legend]

Public Member Functions

void onConfigurationChange (engine_configuration_s const *previousConfig) override
 
void onFastCallback () override
 
void onEnginePhase (float, efitick_t edgeTimestamp, float currentPhase, float nextPhase) override
 
void triggerCallback (uint32_t index, efitick_t edgeTimestamp)
 
void init ()
 
void submitSample (float voltsMap1, float voltsMap2)
 
- Public Member Functions inherited from EngineModule
virtual void initNoConfiguration ()
 
virtual void setDefaultConfiguration ()
 
virtual void onSlowCallback ()
 
virtual void onEngineStop ()
 
virtual void onIgnitionStateChanged (bool)
 
virtual bool needsDelayedShutoff ()
 

Data Fields

mapSampler samplers [MAX_CYLINDER_COUNT]
 

Detailed Description

Definition at line 67 of file map_averaging.h.

Member Function Documentation

◆ init()

void MapAveragingModule::init ( )

Definition at line 235 of file map_averaging.cpp.

235 {
236 for (size_t cylinderIndex = 0; cylinderIndex < MAX_CYLINDER_COUNT; cylinderIndex++) {
237 samplers[cylinderIndex].cylinderNumber = cylinderIndex;
238 }
239
241 efiPrintf("initMapAveraging...");
243 } else {
244 efiPrintf("Running without MapAveraging...");
245 }
246}
mapSampler samplers[MAX_CYLINDER_COUNT]
static constexpr engine_configuration_s * engineConfiguration
static void applyMapMinBufferLength()
uint8_t cylinderNumber
Here is the call graph for this function:

◆ onConfigurationChange()

void MapAveragingModule::onConfigurationChange ( engine_configuration_s const *  previousConfig)
overridevirtual

Reimplemented from EngineModule.

Definition at line 229 of file map_averaging.cpp.

229 {
230 if (!previousConfig || engineConfiguration->mapMinBufferLength != previousConfig->mapMinBufferLength) {
232 }
233}
Here is the call graph for this function:

◆ onEnginePhase()

void MapAveragingModule::onEnginePhase ( float  ,
efitick_t  edgeTimestamp,
float  currentPhase,
float  nextPhase 
)
overridevirtual

Reimplemented from EngineModule.

Definition at line 199 of file map_averaging.cpp.

202 {
204 return;
205 }
206
208
210
211 for (int i = 0; i < samplingCount; i++) {
212 angle_t samplingStart = engine->engineState.mapAveragingStart[i];
213
214 if (!isPhaseInRange(samplingStart, currentPhase, nextPhase)) {
215 continue;
216 }
217
218 float angleOffset = samplingStart - currentPhase;
219 if (angleOffset < 0) {
220 angleOffset += engine->engineState.engineCycle;
221 }
222
223 auto& s = samplers[i];
224
225 scheduleByAngle(&s.timer, edgeTimestamp, angleOffset, action_s::make<startAveraging>(&s));
226 }
227}
EngineState engineState
Definition engine.h:344
angle_t mapAveragingStart[MAX_CYLINDER_COUNT]
angle_t engineCycle
bool isPhaseInRange(float test, float current, float next)
Definition efilib.cpp:176
static EngineAccessor engine
Definition engine.h:413
@ MapAveragingTriggerCallback
efitick_t scheduleByAngle(scheduling_s *timer, efitick_t nowNt, angle_t angle, action_s const &action)
float angle_t
Here is the call graph for this function:

◆ onFastCallback()

void MapAveragingModule::onFastCallback ( )
overridevirtual

Reimplemented from EngineModule.

Definition at line 178 of file map_averaging.cpp.

178 {
181 angle_t start = interpolate2d(rpm, c->samplingAngleBins, c->samplingAngle);
182 efiAssertVoid(ObdCode::CUSTOM_ERR_MAP_START_ASSERT, !std::isnan(start), "start");
183
184 for (size_t i = 0; i < engineConfiguration->cylindersCount; i++) {
185 float cylinderStart = start + engine->cylinders[i].getAngleOffset();
186 wrapAngle(cylinderStart, "cylinderStart", ObdCode::CUSTOM_ERR_6562);
187 engine->engineState.mapAveragingStart[i] = cylinderStart;
188 }
189
190 angle_t duration = interpolate2d(rpm, c->samplingWindowBins, c->samplingWindow);
191 assertAngleRange(duration, "samplingDuration", ObdCode::CUSTOM_ERR_6563);
192
193 // Clamp the duration to slightly less than one cylinder period
195 engine->engineState.mapAveragingDuration = clampF(10, duration, cylinderPeriod - 10);
196}
OneCylinder cylinders[MAX_CYLINDER_COUNT]
Definition engine.h:291
angle_t mapAveragingDuration
angle_t getAngleOffset() const
static float getOrZero(SensorType type)
Definition sensor.h:83
@ CUSTOM_ERR_6562
@ CUSTOM_ERR_MAP_START_ASSERT
@ CUSTOM_ERR_6563
void wrapAngle(angle_t &angle, const char *msg, ObdCode code)
Here is the call graph for this function:

◆ submitSample()

void MapAveragingModule::submitSample ( float  voltsMap1,
float  voltsMap2 
)

◆ triggerCallback()

void MapAveragingModule::triggerCallback ( uint32_t  index,
efitick_t  edgeTimestamp 
)

Field Documentation

◆ samplers

mapSampler MapAveragingModule::samplers[MAX_CYLINDER_COUNT]

Definition at line 77 of file map_averaging.h.

Referenced by init(), and onEnginePhase().


The documentation for this class was generated from the following files: