rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
frequency_sensor.cpp
Go to the documentation of this file.
1/**
2 * @file frequency_sensor.cpp
3 */
4
5#include "pch.h"
6
7#include "frequency_sensor.h"
8
10
11#if EFI_PROD_CODE
12// Callback adapter since we can't pass a member function to a callback
13static void freqSensorExtiCallback(void* arg, efitick_t nowNt) {
14 reinterpret_cast<FrequencySensor*>(arg)->onEdge(nowNt);
15}
16#endif // EFI_PROD_CODE
17
19 if (!isBrainPinValid(pin)) {
20 return;
21 }
22
23 // Filter parameter greater than or equal to 0.5 impossible as it causes filter instability, clamp
24 // far under that value.
25 if (filterParameter > 0.35f) {
26 filterParameter = 0.35f;
27 }
28
29 m_filter.configureLowpass(1, filterParameter);
30
32
33#if EFI_PROD_CODE
34 if (efiExtiEnablePin(getSensorName(), pin, PAL_EVENT_MODE_FALLING_EDGE,
35 freqSensorExtiCallback, reinterpret_cast<void*>(this)) < 0) {
36 return;
37 }
38#endif // EFI_PROD_CODE
39
40 m_pin = pin;
41
42 Register();
43}
44
46 if (!isBrainPinValid(m_pin)) {
47 return;
48 }
49
50#if EFI_PROD_CODE
52#endif
53
55}
56
57void FrequencySensor::onEdge(efitick_t nowNt) {
58 // diagnostics
60 float frequency = 1 / m_edgeTimer.getElapsedSecondsAndReset(nowNt);
61
62 if (useBiQuad) {
64 }
65
66 postRawValue(frequency, nowNt);
67}
float filter(float input)
Definition biquad.cpp:74
void configureLowpass(float samplingFrequency, float cutoffFrequency, float Q=0.54f)
Definition biquad.cpp:48
void onEdge(efitick_t nowNt)
void initIfValid(brain_pin_e pin, SensorConverter &converter, float filterParameter)
void postRawValue(float inputValue, efitick_t timestamp) override
bool Register()
Definition sensor.cpp:131
const char * getSensorName() const
Definition sensor.h:130
@ Unassigned
void efiExtiDisablePin(brain_pin_e brainPin)
int efiExtiEnablePin(const char *msg, brain_pin_e brainPin, uint32_t mode, ExtiCallback cb, void *cb_data)
static void freqSensorExtiCallback(void *arg, efitick_t nowNt)
converter
static float frequency
Definition init_flex.cpp:21
bool isBrainPinValid(brain_pin_e brainPin)
brain_pin_e pin
Definition stm32_adc.cpp:15