diff --git a/src/js/TuningSliders.js b/src/js/TuningSliders.js index 09023f25..cb2f2d3a 100644 --- a/src/js/TuningSliders.js +++ b/src/js/TuningSliders.js @@ -45,7 +45,7 @@ const D_MIN_RATIO = 0.85; TuningSliders.saveInitialSettings = function () { if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_44)) { - this.initialSettings.sliderPidsMode = FC.TUNING_SLIDERS.slider_pids_mode; + this.initialSettings.sliderPidsModeSelect = FC.TUNING_SLIDERS.slider_pids_mode; this.initialSettings.sliderDGain = FC.TUNING_SLIDERS.slider_d_gain / 100; this.initialSettings.sliderPIGain = FC.TUNING_SLIDERS.slider_pi_gain / 100; this.initialSettings.sliderFeedforwardGain = FC.TUNING_SLIDERS.slider_feedforward_gain / 100; @@ -63,11 +63,7 @@ TuningSliders.saveInitialSettings = function () { TuningSliders.restoreInitialSettings = function () { if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_44)) { - if (this.sliderModeHasChanged && this.initialSetting.sliderPidsMode !== this.sliderPidsmode) { - $('#sliderPidsModeSelect').val(this.initialSettings.sliderPidsMode).trigger('change'); - } - - FC.TUNING_SLIDERS.slider_pids_mode = this.initialSettings.sliderPidsMode; + FC.TUNING_SLIDERS.slider_pids_mode = this.initialSettings.sliderPidsModeSelect; FC.TUNING_SLIDERS.slider_d_gain = Math.round(this.initialSettings.sliderDGain * 20) * 5; FC.TUNING_SLIDERS.slider_pi_gain = Math.round(this.initialSettings.sliderPIGain * 20) * 5; @@ -88,12 +84,12 @@ TuningSliders.restoreInitialSettings = function () { .then(() => MSP.promise(MSPCodes.MSP_PID_ADVANCED)) .then(() => MSP.promise(MSPCodes.MSP_FILTER_CONFIG)) .then(() => { - TABS.pid_tuning.configChanges = {}; if (GUI.active_tab === 'pid_tuning') { this.updateFormPids(); TABS.pid_tuning.updatePIDColors(); } }); + TABS.pid_tuning.sliderRetainConfiguration = false; } }; diff --git a/src/js/main.js b/src/js/main.js index 839c1f4b..7cba00dd 100644 --- a/src/js/main.js +++ b/src/js/main.js @@ -252,7 +252,7 @@ function startProcess() { const tabName = $(self).text(); if (GUI.active_tab === 'pid_tuning') { - if (TABS.pid_tuning.sliderRetainPosition || TABS.pid_tuning.sliderRetainMode || TABS.pid_tuning.sliderRetainConfiguration) { + if (TABS.pid_tuning.sliderRetainConfiguration) { TuningSliders.restoreInitialSettings(); } } diff --git a/src/js/tabs/pid_tuning.js b/src/js/tabs/pid_tuning.js index de32bc89..aeb25a2b 100644 --- a/src/js/tabs/pid_tuning.js +++ b/src/js/tabs/pid_tuning.js @@ -22,9 +22,6 @@ TABS.pid_tuning = { activeSubtab: 'pid', analyticsChanges: {}, - sliderChanges: {}, - sliderRetainMode: false, - sliderRetainPosition: false, sliderRetainConfiguration: false, }; @@ -1809,6 +1806,7 @@ TABS.pid_tuning.initialize = function (callback) { && $(item).attr('class') !== "nonProfile") { $(item).change(function () { self.setDirty(true); + self.sliderRetainConfiguration = true; }); } }); @@ -1901,59 +1899,16 @@ TABS.pid_tuning.initialize = function (callback) { const SLIDER_STEP_LOWER = semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_44) ? 0.05 : 0.1; const SLIDER_STEP_UPPER = semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_44) ? 0.05 : 0.1; + const sliderPidsModeSelect = $('#sliderPidsModeSelect'); + if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_44)) { - if (!self.sliderRetainConfiguration) { + if (self.sliderRetainConfiguration) { + self.setDirty(true); + } else { TuningSliders.saveInitialSettings(); } - const initialConfiguration = TuningSliders.initialSettings; - - // we only target the range target type. - function sliderHandler(e) { - if (e.target !== e.currentTarget) { - const item = e.target.id === '' ? e.target.name : e.target.id; - const value = isInt(e.target.value) ? parseInt(e.target.value) : parseFloat(e.target.value); - self.sliderChanges[item] = value; - - if (item in initialConfiguration) { - if (value !== initialConfiguration[item]) { - self.sliderRetainPosition = true; - } else { - delete self.sliderChanges[item]; - if (Object.keys(self.sliderChanges).length === 0) { - self.sliderRetainPosition = false; - } - } - } - } - e.stopPropagation(); - } - - function disableSliderOnManualChange(e, angle) { - const sliderPidsModeSelectElement = $('#sliderPidsModeSelect'); - const mode = parseInt(sliderPidsModeSelectElement.val()); - if (mode > 0) { - if (mode === 1 && angle === 'YAW') { - e.preventDefault(); - } else { - sliderPidsModeSelectElement.val(0).trigger('change'); - self.sliderRetainMode = true; - } - } else { - self.updateGuiElements(); - } - } - - function HandleEventParams(param) { - return (e) => disableSliderOnManualChange(e, param); - } - - document.querySelectorAll('.sliderLabels').forEach(elem => elem.addEventListener('change', sliderHandler)); - document.querySelectorAll('.sliderMode').forEach(elem => elem.addEventListener('change', sliderHandler)); - document.querySelectorAll('.ROLL').forEach(elem => elem.addEventListener('change', HandleEventParams('ROLL'))); - document.querySelectorAll('.PITCH').forEach(elem => elem.addEventListener('change', HandleEventParams('PITCH'))); - document.querySelectorAll('.YAW').forEach(elem => elem.addEventListener('change', HandleEventParams('YAW'))); - $('#sliderPidsModeSelect').val(FC.TUNING_SLIDERS.slider_pids_mode); + sliderPidsModeSelect.val(FC.TUNING_SLIDERS.slider_pids_mode); } else { $('#dMinSwitch').change(function() { TuningSliders.setDMinFeatureEnabled($(this).is(':checked')); @@ -1978,10 +1933,28 @@ TABS.pid_tuning.initialize = function (callback) { // trigger Slider Display update when PID mode is changed if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_44)) { - $('select[id="sliderPidsModeSelect"]').change(function () { - TuningSliders.sliderPidsMode = parseInt($(this).val()); + $('select[id="sliderPidsModeSelect"]').on('change', function () { + const originalMode = TuningSliders.initialSettings.sliderPidsModeSelect; + const setMode = parseInt($(this).val()); + + TuningSliders.sliderPidsMode = setMode; TuningSliders.updatePidSlidersDisplay(); - }).change(); + + const allowRP = originalMode === 0 && setMode === 0; + const allowRPY = originalMode < 2 && originalMode === setMode; + + $('.ROLL .pid_data input').each(function() { + $(this).prop('disabled', !allowRP); + }); + + $('.PITCH .pid_data input').each(function() { + $(this).prop('disabled', !allowRP); + }); + + $('.YAW .pid_data input').each(function() { + $(this).prop('disabled', !allowRPY); + }); + }).trigger('change'); } let allPidTuningSliders; @@ -2046,6 +2019,7 @@ TABS.pid_tuning.initialize = function (callback) { } } TuningSliders.calculateNewPids(); + self.updateGuiElements(); self.analyticsChanges['PidTuningSliders'] = "On"; }); if (semver.lt(FC.CONFIG.apiVersion, API_VERSION_1_44)) { @@ -2107,12 +2081,18 @@ TABS.pid_tuning.initialize = function (callback) { TuningSliders.calculateNewPids(); TuningSliders.updatePidSlidersDisplay(); }); + // enable PID sliders button $('a.buttonPidTuningSliders').click(function() { - //set Slider PID mode to RPY when re-enabling Sliders + // set Slider PID mode to RP(Y) when re-enabling Sliders if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_44)) { - $('#sliderPidsModeSelect').val(2).trigger('change'); - self.sliderRetainMode = true; + const firmwareMode = TuningSliders.initialSettings.sliderPidsModeSelect; + const workingMode = firmwareMode === 1 ? 1 : 2; + + if (firmwareMode !== workingMode) { + self.sliderRetainConfiguration = true; + } + sliderPidsModeSelect.val(workingMode).trigger('change'); } // if values were previously changed manually and then sliders are reactivated, reset pids to previous valid values if available, else default TuningSliders.resetPidSliders(); @@ -2190,7 +2170,8 @@ TABS.pid_tuning.initialize = function (callback) { }); // enable Filter sliders button $('a.buttonFilterTuningSliders').click(function() { - self.sliderRetainMode = true; + self.sliderRetainConfiguration = true; + if (TuningSliders.GyroSliderUnavailable) { //set Slider mode to ON when re-enabling Sliders if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_44)) { @@ -2296,10 +2277,6 @@ TABS.pid_tuning.initialize = function (callback) { return MSP.promise(MSPCodes.MSP_EEPROM_WRITE); }).then(function () { self.updating = false; - - self.sliderRetainPosition = false; - self.sliderRetainMode = false; - self.sliderChanges = {}; self.sliderRetainConfiguration = false; self.setDirty(false); @@ -2411,7 +2388,7 @@ TABS.pid_tuning.cleanup = function (callback) { TABS.pid_tuning.refresh = function (callback) { const self = this; - if ((self.sliderRetainPosition || self.sliderRetainMode) && !self.updating) { + if (self.sliderRetainConfiguration && !self.updating) { TuningSliders.restoreInitialSettings(); }