rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
Public Member Functions | Private Attributes
TripOdometer Class Reference

#include <trip_odometer.h>

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

Public Member Functions

void onSlowCallback () override
 
void reset ()
 
void consumeFuel (float grams, efitick_t nowNt)
 
uint32_t getConsumedGrams () const
 
float getConsumedGramsRemainder () const
 
float getConsumptionGramPerSecond () const
 
uint32_t getDistanceMeters () const
 
uint32_t getIgnitionOnTime () const
 
uint32_t getEngineRunTime () const
 
- Public Member Functions inherited from EngineModule
virtual void initNoConfiguration ()
 
virtual void setDefaultConfiguration ()
 
virtual void onConfigurationChange (engine_configuration_s const *)
 
virtual void onFastCallback ()
 
virtual void onEngineStop ()
 
virtual void onIgnitionStateChanged (bool)
 
virtual bool needsDelayedShutoff ()
 
virtual void onEnginePhase (float, efitick_t, angle_t, angle_t)
 

Private Attributes

uint32_t m_consumedGrams = 0
 
float m_consumedRemainder = 0
 
float m_rate = 0
 
uint32_t m_distanceMeters = 0
 
float m_distanceRemainder = 0
 
uint32_t m_slowCallbackCounter = 0
 
uint32_t m_ignitionOnSeconds = 0
 
uint32_t m_engineRunningSeconds = 0
 
Timer m_timer
 

Detailed Description

Definition at line 3 of file trip_odometer.h.

Member Function Documentation

◆ consumeFuel()

void TripOdometer::consumeFuel ( float  grams,
efitick_t  nowNt 
)

Definition at line 15 of file trip_odometer.cpp.

15 {
16// we have some drama with simulator busy loop in reality :(
17#if EFI_PROD_CODE || EFI_UNIT_TEST
18 m_consumedRemainder += grams;
19
20 // 1000grams of fuel between invocations of TripOdometer logic means something very wrong, we do not control cruise ship engines yet!
21 if (m_consumedRemainder > 1000) {
22 firmwareError(ObdCode::OBD_PCM_Processor_Fault, "m_consumedRemainder busy loop %f %f", m_consumedRemainder, grams);
23 return;
24 }
25 // A racecar with a very large fuel tank might consume 60kg of fuel on a single run of the ECU
26 // we use integers to gain dynamic range of about 10^9 which is more than float would give us
27 // optimized for lots of small pulses
28 while (m_consumedRemainder >= 1) {
31 }
32
33 float elapsedSecond = m_timer.getElapsedSecondsAndReset(nowNt);
34
35 // If it's been a long time since last injection, ignore this pulse
36 if (elapsedSecond > 0.2f) {
37 m_rate = 0;
38 } else {
39 m_rate = grams / elapsedSecond;
40 }
41#endif // EFI_PROD_CODE || EFI_UNIT_TEST
42}
float m_consumedRemainder
uint32_t m_consumedGrams
void firmwareError(ObdCode code, const char *fmt,...)
@ OBD_PCM_Processor_Fault
Here is the call graph for this function:

◆ getConsumedGrams()

uint32_t TripOdometer::getConsumedGrams ( ) const

Definition at line 44 of file trip_odometer.cpp.

44 {
45 return m_consumedGrams;
46}

Referenced by configureRusefiLuaHooks().

Here is the caller graph for this function:

◆ getConsumedGramsRemainder()

float TripOdometer::getConsumedGramsRemainder ( ) const
inline

Definition at line 12 of file trip_odometer.h.

12 {
14 }

Referenced by configureRusefiLuaHooks().

Here is the caller graph for this function:

◆ getConsumptionGramPerSecond()

float TripOdometer::getConsumptionGramPerSecond ( ) const

Definition at line 48 of file trip_odometer.cpp.

48 {
49 return m_rate;
50}

Referenced by configureRusefiLuaHooks().

Here is the caller graph for this function:

