diff --git a/firmware/console/binary/generated/live_data_fragments.cpp b/firmware/console/binary/generated/live_data_fragments.cpp index 7219df4766..aae076dbae 100644 --- a/firmware/console/binary/generated/live_data_fragments.cpp +++ b/firmware/console/binary/generated/live_data_fragments.cpp @@ -3,7 +3,7 @@ #include "FragmentEntry.h" #include "tunerstudio.h" -static FragmentEntry fragments[15]; +static FragmentEntry fragments[16]; void initFragments() { fragments[0].init((const uint8_t *)getStructAddr(LDS_high_pressure_fuel_pump), sizeof(high_pressure_fuel_pump_s)); @@ -21,4 +21,5 @@ void initFragments() { fragments[12].init((const uint8_t *)getStructAddr(LDS_wall_fuel_state), sizeof(wall_fuel_state_s)); fragments[13].init((const uint8_t *)getStructAddr(LDS_idle_state), sizeof(idle_state_s)); fragments[14].init((const uint8_t *)getStructAddr(LDS_ignition_state), sizeof(ignition_state_s)); + fragments[15].init((const uint8_t *)getStructAddr(LDS_electronic_throttle), sizeof(electronic_throttle_s)); }; diff --git a/firmware/console/binary/generated/live_data_ids.h b/firmware/console/binary/generated/live_data_ids.h index 72bfb38f22..f852c0cdba 100644 --- a/firmware/console/binary/generated/live_data_ids.h +++ b/firmware/console/binary/generated/live_data_ids.h @@ -17,4 +17,5 @@ LDS_trigger_state, LDS_wall_fuel_state, LDS_idle_state, LDS_ignition_state, +LDS_electronic_throttle, } live_data_e; diff --git a/firmware/console/binary/tunerstudio.cpp b/firmware/console/binary/tunerstudio.cpp index 67ebdb2f1a..324d56f3d4 100644 --- a/firmware/console/binary/tunerstudio.cpp +++ b/firmware/console/binary/tunerstudio.cpp @@ -218,6 +218,9 @@ const void * getStructAddr(live_data_e structId) { return static_cast(&engine->module().unmock()); case LDS_ignition_state: return static_cast(&engine->ignitionState); + case LDS_electronic_throttle: + // todo: figure out how to handle two units? + return nullptr; //#if EFI_ELECTRONIC_THROTTLE_BODY // case LDS_ETB_PID: diff --git a/firmware/console/binary/tunerstudio.h b/firmware/console/binary/tunerstudio.h index b1dad30b43..4efa96e6df 100644 --- a/firmware/console/binary/tunerstudio.h +++ b/firmware/console/binary/tunerstudio.h @@ -8,6 +8,7 @@ #pragma once #include "global.h" #include "tunerstudio_io.h" +#include "electronic_throttle_generated.h" typedef struct { int queryCommandCounter; diff --git a/firmware/controllers/actuators/electronic_throttle.cpp b/firmware/controllers/actuators/electronic_throttle.cpp index f1375c8cbb..b536b60dde 100644 --- a/firmware/controllers/actuators/electronic_throttle.cpp +++ b/firmware/controllers/actuators/electronic_throttle.cpp @@ -275,7 +275,7 @@ expected EtbController::getSetpointWastegate() const { return clampF(0, m_wastegatePosition, 100); } -expected EtbController::getSetpointEtb() const { +expected EtbController::getSetpointEtb() { // Autotune runs with 50% target position if (m_isAutotune) { return 50.0f; @@ -313,14 +313,17 @@ expected EtbController::getSetpointEtb() const { // [0, 100] -> [idle, 100] // 0% target from table -> idle position as target // 100% target from table -> 100% target position - percent_t targetPosition = interpolateClamped(0, etbIdleAddition, 100, 100, targetFromTable); + idlePosition = interpolateClamped(0, etbIdleAddition, 100, 100, targetFromTable); // Apply any adjustment from Lua - targetPosition += engine->engineState.luaAdjustments.etbTargetPositionAdd; + luaAdjustment = engine->engineState.luaAdjustments.etbTargetPositionAdd; + + percent_t targetPosition = idlePosition + luaAdjustment; // Apply any adjustment that this throttle alone needs // Clamped to +-10 to prevent anything too wild - targetPosition += clampF(-10, getThrottleTrim(rpm, targetPosition), 10); + trim = clampF(-10, getThrottleTrim(rpm, targetPosition), 10); + targetPosition += trim; // Lastly, apply ETB rev limiter auto etbRpmLimit = engineConfiguration->etbRevLimitStart; @@ -334,6 +337,7 @@ expected EtbController::getSetpointEtb() const { float maxPosition = engineConfiguration->etbMaximumPosition; if (maxPosition < 70) { + // compatibility with legacy tunes, todo: remove in Aug of 2022 maxPosition = 100; } else { // Don't allow max position over 100 diff --git a/firmware/controllers/actuators/electronic_throttle_generated.h b/firmware/controllers/actuators/electronic_throttle_generated.h new file mode 100644 index 0000000000..92de05ae59 --- /dev/null +++ b/firmware/controllers/actuators/electronic_throttle_generated.h @@ -0,0 +1,24 @@ +// this section was generated automatically by rusEFI tool ConfigDefinition.jar based on (unknown script) controllers/actuators\electronic_throttle.txt Thu Apr 14 14:39:06 EDT 2022 +// by class com.rusefi.output.CHeaderConsumer +// begin +#pragma once +#include "rusefi_types.h" +// start of electronic_throttle_s +struct electronic_throttle_s { + /** + * offset 0 + */ + float idlePosition = (float)0; + /** + * offset 4 + */ + float trim = (float)0; + /** + * offset 8 + */ + float luaAdjustment = (float)0; + /** total size 12*/ +}; + +// end +// this section was generated automatically by rusEFI tool ConfigDefinition.jar based on (unknown script) controllers/actuators\electronic_throttle.txt Thu Apr 14 14:39:06 EDT 2022 diff --git a/firmware/controllers/actuators/electronic_throttle_impl.h b/firmware/controllers/actuators/electronic_throttle_impl.h index d65c59ce92..5dd311b320 100644 --- a/firmware/controllers/actuators/electronic_throttle_impl.h +++ b/firmware/controllers/actuators/electronic_throttle_impl.h @@ -13,6 +13,7 @@ #include "sensor.h" #include "efi_pid.h" #include "error_accumulator.h" +#include "electronic_throttle_generated.h" /** * Hard code ETB update speed. @@ -23,7 +24,7 @@ #define ETB_LOOP_FREQUENCY 500 #define DEFAULT_ETB_PWM_FREQUENCY 800 -class EtbController : public IEtbController { +class EtbController : public IEtbController, electronic_throttle_s { public: bool init(etb_function_e function, DcMotor *motor, pid_s *pidParameters, const ValueProvider3D* pedalMap, bool initializeThrottles) override; void setIdlePosition(percent_t pos) override; @@ -44,7 +45,7 @@ public: expected observePlant() const override; expected getSetpoint() override; - expected getSetpointEtb() const; + expected getSetpointEtb(); expected getSetpointWastegate() const; expected getSetpointIdleValve() const; diff --git a/firmware/integration/LiveData.yaml b/firmware/integration/LiveData.yaml index 761e3008ba..b752420b4f 100644 --- a/firmware/integration/LiveData.yaml +++ b/firmware/integration/LiveData.yaml @@ -20,3 +20,5 @@ Usages: wall_fuel_state: [ "WallFuelState.java", "controllers/algo" ] idle_state: [ "IdleState.java", "controllers/actuators" ] ignition_state: [ "IgnitionState.java", "controllers/algo" ] + electronic_throttle: [ "ElectronicThrottle.java", "controllers/actuators" ] + diff --git a/java_console/io/src/main/java/com/rusefi/enums/live_data_e.java b/java_console/io/src/main/java/com/rusefi/enums/live_data_e.java index f79998985f..37b03584a9 100644 --- a/java_console/io/src/main/java/com/rusefi/enums/live_data_e.java +++ b/java_console/io/src/main/java/com/rusefi/enums/live_data_e.java @@ -19,4 +19,5 @@ public enum live_data_e { LDS_wall_fuel_state, LDS_idle_state, LDS_ignition_state, + LDS_electronic_throttle, } diff --git a/java_console/io/src/main/java/com/rusefi/ldmp/StateDictionary.java b/java_console/io/src/main/java/com/rusefi/ldmp/StateDictionary.java index f180c5e877..4e72e43796 100644 --- a/java_console/io/src/main/java/com/rusefi/ldmp/StateDictionary.java +++ b/java_console/io/src/main/java/com/rusefi/ldmp/StateDictionary.java @@ -38,6 +38,7 @@ public enum StateDictionary { register(live_data_e.LDS_launch_control_state, LaunchControl.VALUES, "launch_control"); register(live_data_e.LDS_high_pressure_fuel_pump, HighPressureFuelPump.VALUES, "high_pressure_fuel_pump"); register(live_data_e.LDS_ignition_state, IgnitionState.VALUES, "advance_map"); + register(live_data_e.LDS_electronic_throttle, ElectronicThrottle.VALUES, "electronic_throttle"); if (map.size() != live_data_e.values().length) { Set missing = new HashSet<>(Arrays.asList(live_data_e.values())); missing.removeAll(map.keySet()); diff --git a/java_console/models/src/main/java/com/rusefi/config/generated/ElectronicThrottle.java b/java_console/models/src/main/java/com/rusefi/config/generated/ElectronicThrottle.java new file mode 100644 index 0000000000..badfdd1159 --- /dev/null +++ b/java_console/models/src/main/java/com/rusefi/config/generated/ElectronicThrottle.java @@ -0,0 +1,17 @@ +package com.rusefi.config.generated; + +// this file was generated automatically by rusEFI tool ConfigDefinition.jar based on (unknown script) controllers/actuators\electronic_throttle.txt Thu Apr 14 14:39:06 EDT 2022 + +// by class com.rusefi.output.FileJavaFieldsConsumer +import com.rusefi.config.*; + +public class ElectronicThrottle { + public static final Field IDLEPOSITION = Field.create("IDLEPOSITION", 0, FieldType.FLOAT); + public static final Field TRIM = Field.create("TRIM", 4, FieldType.FLOAT); + public static final Field LUAADJUSTMENT = Field.create("LUAADJUSTMENT", 8, FieldType.FLOAT); + public static final Field[] VALUES = { + IDLEPOSITION, + TRIM, + LUAADJUSTMENT, + }; +}