1
0
Fork 0
mirror of https://github.com/betaflight/betaflight-configurator.git synced 2025-07-22 15:55:33 +03:00

Merge pull request #2616 from haslinghuis/fix_reset_profiles

This commit is contained in:
Michael Keller 2021-10-04 23:50:13 +13:00 committed by GitHub
commit 2b98947fb4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 45 additions and 72 deletions

View file

@ -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;
}
};

View file

@ -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();
}
}

View file

@ -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();
}