rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
flex_sensor.cpp
Go to the documentation of this file.
1/**
2 * @file flex_sensor.cpp
3 */
4
5#include "pch.h"
6#include "flex_sensor.h"
7
8void FlexSensor::callback(efitick_t nowNt, bool value) {
9 latestCallbackTime = nowNt;
11 if (value) {
12 if (gotRising) {
13 frequency = 1 / flexFreq.getElapsedSecondsAndReset(nowNt);
15 } else {
16 flexFreq.reset(nowNt);
17 }
18
19 // Start timing pulse width on rising edge
20 flexPulse.reset(nowNt);
21 // got rising edge
22 gotRising = true;
23 } else {
25 if (gotRising) {
26 // End pulse timing on falling edge
27 pulseWidthUs = flexPulse.getElapsedUs(nowNt);
28
29 if (pulseWidthUs < 900) {
30 flexFuelTemp.invalidate(UnexpectedCode::Low);
32 } else if (pulseWidthUs > 5100) {
33 flexFuelTemp.invalidate(UnexpectedCode::High);
35 } else {
36 // -40C = 1000us
37 // 125C = 5000us
38 float tempC = interpolateClamped(1000, -40, 5000, 125, pulseWidthUs);
41 }
42 }
43 }
44#if EFI_PROD_CODE
45 // TODO: confusing output channel name!
47#endif // EFI_PROD_CODE
48}
49
51 efiPrintf("flex counter %d", flexCallbackCounter);
52 efiPrintf("lowFlexCallbackCounter counter %d", lowFlexCallbackCounter);
53 efiPrintf("flex freq %f", frequency);
54 efiPrintf("pulseWidthUs %f", pulseWidthUs);
55 efiPrintf("latestCallbackTime %lld", latestCallbackTime);
56}
57
58void FlexSensor::Register(bool withTempSensor) {
60
61 if (withTempSensor) {
63 }
64}
65
float filter(float input)
Definition biquad.cpp:74
TunerStudioOutputChannels outputChannels
Definition engine.h:109
float frequency
Definition flex_sensor.h:66
Timer flexFreq
Definition flex_sensor.h:59
Timer flexPulse
Definition flex_sensor.h:59
FunctionalSensor flexSensor
Definition flex_sensor.h:53
int lowFlexCallbackCounter
Definition flex_sensor.h:63
bool gotRising
Definition flex_sensor.h:61
StoredValueSensor flexFuelTemp
Definition flex_sensor.h:54
void callback(efitick_t nowNt, bool value)
efitick_t latestCallbackTime
Definition flex_sensor.h:68
float pulseWidthUs
Definition flex_sensor.h:67
Biquad flexTempFilter
Definition flex_sensor.h:57
void Register(bool withTempSensor)
void unregister()
int flexCallbackCounter
Definition flex_sensor.h:64
void postRawValue(float inputValue, efitick_t timestamp) override
bool Register()
Definition sensor.cpp:131
void unregister()
Definition sensor.cpp:135
void setValidValue(float value, efitick_t timestamp)
float interpolateClamped(float x1, float y1, float x2, float y2, float x)
static EngineAccessor engine
Definition engine.h:413
bool warning(ObdCode code, const char *fmt,...)
@ CUSTOM_FLEX_HIGH
@ CUSTOM_FLEX_LOW
tempC("WBO: Temperature", SensorCategory.SENSOR_INPUTS, FieldType.INT16, 1936, 1.0, 500.0, 1000.0, "C")