TCU features and fixes (#4082)

* add tcc pwm freq field

* add pc fields, make trans fields conditional

* make button shift fields conditional, remove duplicates

* add 3-2 solenoid fields

* add PC curves

* try combining tcc curves

* try combining pc curves

* use airmass instead of tps for pc

* reduce airmass axis

* increase axis digits

* duplicate for per shift, change names

* add pc per shift arrays

* try moving tables

* move more tables

* init solenoid pins

* start adding pwm stuff, change some array names

* fix gear issue

* fix multiple shift issue

* fix transmission controllers not working

* fix transmission controllers not working 2

* rearrange and virtual some things

* make getMode const

* fix pwm
This commit is contained in:
David Holdeman 2022-04-18 19:09:27 -05:00 committed by GitHub
parent bb405a1abd
commit 7de7ea6ad0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 188 additions and 64 deletions

View File

@ -196,13 +196,13 @@ uint16_t rpmAcceleration;dRPM;"RPM/s",1, 0, 0, 5, 0
uint16_t autoscale tuneCrc16;@@GAUGE_NAME_TUNE_CRC16@@;"crc16", 1, 0, 0, 0, 0
uint8_t autoscale fuelClosedLoopBinIdx;;"", 1, 0, 0, 0, 0
uint8_t autoscale tcuCurrentGear;@@GAUGE_NAME_CURRENT_GEAR@@;"gear", 1, 0, 0, 0, 0
int8_t autoscale tcuCurrentGear;@@GAUGE_NAME_CURRENT_GEAR@@;"gear", 1, 0, -1, 10, 0
int16_t autoscale rawPpsSecondary;;"V",{1/@@PACK_MULT_VOLTAGE@@}, 0, 0, 5, 3
int8_t[12 iterate] autoscale knock;;"dBv",1, 0, 0, 0, 0
uint8_t autoscale tcuDesiredGear;@@GAUGE_NAME_DESIRED_GEAR@@;"gear",1, 0, 0, 0, 0
int8_t autoscale tcuDesiredGear;@@GAUGE_NAME_DESIRED_GEAR@@;"gear",1, 0, -1, 10, 0
uint8_t autoscale flexPercent;@@GAUGE_NAME_FLEX@@;"%",{1/2}, 0, 0, 0, 0
int16_t autoscale rawIdlePositionSensor;;"V",{1/@@PACK_MULT_VOLTAGE@@}, 0, 0, 5, 3

View File

@ -16,8 +16,10 @@ public:
ButtonShiftController();
void update() override;
void init() override;
GearControllerMode mode = GearControllerMode::ButtonShift;
void init() override;
GearControllerMode getMode() const {
return GearControllerMode::ButtonShift;
}
private:
ButtonDebounce debounceUp;
ButtonDebounce debounceDown;

View File

@ -227,7 +227,7 @@ static void doPeriodicSlowCallback() {
if (engineConfiguration->tcuEnabled && engineConfiguration->gearControllerMode != GearControllerMode::None) {
if (engine->gearController == NULL) {
initGearController();
} else if (engine->gearController->mode != engineConfiguration->gearControllerMode) {
} else if (engine->gearController->getMode() != engineConfiguration->gearControllerMode) {
initGearController();
}
engine->gearController->update();

View File

@ -24,7 +24,7 @@ void GearControllerBase::initTransmissionController() {
void GearControllerBase::update() {
if (transmissionController == NULL) {
initTransmissionController();
} else if (transmissionController->mode != engineConfiguration->transmissionControllerMode) {
} else if (transmissionController->getMode() != engineConfiguration->transmissionControllerMode) {
initTransmissionController();
}
// We are responsible for telling the transmission controller

View File

@ -11,18 +11,18 @@
class GearControllerBase {
public:
virtual void update();
gear_e getDesiredGear() const;
virtual gear_e getDesiredGear() const;
virtual void init();
GearControllerMode mode = GearControllerMode::None;
virtual GearControllerMode getMode() const {
return GearControllerMode::ButtonShift;
}
protected:
virtual gear_e setDesiredGear(gear_e);
void initTransmissionController();
TransmissionControllerBase *transmissionController;
private:
gear_e desiredGear = NEUTRAL;
protected:
gear_e setDesiredGear(gear_e);
void initTransmissionController();
private:
void postState();
TransmissionControllerBase *transmissionController;
};
void initGearController();

View File

@ -8,7 +8,9 @@ class SimpleTransmissionController: public TransmissionControllerBase {
public:
void update(gear_e);
void init();
TransmissionControllerMode mode = TransmissionControllerMode::SimpleTransmissionController;
TransmissionControllerMode getMode() const {
return TransmissionControllerMode::SimpleTransmissionController;
}
};
SimpleTransmissionController* getSimpleTransmissionController();

View File

@ -215,6 +215,8 @@ public:
OutputPin tcuSolenoids[TCU_SOLENOID_COUNT];
OutputPin tcuTccOnoffSolenoid;
OutputPin tcuTccPwmSolenoid;
OutputPin tcuPcSolenoid;
OutputPin tcu32Solenoid;
private:
void startInjectionPins();

View File

@ -3,6 +3,9 @@
#include "tc_4l6x.h"
Gm4l6xTransmissionController gm4l6xTransmissionController;
static SimplePwm tccPwm("TCC Control");
static SimplePwm pcPwm("Pressure Control");
static SimplePwm shift32Pwm("3-2 Shift Control");
void Gm4l6xTransmissionController::init() {
for (size_t i = 0; i < efi::size(engineConfiguration->tcu_solenoid); i++) {
@ -10,11 +13,32 @@ void Gm4l6xTransmissionController::init() {
}
enginePins.tcuTccOnoffSolenoid.initPin("TCC On/Off Solenoid", engineConfiguration->tcu_tcc_onoff_solenoid, &engineConfiguration->tcu_tcc_onoff_solenoid_mode);
enginePins.tcuTccPwmSolenoid.initPin("TCC PWM Solenoid", engineConfiguration->tcu_tcc_pwm_solenoid, &engineConfiguration->tcu_tcc_pwm_solenoid_mode);
startSimplePwm(&tccPwm,
"TCC",
&engine->executor,
&enginePins.tcuTccPwmSolenoid,
engineConfiguration->tcu_tcc_pwm_solenoid_freq,
0);
enginePins.tcuPcSolenoid.initPin("Pressure Control Solenoid", engineConfiguration->tcu_pc_solenoid_pin, &engineConfiguration->tcu_pc_solenoid_pin_mode);
startSimplePwm(&pcPwm,
"Line Pressure",
&engine->executor,
&enginePins.tcuPcSolenoid,
engineConfiguration->tcu_pc_solenoid_freq,
0);
enginePins.tcu32Solenoid.initPin("3-2 Shift Solenoid", engineConfiguration->tcu_32_solenoid_pin, &engineConfiguration->tcu_32_solenoid_pin_mode);
startSimplePwm(&shift32Pwm,
"3-2 Solenoid",
&engine->executor,
&enginePins.tcu32Solenoid,
engineConfiguration->tcu_32_solenoid_freq,
0);
}
void Gm4l6xTransmissionController::update(gear_e gear) {
setCurrentGear(gear);
setTccState();
setPcState(gear);
postState();
#if EFI_TUNER_STUDIO
@ -49,11 +73,11 @@ void Gm4l6xTransmissionController::setTccState() {
return;
}
if (getCurrentGear() == GEAR_4) {
int lockSpeed = interpolate2d(tps.Value, engineConfiguration->tcu_tccTpsBins, engineConfiguration->tcu_tccLockSpeed);
int unlockSpeed = interpolate2d(tps.Value, engineConfiguration->tcu_tccTpsBins, engineConfiguration->tcu_tccUnlockSpeed);
int lockSpeed = interpolate2d(tps.Value, config->tcu_tccTpsBins, config->tcu_tccLockSpeed);
int unlockSpeed = interpolate2d(tps.Value, config->tcu_tccTpsBins, config->tcu_tccUnlockSpeed);
if (vss.Value > lockSpeed) {
enginePins.tcuTccOnoffSolenoid.setValue(1);
} else if (vss.Value < lockSpeed) {
} else if (vss.Value < unlockSpeed) {
enginePins.tcuTccOnoffSolenoid.setValue(1);
}
} else {
@ -61,6 +85,34 @@ void Gm4l6xTransmissionController::setTccState() {
}
}
void Gm4l6xTransmissionController::setPcState(gear_e gear) {
if (gear != getCurrentGear()) {
}
uint8_t (*pcts)[sizeof(config->tcu_pcAirmassBins)/sizeof(config->tcu_pcAirmassBins[0])];
switch (getCurrentGear()) {
case REVERSE:
pcts = &config->tcu_pcValsR;
break;
case NEUTRAL:
pcts = &config->tcu_pcValsN;
break;
case GEAR_1:
pcts = &config->tcu_pcValsR;
break;
case GEAR_2:
pcts = &config->tcu_pcValsR;
break;
case GEAR_3:
pcts = &config->tcu_pcValsR;
break;
case GEAR_4:
pcts = &config->tcu_pcValsR;
break;
}
int pct = interpolate2d(engine->engineState.sd.airMassInOneCylinder, config->tcu_pcAirmassBins, *pcts);
pcPwm.setSimplePwmDutyCycle(pct*0.01);
}
Gm4l6xTransmissionController* getGm4l6xTransmissionController() {
return &gm4l6xTransmissionController;
}

View File

@ -6,10 +6,13 @@ class Gm4l6xTransmissionController: public TransmissionControllerBase {
public:
void update(gear_e);
void init();
TransmissionControllerMode mode = TransmissionControllerMode::Gm4l6x;
TransmissionControllerMode getMode() const {
return TransmissionControllerMode::Gm4l6x;
}
private:
gear_e setCurrentGear(gear_e gear);
void setTccState();
void setPcState(gear_e gear);
};
Gm4l6xTransmissionController* getGm4l6xTransmissionController();

View File

@ -15,12 +15,14 @@
class TransmissionControllerBase {
public:
void update(gear_e);
void init();
gear_e getCurrentGear() const;
TransmissionControllerMode mode = TransmissionControllerMode::None;
virtual void update(gear_e);
virtual void init();
virtual gear_e getCurrentGear() const;
virtual TransmissionControllerMode getMode() const {
return TransmissionControllerMode::None;
}
protected:
gear_e currentGear = NEUTRAL;
gear_e setCurrentGear(gear_e);
virtual gear_e setCurrentGear(gear_e);
void postState();
};

View File

@ -1521,9 +1521,7 @@ int8_t[MAX_CYLINDER_COUNT iterate] fuelTrim;;"Percent", @@PERCENT_TRIM_BYTE_PACK
uint16_t[HPFP_COMPENSATION_SIZE] autoscale hpfpCompensationLoadBins;;"cc/lobe", 0.001, 0, 0, 65, 3
uint8_t[HPFP_COMPENSATION_SIZE] autoscale hpfpCompensationRpmBins;;"RPM", @@RPM_1_BYTE_PACKING_MULT@@, 0, 0, 12500, 0
uint8_t[8] tcu_tccTpsBins;;"TPS", 1, 0, 0, 255, 0
uint8_t[8] tcu_tccLockSpeed;;"MPH", 1, 0, 0, 255, 0
uint8_t[8] tcu_tccUnlockSpeed;;"MPH", 1, 0, 0, 255, 0
uint8_t[24] unusedTpsBins;;"TPS", 1, 0, 0, 255, 0
output_pin_e[4 iterate] stepper_raw_output;
@ -1561,8 +1559,15 @@ output_pin_e tcu_tcc_onoff_solenoid
pin_output_mode_e tcu_tcc_onoff_solenoid_mode
output_pin_e tcu_tcc_pwm_solenoid
pin_output_mode_e tcu_tcc_pwm_solenoid_mode
pwm_freq_t tcu_tcc_pwm_solenoid_freq
output_pin_e tcu_pc_solenoid_pin
pin_output_mode_e tcu_pc_solenoid_pin_mode
pwm_freq_t tcu_pc_solenoid_freq
output_pin_e tcu_32_solenoid_pin
pin_output_mode_e tcu_32_solenoid_pin_mode
pwm_freq_t tcu_32_solenoid_freq
uint8_t[224] mainUnusedEnd;;"units", 1, 0, 0, 1, 0
uint8_t[222] mainUnusedEnd;;"units", 1, 0, 0, 1, 0
! end of engine_configuration_s
end_struct
@ -1701,6 +1706,25 @@ uint16_t[TRIM_SIZE] fuelTrimRpmBins;;"rpm", 1, 0, 0, 20000, 0
cyl_trim_s[12 iterate] fuelTrims
uint16_t[CRANKING_CURVE_SIZE] crankingFuelCoefE100;;"ratio", 0.01, 0, 0, 50, 2
uint8_t[8] tcu_pcAirmassBins;;"Airmass", 0.02, 0, 0, 255, 2
uint8_t[8] tcu_pcValsR;;"%", 1, 0, 0, 255, 0
uint8_t[8] tcu_pcValsN;;"%", 1, 0, 0, 255, 0
uint8_t[8] tcu_pcVals1;;"%", 1, 0, 0, 255, 0
uint8_t[8] tcu_pcVals2;;"%", 1, 0, 0, 255, 0
uint8_t[8] tcu_pcVals3;;"%", 1, 0, 0, 255, 0
uint8_t[8] tcu_pcVals4;;"%", 1, 0, 0, 255, 0
uint8_t[8] tcu_pcVals12;;"%", 1, 0, 0, 255, 0
uint8_t[8] tcu_pcVals23;;"%", 1, 0, 0, 255, 0
uint8_t[8] tcu_pcVals34;;"%", 1, 0, 0, 255, 0
uint8_t[8] tcu_pcVals21;;"%", 1, 0, 0, 255, 0
uint8_t[8] tcu_pcVals32;;"%", 1, 0, 0, 255, 0
uint8_t[8] tcu_pcVals43;;"%", 1, 0, 0, 255, 0
uint8_t[8] tcu_tccTpsBins;;"TPS", 1, 0, 0, 255, 0
uint8_t[8] tcu_tccLockSpeed;;"MPH", 1, 0, 0, 255, 0
uint8_t[8] tcu_tccUnlockSpeed;;"MPH", 1, 0, 0, 255, 0
end_struct
! Pedal Position Sensor

View File

@ -640,21 +640,50 @@ enable2ndByteCanID = false
gauge = tChargeGauge
curve = tccLockCurve, "TCC Lock Curve"
columnLabel = "TPS", "Lockup Speed"
columnLabel = "TPS", "Lock Speed", "Unlock Speed"
xAxis = 0, 100, 10
yAxis = 0, 100, 10
xBins = tcu_tccTpsBins, TPSValue
yBins = tcu_tccLockSpeed
gauge = TPSGauge
curve = tccUnlockCurve, "TCC Unlock Curve"
columnLabel = "TPS", "Unlock Speed"
xAxis = 0, 100, 10
yAxis = 0, 100, 10
xBins = tcu_tccTpsBins, TPSValue
yBins = tcu_tccUnlockSpeed
gauge = TPSGauge
curve = pcPerGearCurve, "Transmission Line Pressure Control"
columnLabel = "Airmass", ""
xAxis = 0, 5, 10
yAxis = 0, 100, 10
xBins = tcu_pcAirmassBins, chargeAirMass
yBins = tcu_pcValsR
yBins = tcu_pcValsN
yBins = tcu_pcVals1
yBins = tcu_pcVals2
yBins = tcu_pcVals3
yBins = tcu_pcVals4
lineLabel = "R%"
lineLabel = "N%"
lineLabel = "1%"
lineLabel = "2%"
lineLabel = "3%"
lineLabel = "4%"
curve = pcPerShiftCurve, "Transmission Line Pressure Control - Shift"
columnLabel = "Airmass", ""
xAxis = 0, 5, 10
yAxis = 0, 100, 10
xBins = tcu_pcAirmassBins, chargeAirMass
yBins = tcu_pcVals12
yBins = tcu_pcVals23
yBins = tcu_pcVals34
yBins = tcu_pcVals21
yBins = tcu_pcVals32
yBins = tcu_pcVals43
lineLabel = "1->2%"
lineLabel = "2->3%"
lineLabel = "3->4%"
lineLabel = "2->1%"
lineLabel = "3->2%"
lineLabel = "4->3%"
[TableEditor]
; table_id, map3d_id, "title", page
@ -1515,6 +1544,8 @@ menuDialog = main
subMenu = tcuControls, "Transmission Settings"
subMenu = tcuSolenoidTableTbl, "TCU Solenoids"
subMenu = tccCurves, "TCC Lock/Unlock Speed"
subMenu = pcPerGearDialog, "Line Pressure Per Gear"
subMenu = pcPerShiftDialog, "Line Pressure Per Shift"
menu = "&Sensors"
# Base analog input settings
@ -3414,37 +3445,38 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@\x00\x31\x00\x00"
dialog = transmissionPanel
field = "TCU Enabled" tcuEnabled
field = "Gear Controller" gearControllerMode, { tcuEnabled }
field = "Transmission Controller" transmissionControllerMode, {tcuEnabled}
field = "Transmission Controller" transmissionControllerMode, { tcuEnabled }
dialog = solenoidPanel, "Shift Solenoids"
field = "Solenoid 1 Pin" tcu_solenoid1, { tcuEnabled }
field = "Solenoid 1 Pin Mode" tcu_solenoid_mode1, { tcuEnabled }
field = "Solenoid 2 Pin" tcu_solenoid2, { tcuEnabled }
field = "Solenoid 2 Pin Mode" tcu_solenoid_mode2, { tcuEnabled }
field = "Solenoid 3 Pin" tcu_solenoid3, { tcuEnabled }
field = "Solenoid 3 Pin Mode" tcu_solenoid_mode3, { tcuEnabled }
field = "Solenoid 4 Pin" tcu_solenoid4, { tcuEnabled }
field = "Solenoid 4 Pin Mode" tcu_solenoid_mode4, { tcuEnabled }
field = "Solenoid 5 Pin" tcu_solenoid5, { tcuEnabled }
field = "Solenoid 5 Pin Mode" tcu_solenoid_mode5, { tcuEnabled }
field = "Solenoid 6 Pin" tcu_solenoid6, { tcuEnabled }
field = "Solenoid 6 Pin Mode" tcu_solenoid_mode6, { tcuEnabled }
field = "TCC On/Off Solenoid Pin" tcu_tcc_onoff_solenoid, { tcuEnabled }
field = "TCC On/Off Solenoid Pin Mode" tcu_tcc_onoff_solenoid_mode, { tcuEnabled }
field = "TCC PWM Solenoid Pin" tcu_tcc_pwm_solenoid, { tcuEnabled }
field = "TCC PWM Solenoid Pin Mode" tcu_tcc_pwm_solenoid_mode, { tcuEnabled }
field = "Solenoid 1 Pin" tcu_solenoid1, { tcuEnabled && (transmissionControllerMode == @@TransmissionControllerMode_SimpleTransmissionController@@ || transmissionControllerMode == @@TransmissionControllerMode_Gm4l6x@@) }
field = "Solenoid 1 Pin Mode" tcu_solenoid_mode1, { tcuEnabled && (transmissionControllerMode == @@TransmissionControllerMode_SimpleTransmissionController@@ || transmissionControllerMode == @@TransmissionControllerMode_Gm4l6x@@) }
field = "Solenoid 2 Pin" tcu_solenoid2, { tcuEnabled && (transmissionControllerMode == @@TransmissionControllerMode_SimpleTransmissionController@@ || transmissionControllerMode == @@TransmissionControllerMode_Gm4l6x@@) }
field = "Solenoid 2 Pin Mode" tcu_solenoid_mode2, { tcuEnabled && (transmissionControllerMode == @@TransmissionControllerMode_SimpleTransmissionController@@ || transmissionControllerMode == @@TransmissionControllerMode_Gm4l6x@@) }
field = "Solenoid 3 Pin" tcu_solenoid3, { tcuEnabled && (transmissionControllerMode == @@TransmissionControllerMode_SimpleTransmissionController@@ || transmissionControllerMode == @@TransmissionControllerMode_Gm4l6x@@) }
field = "Solenoid 3 Pin Mode" tcu_solenoid_mode3, { tcuEnabled && (transmissionControllerMode == @@TransmissionControllerMode_SimpleTransmissionController@@ || transmissionControllerMode == @@TransmissionControllerMode_Gm4l6x@@) }
field = "Solenoid 4 Pin" tcu_solenoid4, { tcuEnabled && (transmissionControllerMode == @@TransmissionControllerMode_SimpleTransmissionController@@ || transmissionControllerMode == @@TransmissionControllerMode_Gm4l6x@@) }
field = "Solenoid 4 Pin Mode" tcu_solenoid_mode4, { tcuEnabled && (transmissionControllerMode == @@TransmissionControllerMode_SimpleTransmissionController@@ || transmissionControllerMode == @@TransmissionControllerMode_Gm4l6x@@) }
field = "Solenoid 5 Pin" tcu_solenoid5, { tcuEnabled && (transmissionControllerMode == @@TransmissionControllerMode_SimpleTransmissionController@@ || transmissionControllerMode == @@TransmissionControllerMode_Gm4l6x@@) }
field = "Solenoid 5 Pin Mode" tcu_solenoid_mode5, { tcuEnabled && (transmissionControllerMode == @@TransmissionControllerMode_SimpleTransmissionController@@ || transmissionControllerMode == @@TransmissionControllerMode_Gm4l6x@@) }
field = "Solenoid 6 Pin" tcu_solenoid6, { tcuEnabled && (transmissionControllerMode == @@TransmissionControllerMode_SimpleTransmissionController@@ || transmissionControllerMode == @@TransmissionControllerMode_Gm4l6x@@) }
field = "Solenoid 6 Pin Mode" tcu_solenoid_mode6, { tcuEnabled && (transmissionControllerMode == @@TransmissionControllerMode_SimpleTransmissionController@@ || transmissionControllerMode == @@TransmissionControllerMode_Gm4l6x@@) }
field = "TCC On/Off Solenoid Pin" tcu_tcc_onoff_solenoid, { tcuEnabled && (transmissionControllerMode == @@TransmissionControllerMode_Gm4l6x@@) }
field = "TCC On/Off Solenoid Pin Mode" tcu_tcc_onoff_solenoid_mode, { tcuEnabled && (transmissionControllerMode == @@TransmissionControllerMode_Gm4l6x@@) }
field = "TCC PWM Solenoid Pin" tcu_tcc_pwm_solenoid, { tcuEnabled && (transmissionControllerMode == @@TransmissionControllerMode_Gm4l6x@@) }
field = "TCC PWM Solenoid Pin Mode" tcu_tcc_pwm_solenoid_mode, { tcuEnabled && (transmissionControllerMode == @@TransmissionControllerMode_Gm4l6x@@) }
field = "TCC PWM Solenoid Frequency" tcu_tcc_pwm_solenoid_freq, { tcuEnabled && (transmissionControllerMode == @@TransmissionControllerMode_Gm4l6x@@) }
field = "Pressure Control Solenoid Pin" tcu_pc_solenoid_pin, { tcuEnabled && (transmissionControllerMode == @@TransmissionControllerMode_Gm4l6x@@) }
field = "Pressure Control Solenoid Pin Mode" tcu_pc_solenoid_pin_mode, { tcuEnabled && (transmissionControllerMode == @@TransmissionControllerMode_Gm4l6x@@) }
field = "Pressure Control Solenoid Frequency" tcu_pc_solenoid_freq, { tcuEnabled && (transmissionControllerMode == @@TransmissionControllerMode_Gm4l6x@@) }
field = "3-2 Solenoid Pin" tcu_32_solenoid_pin, { tcuEnabled && (transmissionControllerMode == @@TransmissionControllerMode_Gm4l6x@@) }
field = "3-2 Solenoid Pin mode" tcu_32_solenoid_pin_mode, { tcuEnabled && (transmissionControllerMode == @@TransmissionControllerMode_Gm4l6x@@) }
field = "3-2 Solenoid Frequency" tcu_32_solenoid_freq, { tcuEnabled && (transmissionControllerMode == @@TransmissionControllerMode_Gm4l6x@@) }
dialog = buttonShiftInputPanel, "Switch/Button Shift"
field = "Upshift Pin" tcuUpshiftButtonPin, { tcuEnabled }
field = "Upshift Pin Mode" tcuUpshiftButtonPinMode, { tcuEnabled }
field = "Downshift Pin" tcuDownshiftButtonPin, { tcuEnabled }
field = "Downshift Pin Mode" tcuDownshiftButtonPinMode, { tcuEnabled }
dialog = buttonShiftInputPanel, "Switch/Button Shift"
field = "Upshift Pin" tcuUpshiftButtonPin, { tcuEnabled }
field = "Upshift Pin Mode" tcuUpshiftButtonPinMode, { tcuEnabled }
field = "Downshift Pin" tcuDownshiftButtonPin, { tcuEnabled }
field = "Downshift Pin Mode" tcuDownshiftButtonPinMode, { tcuEnabled }
field = "Upshift Pin" tcuUpshiftButtonPin, { tcuEnabled && gearControllerMode == @@GearControllerMode_ButtonShift@@ }
field = "Upshift Pin Mode" tcuUpshiftButtonPinMode, { tcuEnabled && gearControllerMode == @@GearControllerMode_ButtonShift@@ }
field = "Downshift Pin" tcuDownshiftButtonPin, { tcuEnabled && gearControllerMode == @@GearControllerMode_ButtonShift@@ }
field = "Downshift Pin Mode" tcuDownshiftButtonPinMode, { tcuEnabled && gearControllerMode == @@GearControllerMode_ButtonShift@@ }
dialog = tcuControls, "Transmission Settings"
panel = transmissionPanel
@ -3453,7 +3485,12 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@\x00\x31\x00\x00"
dialog = tccCurves, "TCC Lock/Unlock Speed"
panel = tccLockCurve
panel = tccUnlockCurve
dialog = pcPerGearDialog, "Line Pressure Per Gear Steady State"
panel = pcPerGearCurve
dialog = pcPerShiftDialog, "Line Pressure Per Shift"
panel = pcPerShiftCurve
;Boost Open Loop