From 07f71c8dfaeaedb26d8589ee48b371a7b9d18c36 Mon Sep 17 00:00:00 2001 From: rusefi Date: Thu, 28 Nov 2019 15:24:30 -0500 Subject: [PATCH] steps towards dual ETB --- firmware/console/binary/tunerstudio.cpp | 4 +-- .../actuators/electronic_throttle.cpp | 34 +++++++++++-------- .../actuators/electronic_throttle.h | 6 +++- firmware/controllers/engine_controller.cpp | 2 +- 4 files changed, 28 insertions(+), 18 deletions(-) diff --git a/firmware/console/binary/tunerstudio.cpp b/firmware/console/binary/tunerstudio.cpp index d02b9571e5..5b69417487 100644 --- a/firmware/console/binary/tunerstudio.cpp +++ b/firmware/console/binary/tunerstudio.cpp @@ -257,7 +257,7 @@ static void onlineApplyWorkingCopyBytes(int currentPageId, uint32_t offset, int } } -extern EtbController etbController; +extern EtbController etbController[ETB_COUNT]; static const void * getStructAddr(int structId) { switch (structId) { @@ -275,7 +275,7 @@ static const void * getStructAddr(int structId) { return static_cast(&engine->triggerCentral.triggerState); #if EFI_ELECTRONIC_THROTTLE_BODY case LDS_ETB_PID_STATE_INDEX: - return static_cast(&etbController.etbPid); + return static_cast(&etbController[0].etbPid); #endif /* EFI_ELECTRONIC_THROTTLE_BODY */ #ifndef EFI_IDLE_CONTROL diff --git a/firmware/controllers/actuators/electronic_throttle.cpp b/firmware/controllers/actuators/electronic_throttle.cpp index ca2e6a3f90..d1d8633471 100644 --- a/firmware/controllers/actuators/electronic_throttle.cpp +++ b/firmware/controllers/actuators/electronic_throttle.cpp @@ -170,9 +170,6 @@ public: } }; -#define ETB_COUNT 2 - -static EtbHardware etbHardware[ETB_COUNT]; extern percent_t mockPedalPosition; @@ -183,9 +180,8 @@ static percent_t currentEtbDuty; // this macro clamps both positive and negative percentages from about -100% to 100% #define ETB_PERCENT_TO_DUTY(X) (maxF(minF((X * 0.01), ETB_DUTY_LIMIT - 0.01), 0.01 - ETB_DUTY_LIMIT)) -EtbController::EtbController(DcMotor *motor) -: m_motor(motor) -{ +void EtbController::init(DcMotor *motor) { + this->m_motor = motor; } @@ -333,7 +329,8 @@ DISPLAY(DISPLAY_IF(hasEtbPedalPositionSensor)) #endif /* EFI_TUNER_STUDIO */ } -EtbController etbController(&etbHardware[0].dcMotor); +static EtbHardware etbHardware[ETB_COUNT]; +EtbController etbController[ETB_COUNT]; /** * At the moment there are TWO ways to use this @@ -391,12 +388,14 @@ static void showEthInfo(void) { scheduleMsg(&logger, "%d: dir=%d DC=%f", i, etb->dcMotor.isOpenDirection(), etb->dcMotor.get()); } - etbController.etbPid.showPidStatus(&logger, "ETB"); + etbController[0].etbPid.showPidStatus(&logger, "ETB"); #endif /* EFI_PROD_CODE */ } static void etbPidReset() { - etbController.etbPid.reset(); + for (int i = 0 ; i < ETB_COUNT; i++) { + etbController[i].etbPid.reset(); + } } #if EFI_PROD_CODE @@ -542,8 +541,10 @@ void stopETBPins(void) { #endif /* EFI_PROD_CODE */ void onConfigurationChangeElectronicThrottleCallback(engine_configuration_s *previousConfiguration) { - bool shouldResetPid = !etbController.etbPid.isSame(&previousConfiguration->etb); - etbController.shouldResetPid = shouldResetPid; + bool shouldResetPid = !etbController[0].etbPid.isSame(&previousConfiguration->etb); + for (int i = 0 ; i < ETB_COUNT; i++) { + etbController[i].shouldResetPid = shouldResetPid; + } } void startETBPins(DECLARE_ENGINE_PARAMETER_SIGNATURE) { @@ -625,9 +626,12 @@ void initElectronicThrottle(DECLARE_ENGINE_PARAMETER_SIGNATURE) { addConsoleActionI("etb_freq", setEtbFrequency); #endif /* EFI_PROD_CODE */ - etbController.etbPid.initPidClass(&engineConfiguration->etb); + for (int i = 0 ; i < ETB_COUNT; i++) { + etbController[i].init(&etbHardware[i].dcMotor); + etbController[i].etbPid.initPidClass(&engineConfiguration->etb); + INJECT_ENGINE_REFERENCE(etbController[i]); + } - INJECT_ENGINE_REFERENCE(etbController); pedal2tpsMap.init(config->pedalToTpsTable, config->pedalToTpsPedalBins, config->pedalToTpsRpmBins); @@ -698,7 +702,9 @@ void initElectronicThrottle(DECLARE_ENGINE_PARAMETER_SIGNATURE) { etbPidReset(); - etbController.Start(); + for (int i = 0 ; i < ETB_COUNT; i++) { + etbController[i].Start(); + } } #endif /* EFI_ELECTRONIC_THROTTLE_BODY */ diff --git a/firmware/controllers/actuators/electronic_throttle.h b/firmware/controllers/actuators/electronic_throttle.h index da3c7902e3..2f72e70b85 100644 --- a/firmware/controllers/actuators/electronic_throttle.h +++ b/firmware/controllers/actuators/electronic_throttle.h @@ -14,12 +14,16 @@ #include "engine.h" #include "periodic_task.h" +#ifndef ETB_COUNT +#define ETB_COUNT 2 +#endif /* ETB_COUNT */ + class DcMotor; class EtbController final : public PeriodicTimerController { public: DECLARE_ENGINE_PTR; - EtbController(DcMotor *etb); + void init(DcMotor *motor); int getPeriodMs() override; void PeriodicTask() override; diff --git a/firmware/controllers/engine_controller.cpp b/firmware/controllers/engine_controller.cpp index 80c1837c66..ad542281ef 100644 --- a/firmware/controllers/engine_controller.cpp +++ b/firmware/controllers/engine_controller.cpp @@ -819,6 +819,6 @@ int getRusEfiVersion(void) { if (initBootloader() != 0) return 123; #endif /* EFI_BOOTLOADER_INCLUDE_CODE */ - return 20191127; + return 20191128; } #endif /* EFI_UNIT_TEST */