funny games with dash via Lua to override CAN dash profile values #6235

This commit is contained in:
Andrey 2024-03-21 10:48:17 -04:00
parent 099de78f56
commit 17069719dc
7 changed files with 77 additions and 1 deletions

View File

@ -7,3 +7,31 @@ void luaDeInitPins();
struct AirmassModelBase;
AirmassModelBase& getLuaAirmassModel();
bool getAuxDigital(int index);
struct LuaOverrideSensor final : public Sensor {
LuaOverrideSensor(SensorType type, SensorType underlyingType) : Sensor(type) {
m_underlyingType = underlyingType;
reset();
}
void reset() {
overrideValue = -1;
}
void setOverrideValue(float value) {
overrideValue = value;
}
SensorResult get() const final override {
if (overrideValue < 0)
return Sensor::get(m_underlyingType);
return overrideValue;
}
void showInfo(const char* sensorName) const override {
efiPrintf("LuaOverrideSensor \"%s\": override value %.2f", sensorName, overrideValue);
}
float overrideValue = -1;
SensorType m_underlyingType;
};

View File

@ -1,6 +1,6 @@
#include "global.h"
#include "sensor_type.h"
// was generated automatically by rusEFI tool from sensor_type.h // by enum_to_string.jar tool on Sat Mar 09 14:05:10 UTC 2024
// was generated automatically by rusEFI tool from sensor_type.h // by enum_to_string.jar tool on Thu Mar 21 09:51:05 EDT 2024
// see also gen_config_and_enums.bat
@ -53,6 +53,12 @@ case SensorType::CompressorDischargePressure:
return "CompressorDischargePressure";
case SensorType::CompressorDischargeTemperature:
return "CompressorDischargeTemperature";
case SensorType::DashOverrideBatteryVoltage:
return "DashOverrideBatteryVoltage";
case SensorType::DashOverrideClt:
return "DashOverrideClt";
case SensorType::DashOverrideRpm:
return "DashOverrideRpm";
case SensorType::DetectedGear:
return "DetectedGear";
case SensorType::DriverThrottleIntent:

View File

@ -128,6 +128,10 @@ enum class SensorType : unsigned char {
IgnKeyVoltage,
DashOverrideRpm,
DashOverrideClt,
DashOverrideBatteryVoltage,
AuxLinear1,
AuxLinear2,

View File

@ -4,6 +4,8 @@
#pragma once
// fine-grained method to facilitate testing
void initOverrideSensors();
// Call this once at startup to initialize, configure, and subscribe sensors
void initNewSensors();

View File

@ -76,6 +76,16 @@ static void deInitAuxDigital() {
}
}
static LuaOverrideSensor overrideRpm(SensorType::DashOverrideRpm, SensorType::Rpm);
static LuaOverrideSensor overrideClt(SensorType::DashOverrideClt, SensorType::Clt);
static LuaOverrideSensor overrideBatteryVoltage(SensorType::DashOverrideBatteryVoltage, SensorType::BatteryVoltage);
void initOverrideSensors() {
overrideRpm.Register();
overrideClt.Register();
overrideBatteryVoltage.Register();
}
// one-time start-up
// see also 'reconfigureSensors'
void initNewSensors() {
@ -83,6 +93,8 @@ void initNewSensors() {
initCanSensors();
#endif
initOverrideSensors();
initVbatt();
initMap();
initTps();

View File

@ -71,6 +71,9 @@ public enum SensorType {
LuaGauge1,
LuaGauge2,
IgnKeyVoltage,
DashOverrideRpm,
DashOverrideClt,
DashOverrideBatteryVoltage,
AuxLinear1,
AuxLinear2,
AuxSpeed1,

View File

@ -1,6 +1,8 @@
#include "pch.h"
#include "func_chain.h"
#include "init.h"
#include "lua_hooks.h"
struct AddOne final : public SensorConverter {
SensorResult convert(float input) const {
@ -82,3 +84,22 @@ TEST(FunctionChain, TestGet)
fc.get<Doubler>();
fc.get<SubOne>();
}
TEST(Sensor, OverrideValue) {
EngineTestHelper eth(engine_type_e::HARLEY);
// huh? i do not get this EXPECT_FALSE(Sensor::get(SensorType::Rpm).Valid);
initOverrideSensors();
Sensor::setMockValue(SensorType::Rpm, 1000);
EXPECT_TRUE(Sensor::get(SensorType::Rpm).Valid);
EXPECT_TRUE(Sensor::get(SensorType::DashOverrideRpm).Valid);
ASSERT_DOUBLE_EQ(1000, Sensor::get(SensorType::Rpm).Value);
ASSERT_DOUBLE_EQ(1000, Sensor::get(SensorType::DashOverrideRpm).Value);
LuaOverrideSensor * sensor = (LuaOverrideSensor*)Sensor::getSensorOfType(SensorType::DashOverrideRpm);
sensor->setOverrideValue(3);
ASSERT_DOUBLE_EQ(3, Sensor::get(SensorType::DashOverrideRpm).Value);
sensor->reset();
ASSERT_DOUBLE_EQ(1000, Sensor::get(SensorType::DashOverrideRpm).Value);
}