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

Functions

static void flexCallback (efitick_t nowNt, bool value)
 
static void flexExtiCallback (void *, efitick_t nowNt)
 
void initFlexSensor (bool isFirstTime)
 
void deInitFlexSensor ()
 

Variables

static FunctionalSensor flexSensor (SensorType::FuelEthanolPercent, MS2NT(30000))
 
static StoredValueSensor flexFuelTemp (SensorType::FuelTemperature, MS2NT(30000))
 
static FlexConverter converter
 
static Biquad flexTempFilter
 
static Timer flexFreq
 
static Timer flexPulse
 
int flexCallbackCounter = 0
 
static int lowFlexCallbackCounter = 0
 
static float frequency
 
static float pulseWidthUs
 
static efitick_t latestCallbackTime
 
static Gpio flexPin = Gpio::Unassigned
 

Function Documentation

◆ deInitFlexSensor()

void deInitFlexSensor ( )

Definition at line 98 of file init_flex.cpp.

98 {
101
102#if EFI_PROD_CODE
103 if (!isBrainPinValid(flexPin)) {
104 return;
105 }
106
108
110#endif
111}
void unregister()
Definition sensor.cpp:135
@ Unassigned
void efiExtiDisablePin(brain_pin_e brainPin)
static FunctionalSensor flexSensor(SensorType::FuelEthanolPercent, MS2NT(30000))
static Gpio flexPin
Definition init_flex.cpp:55
static StoredValueSensor flexFuelTemp(SensorType::FuelTemperature, MS2NT(30000))
bool isBrainPinValid(brain_pin_e brainPin)

Referenced by stopSensors().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ flexCallback()

static void flexCallback ( efitick_t  nowNt,
bool  value 
)
static

Definition at line 25 of file init_flex.cpp.

25 {
26 latestCallbackTime = nowNt;
28 if (value) {
29 frequency = 1 / flexFreq.getElapsedSecondsAndReset(nowNt);
31
32 // Start timing pulse width on rising edge
33 flexPulse.reset(nowNt);
34 } else {
36 // End pulse timing on falling edge
37 pulseWidthUs = flexPulse.getElapsedUs(nowNt);
38
39 if (pulseWidthUs < 900) {
40 flexFuelTemp.invalidate(UnexpectedCode::Low);
42 } else if (pulseWidthUs > 5100) {
43 flexFuelTemp.invalidate(UnexpectedCode::High);
45 } else {
46 // -40C = 1000us
47 // 125C = 5000us
48 float tempC = interpolateClamped(1000, -40, 5000, 125, pulseWidthUs);
51 }
52 }
53}
float filter(float input)
Definition biquad.cpp:74
void postRawValue(float inputValue, efitick_t timestamp) override
void setValidValue(float value, efitick_t timestamp)
float interpolateClamped(float x1, float y1, float x2, float y2, float x)
bool warning(ObdCode code, const char *fmt,...)
static efitick_t latestCallbackTime
Definition init_flex.cpp:23
static Timer flexFreq
Definition init_flex.cpp:17
static int lowFlexCallbackCounter
Definition init_flex.cpp:20
int flexCallbackCounter
Definition init_flex.cpp:19
static float pulseWidthUs
Definition init_flex.cpp:22
static Timer flexPulse
Definition init_flex.cpp:17
static float frequency
Definition init_flex.cpp:21
static Biquad flexTempFilter
Definition init_flex.cpp:14
@ CUSTOM_FLEX_HIGH
@ CUSTOM_FLEX_LOW
tempC("WBO: Temperature", SensorCategory.SENSOR_INPUTS, FieldType.INT16, 1936, 1.0, 500.0, 1000.0, "C")

Referenced by flexExtiCallback().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ flexExtiCallback()

static void flexExtiCallback ( void *  ,
efitick_t  nowNt 
)
static

Definition at line 57 of file init_flex.cpp.

