diff --git a/locales/en/messages.json b/locales/en/messages.json
index 45a6b5fb..b025e9a5 100644
--- a/locales/en/messages.json
+++ b/locales/en/messages.json
@@ -1979,12 +1979,24 @@
"pidTuningRcExpo": {
"message": "RC Expo"
},
+ "pidTuningTPAMode": {
+ "message": "TPA Mode"
+ },
"pidTuningTPA": {
"message": "TPA"
},
+ "pidTuningTPARate": {
+ "message": "TPA Rate"
+ },
"pidTuningTPABreakPoint": {
"message": "TPA Breakpoint"
},
+ "pidTuningTPAPD": {
+ "message": "PD"
+ },
+ "pidTuningTPAD": {
+ "message": "D"
+ },
"pidTuningThrottleCurvePreview": {
"message": "Throttle Curve Preview"
},
diff --git a/src/js/msp/MSPHelper.js b/src/js/msp/MSPHelper.js
index 19387bfa..89fe4e15 100644
--- a/src/js/msp/MSPHelper.js
+++ b/src/js/msp/MSPHelper.js
@@ -1290,6 +1290,7 @@ MspHelper.prototype.process_data = function(dataHandler) {
FC.ADVANCED_TUNING.thrustLinearization = data.readU8();
if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_45)) {
+ FC.ADVANCED_TUNING.tpaMode = data.readU8();
FC.ADVANCED_TUNING.tpaRate = parseFloat((data.readU8() / 100).toFixed(2));
FC.ADVANCED_TUNING.tpaBreakpoint = data.readU16();
}
@@ -2316,6 +2317,7 @@ MspHelper.prototype.crunch = function(code, modifierCode = undefined) {
.push8(FC.ADVANCED_TUNING.thrustLinearization);
if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_45)) {
+ buffer.push8(FC.ADVANCED_TUNING.tpaMode);
buffer.push8(Math.round(FC.ADVANCED_TUNING.tpaRate * 100));
buffer.push16(FC.ADVANCED_TUNING.tpaBreakpoint);
}
diff --git a/src/js/tabs/pid_tuning.js b/src/js/tabs/pid_tuning.js
index befff4e1..7ba7d32d 100644
--- a/src/js/tabs/pid_tuning.js
+++ b/src/js/tabs/pid_tuning.js
@@ -111,6 +111,7 @@ pid_tuning.initialize = function (callback) {
if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_45)) {
// Moved tpa to profile
+ $('select[id="tpaMode"]').val(FC.ADVANCED_TUNING.tpaMode);
$('input[id="tpaRate"]').val(FC.ADVANCED_TUNING.tpaRate.toFixed(2));
$('input[id="tpaBreakpoint"]').val(FC.ADVANCED_TUNING.tpaBreakpoint);
} else {
@@ -1186,6 +1187,7 @@ pid_tuning.initialize = function (callback) {
FC.RC_TUNING.throttle_EXPO = parseFloat($('.throttle input[name="expo"]').val());
if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_45)) {
+ FC.ADVANCED_TUNING.tpaMode = $('select[id="tpaMode"]').val();
FC.ADVANCED_TUNING.tpaRate = parseFloat($('input[id="tpaRate"]').val());
FC.ADVANCED_TUNING.tpaBreakpoint = parseInt($('input[id="tpaBreakpoint"]').val());
} else {
diff --git a/src/tabs/pid_tuning.html b/src/tabs/pid_tuning.html
index e2e4a8de..6256b7d9 100644
--- a/src/tabs/pid_tuning.html
+++ b/src/tabs/pid_tuning.html
@@ -817,12 +817,19 @@