From d6bc2a70e7c4872835585570cfcf02007844e299 Mon Sep 17 00:00:00 2001 From: David Holdeman Date: Mon, 28 Sep 2020 20:39:03 -0500 Subject: [PATCH] transmission solenoid control (#1833) * simple trans controller * don't need check * we can loop! * use efi::size * pin mode configuration * set pin mode * switch to RegisteredOutputPin * size --- firmware/controllers/simple_tcu.cpp | 17 +++++++++++++++++ firmware/controllers/simple_tcu.h | 9 +++++++++ firmware/integration/rusefi_config.txt | 4 +++- firmware/tunerstudio/rusefi.input | 6 ++++++ 4 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 firmware/controllers/simple_tcu.cpp create mode 100644 firmware/controllers/simple_tcu.h diff --git a/firmware/controllers/simple_tcu.cpp b/firmware/controllers/simple_tcu.cpp new file mode 100644 index 0000000000..88a5380f11 --- /dev/null +++ b/firmware/controllers/simple_tcu.cpp @@ -0,0 +1,17 @@ +#include "simple_tcu.h" + +RegisteredOutputPin tcuSolenoids[efi::size(tcu_solenoid)]; + +void SimpleTransmissionController::SimpleTransmissionController() { + for (int i = 0; i < efi::size(tcu_solenoid); i++) { + tcuSolenoids[i].initPin("Transmission Solenoid", CONFIG(tcu_solenoid[i]), CONFIG{tcu_solenoid_mode[i]}); + } +} + +void SimpleTransmissionController::update(gear_e gear) { + for (int i = 0; i < efi::size(tcu_solenoid); i++) { + tcuSolenoids[i].setValue(CONFIG(tcuSolenoidTable)[i][static_cast(gear)]) + } + setCurrentGear(gear); + postState(); +} diff --git a/firmware/controllers/simple_tcu.h b/firmware/controllers/simple_tcu.h new file mode 100644 index 0000000000..8710c5bbd4 --- /dev/null +++ b/firmware/controllers/simple_tcu.h @@ -0,0 +1,9 @@ +#pragma once + +#include "tcu.h" + +class SimpleTransmissionController { +public: + void update(gear_e); + SimpleTransmissionController(); +} diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index 988256ddc1..e531e20b15 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -1399,8 +1399,10 @@ uint8_t[4] unusedsw;;"units", 1, 0, -20, 100, 0 pin_input_mode_e acSwitchMode + pin_output_mode_e[TCU_SOLENOID_COUNT iterate] tcu_solenoid_mode; + ! just a reminder that 'int' and 'float' are 4 bytes each - int[370] mainUnusedEnd;;"units", 1, 0, -20, 100, 0 + int[369] mainUnusedEnd;;"units", 1, 0, -20, 100, 0 ! end of engine_configuration_s end_struct diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index f5883d1da8..c306f2ab2f 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -2951,6 +2951,12 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@\x00\x31\x00\x00" field = "Solenoid 4 Pin" tcu_solenoid4, { tcuEnabled } field = "Solenoid 5 Pin" tcu_solenoid5, { tcuEnabled } field = "Solenoid 6 Pin" tcu_solenoid6, { tcuEnabled } + field = "Solenoid 1 Pin Mode" tcu_solenoid_mode1, { tcuEnabled } + field = "Solenoid 2 Pin Mode" tcu_solenoid_mode2, { tcuEnabled } + field = "Solenoid 3 Pin Mode" tcu_solenoid_mode3, { tcuEnabled } + field = "Solenoid 4 Pin Mode" tcu_solenoid_mode4, { tcuEnabled } + field = "Solenoid 5 Pin Mode" tcu_solenoid_mode5, { tcuEnabled } + field = "Solenoid 6 Pin Mode" tcu_solenoid_mode6, { tcuEnabled } dialog = buttonShiftInputPanel field = "Upshift Pin" tcuUpshiftButtonPin, { tcuEnabled }