Implement `FuelLevelSensor` class #7180

This commit is contained in:
kifir 2024-12-21 00:00:00 +02:00 committed by rusefillc
parent c8a72d3c76
commit bf34e55cd6
5 changed files with 38 additions and 7 deletions

View File

@ -0,0 +1,12 @@
//
// Created by kifir on 12/20/24.
//
#include "pch.h"
#include "fuel_level_sensor.h"
FuelLevelSensor::FuelLevelSensor(const SensorType type, const efidur_t timeoutPeriod)
: FunctionalSensorImpl(type, timeoutPeriod) {
setFunction(m_FuelLevelFunc);
}

View File

@ -0,0 +1,17 @@
//
// Created by kifir on 12/20/24.
//
#pragma once
#include "functional_sensor_impl.h"
#include "fuel_level_func.h"
class FuelLevelSensor : public FunctionalSensorImpl<FuelLevelFunc> {
public:
FuelLevelSensor(SensorType type, efidur_t timeoutPeriod);
void showInfo(const char* sensorName) const override;
private:
FuelLevelFunc m_FuelLevelFunc;
};

View File

@ -2,6 +2,7 @@
#include "stored_value_sensor.h"
#include "proxy_sensor.h"
#include "functional_sensor.h"
#include "fuel_level_sensor.h"
#include "redundant_sensor.h"
#include "redundant_ford_tps.h"
#include "fallback_sensor.h"
@ -32,6 +33,11 @@ void FunctionalSensor::showInfo(const char* sensorName) const {
}
}
void FuelLevelSensor::showInfo(const char* sensorName) const {
const auto value = get();
efiPrintf("Sensor \"%s\": Raw value: %.2f Valid: %s Converted value %.2f", sensorName, getRaw(), boolToString(value.Valid), value.Value);
}
#if EFI_CAN_SUPPORT || EFI_UNIT_TEST
#include "can_sensor.h"

View File

@ -3,6 +3,7 @@ CONTROLLERS_SENSORS_SRC_CPP = \
$(PROJECT_DIR)/controllers/sensors/core/functional_sensor_base.cpp \
$(PROJECT_DIR)/controllers/sensors/core/functional_sensor_impl.cpp \
$(PROJECT_DIR)/controllers/sensors/core/functional_sensor.cpp \
$(PROJECT_DIR)/controllers/sensors/core/fuel_level_sensor.cpp \
$(PROJECT_DIR)/controllers/sensors/core/sensor.cpp \
$(PROJECT_DIR)/controllers/sensors/thermistors.cpp \
$(PROJECT_DIR)/controllers/sensors/allsensors.cpp \

View File

@ -1,12 +1,9 @@
#include "pch.h"
#include "functional_sensor.h"
#include "adc_subscription.h"
#include "fuel_level_func.h"
#include "fuel_level_sensor.h"
static FunctionalSensor fuelSensor(SensorType::FuelLevel, /* timeout = */ MS2NT(500));
static FuelLevelFunc fuelCurve;
static FuelLevelSensor fuelSensor(SensorType::FuelLevel, /* timeout = */ MS2NT(500));
void initFuelLevel() {
adc_channel_e channel = engineConfiguration->fuelLevelSensor;
@ -15,8 +12,6 @@ void initFuelLevel() {
return;
}
fuelSensor.setFunction(fuelCurve);
// Filtering with such a small bandwidth helps prevent noisy data from fuel tank slosh
AdcSubscription::SubscribeSensor(fuelSensor, channel, /*lowpassCutoff =*/ 0.05f);
fuelSensor.Register();