57 {
59}
static constexpr engine_configuration_s * engineConfiguration
static void flexCallback(efitick_t nowNt, bool value)
Definition init_flex.cpp:25
bool efiReadPin(brain_pin_e pin)
Definition io_pins.cpp:89

Referenced by initFlexSensor().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ initFlexSensor()

void initFlexSensor ( bool  isFirstTime)

Definition at line 64 of file init_flex.cpp.

64 {
65#if EFI_PROD_CODE
67 PAL_EVENT_MODE_BOTH_EDGES, flexExtiCallback, nullptr) < 0) {
68 return;
69 }
71#endif
72
73 // 0.01 means filter bandwidth of ~1hz with ~100hz sensor
76
77#if EFI_PROD_CODE
78 if (isFirstTime) {
79 addConsoleAction("flexinfo", []() {
80 efiPrintf("flex counter %d", flexCallbackCounter);
81 efiPrintf("lowFlexCallbackCounter counter %d", lowFlexCallbackCounter);
82 efiPrintf("flex freq %f", frequency);
83 efiPrintf("pulseWidthUs %f", pulseWidthUs);
84 efiPrintf("latestCallbackTime %lld", latestCallbackTime);
85 });
86 }
87
88#endif // EFI_PROD_CODE
89
91
92 // If an analog fuel temp sensor is configured, don't use the flex sensor for fuel temp
95 }
96}
bool isAdcChannelValid(adc_channel_e hwChannel)
Definition adc_inputs.h:23
void configureLowpass(float samplingFrequency, float cutoffFrequency, float Q=0.54f)
Definition biquad.cpp:48
void setFunction(ConverterType &func)
bool Register()
Definition sensor.cpp:131
void addConsoleAction(const char *token, Void callback)
Register console action without parameters.
int efiExtiEnablePin(const char *msg, brain_pin_e brainPin, uint32_t mode, ExtiCallback cb, void *cb_data)
static FlexConverter converter
Definition init_flex.cpp:12
static void flexExtiCallback(void *, efitick_t nowNt)
Definition init_flex.cpp:57

Referenced by sensorStartUpOrReconfiguration().

Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ converter

FlexConverter converter
static

Definition at line 12 of file init_flex.cpp.

Referenced by initFlexSensor().

◆ flexCallbackCounter

int flexCallbackCounter = 0

Definition at line 19 of file init_flex.cpp.

Referenced by flexCallback(), initFlexSensor(), and updateRawSensors().

◆ flexFreq

Timer flexFreq
static

Definition at line 17 of file init_flex.cpp.

Referenced by flexCallback().

◆ flexFuelTemp

StoredValueSensor flexFuelTemp(SensorType::FuelTemperature, MS2NT(30000)) ( SensorType::FuelTemperature  ,
MS2NT(30000)   
)
static

◆ flexPin

Gpio flexPin = Gpio::Unassigned
static

Definition at line 55 of file init_flex.cpp.

Referenced by deInitFlexSensor(), flexExtiCallback(), and initFlexSensor().

◆ flexPulse

Timer flexPulse
static

Definition at line 17 of file init_flex.cpp.

Referenced by flexCallback().

◆ flexSensor

FunctionalSensor flexSensor(SensorType::FuelEthanolPercent, MS2NT(30000)) ( SensorType::FuelEthanolPercent  ,
MS2NT(30000)   
)
static

◆ flexTempFilter

Biquad flexTempFilter
static

Definition at line 14 of file init_flex.cpp.

Referenced by flexCallback(), and initFlexSensor().

◆ frequency

float frequency
static

◆ latestCallbackTime

efitick_t latestCallbackTime
static

Definition at line 23 of file init_flex.cpp.

Referenced by flexCallback(), and initFlexSensor().

◆ lowFlexCallbackCounter

int lowFlexCallbackCounter = 0
static

Definition at line 20 of file init_flex.cpp.

Referenced by flexCallback(), and initFlexSensor().

◆ pulseWidthUs

float pulseWidthUs
static

Definition at line 22 of file init_flex.cpp.

Referenced by flexCallback(), and initFlexSensor().

Go to the source code of this file.