◆ getDistanceMeters()

uint32_t TripOdometer::getDistanceMeters ( ) const

Definition at line 77 of file trip_odometer.cpp.

77 {
78 return m_distanceMeters;
79}
uint32_t m_distanceMeters

◆ getEngineRunTime()

uint32_t TripOdometer::getEngineRunTime ( ) const

Definition at line 85 of file trip_odometer.cpp.

85 {
87}
uint32_t m_engineRunningSeconds

◆ getIgnitionOnTime()

uint32_t TripOdometer::getIgnitionOnTime ( ) const

Definition at line 81 of file trip_odometer.cpp.

81 {
83}
uint32_t m_ignitionOnSeconds

◆ onSlowCallback()

void TripOdometer::onSlowCallback ( )
overridevirtual

Reimplemented from EngineModule.

Definition at line 52 of file trip_odometer.cpp.

52 {
53 float meterPerSecond = Sensor::getOrZero(SensorType::VehicleSpeed) / 3.6f;
54 float metersThisTick = meterPerSecond * (SLOW_CALLBACK_PERIOD_MS / 1000.0f);
55
56 m_distanceRemainder += metersThisTick;
57 while (m_distanceRemainder > 1.0f) {
60 }
61
62 constexpr float slowCallbackPerSecond = 1000 / SLOW_CALLBACK_PERIOD_MS;
64 if (m_slowCallbackCounter == slowCallbackPerSecond) {
66
68
69#if EFI_SHAFT_POSITION_INPUT
72 }
73#endif // EFI_SHAFT_POSITION_INPUT
74 }
75}
RpmCalculator rpmCalculator
Definition engine.h:306
bool isRunning() const
static float getOrZero(SensorType type)
Definition sensor.h:83
uint32_t m_slowCallbackCounter
float m_distanceRemainder
static EngineAccessor engine
Definition engine.h:413
Here is the call graph for this function:

◆ reset()

void TripOdometer::reset ( )

Definition at line 3 of file trip_odometer.cpp.

Field Documentation

◆ m_consumedGrams

uint32_t TripOdometer::m_consumedGrams = 0
private

Definition at line 22 of file trip_odometer.h.

Referenced by consumeFuel(), getConsumedGrams(), and reset().

◆ m_consumedRemainder

float TripOdometer::m_consumedRemainder = 0
private

Definition at line 23 of file trip_odometer.h.

Referenced by consumeFuel(), getConsumedGramsRemainder(), and reset().

◆ m_distanceMeters

uint32_t TripOdometer::m_distanceMeters = 0
private

Definition at line 27 of file trip_odometer.h.

Referenced by getDistanceMeters(), onSlowCallback(), and reset().

◆ m_distanceRemainder

float TripOdometer::m_distanceRemainder = 0
private

Definition at line 28 of file trip_odometer.h.

Referenced by onSlowCallback(), and reset().

◆ m_engineRunningSeconds

uint32_t TripOdometer::m_engineRunningSeconds = 0
private

Definition at line 33 of file trip_odometer.h.

Referenced by getEngineRunTime(), onSlowCallback(), and reset().

◆ m_ignitionOnSeconds

uint32_t TripOdometer::m_ignitionOnSeconds = 0
private

Definition at line 32 of file trip_odometer.h.

Referenced by getIgnitionOnTime(), onSlowCallback(), and reset().

◆ m_rate

float TripOdometer::m_rate = 0
private

Definition at line 24 of file trip_odometer.h.

Referenced by consumeFuel(), and getConsumptionGramPerSecond().

◆ m_slowCallbackCounter

uint32_t TripOdometer::m_slowCallbackCounter = 0
private

Definition at line 31 of file trip_odometer.h.

Referenced by onSlowCallback(), and reset().

◆ m_timer

Timer TripOdometer::m_timer
private

Definition at line 35 of file trip_odometer.h.

Referenced by consumeFuel().


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