diff --git a/tabs/pid_tuning.html b/tabs/pid_tuning.html
old mode 100644
new mode 100755
index 01e8a4c3..d17ca36d
--- a/tabs/pid_tuning.html
+++ b/tabs/pid_tuning.html
@@ -12,84 +12,87 @@
-
-
-
+
+
+
diff --git a/tabs/pid_tuning.js b/tabs/pid_tuning.js
old mode 100644
new mode 100755
index 8b611d1a..bacf52e6
--- a/tabs/pid_tuning.js
+++ b/tabs/pid_tuning.js
@@ -1,9 +1,12 @@
'use strict';
-TABS.pid_tuning = {};
+TABS.pid_tuning = {
+ controllerChanged: true
+};
+
TABS.pid_tuning.initialize = function (callback) {
var self = this;
-
+
if (GUI.active_tab != 'pid_tuning') {
GUI.active_tab = 'pid_tuning';
googleAnalytics.sendAppView('PID Tuning');
@@ -36,24 +39,8 @@ TABS.pid_tuning.initialize = function (callback) {
// requesting MSP_STATUS manually because it contains CONFIG.profile
MSP.send_message(MSP_codes.MSP_STATUS, false, false, get_pid_controller);
- function process_html() {
- // translate to user-selected language
- localize();
-
- // Fill in the names from PID_names array
- // this needs to be reworked, but will do for now
- $('.pid_tuning tr:eq(1) td:first').text(PID_names[0]);
- $('.pid_tuning tr:eq(2) td:first').text(PID_names[1]);
- $('.pid_tuning tr:eq(3) td:first').text(PID_names[2]);
- $('.pid_tuning tr:eq(4) td:first').text(PID_names[3]);
- $('.pid_tuning tr:eq(5) td:first').text(PID_names[9]);
- $('.pid_tuning tr:eq(6) td:first').text(PID_names[4]);
- $('.pid_tuning tr:eq(7) td:first').text(PID_names[5]);
- $('.pid_tuning tr:eq(8) td:first').text(PID_names[6]);
- $('.pid_tuning tr:eq(9) td:first').text(PID_names[7]);
- $('.pid_tuning tr:eq(10) td:first').text(PID_names[8]);
-
- // Fill in the data from PIDs array
+ function data_stoarage_to_form() {
+// Fill in the data from PIDs array
var i = 0;
$('.pid_tuning .ROLL input').each(function () {
switch (i) {
@@ -188,26 +175,106 @@ TABS.pid_tuning.initialize = function (callback) {
$('.rate-tpa input[name="roll-pitch"]').val(RC_tuning.roll_pitch_rate.toFixed(2));
$('.rate-tpa input[name="yaw"]').val(RC_tuning.yaw_rate.toFixed(2));
$('.rate-tpa input[name="tpa"]').val(RC_tuning.dynamic_THR_PID.toFixed(2));
+ }
+
+ function form_to_pid_and_rc() {
+// Catch all the changes and stuff the inside PIDs array
+ var i = 0;
+ $('table.pid_tuning tr.ROLL input').each(function () {
+ PIDs[0][i++] = parseFloat($(this).val());
+ });
+
+ i = 0;
+ $('table.pid_tuning tr.PITCH input').each(function () {
+ PIDs[1][i++] = parseFloat($(this).val());
+ });
+
+ i = 0;
+ $('table.pid_tuning tr.YAW input').each(function () {
+ PIDs[2][i++] = parseFloat($(this).val());
+ });
+
+ i = 0;
+ $('table.pid_tuning tr.ALT input').each(function () {
+ PIDs[3][i++] = parseFloat($(this).val());
+ });
+
+ i = 0;
+ $('table.pid_tuning tr.Vario input').each(function () {
+ PIDs[9][i++] = parseFloat($(this).val());
+ });
+
+ i = 0;
+ $('table.pid_tuning tr.Pos input').each(function () {
+ PIDs[4][i++] = parseFloat($(this).val());
+ });
+
+ i = 0;
+ $('table.pid_tuning tr.PosR input').each(function () {
+ PIDs[5][i++] = parseFloat($(this).val());
+ });
+
+ i = 0;
+ $('table.pid_tuning tr.NavR input').each(function () {
+ PIDs[6][i++] = parseFloat($(this).val());
+ });
+
+ i = 0;
+ $('table.pid_tuning tr.LEVEL input').each(function () {
+ PIDs[7][i++] = parseFloat($(this).val());
+ });
+
+ i = 0;
+ $('table.pid_tuning tr.MAG input').each(function () {
+ PIDs[8][i++] = parseFloat($(this).val());
+ });
+
+ // catch RC_tuning changes
+ RC_tuning.roll_pitch_rate = parseFloat($('.rate-tpa input[name="roll-pitch"]').val());
+ RC_tuning.yaw_rate = parseFloat($('.rate-tpa input[name="yaw"]').val());
+ RC_tuning.dynamic_THR_PID = parseFloat($('.rate-tpa input[name="tpa"]').val());
+ }
+
+ function process_html() {
+ // translate to user-selected language
+ localize();
+
+ // Fill in the names from PID_names array
+ // this needs to be reworked, but will do for now
+ $('.pid_tuning tr:eq(1) td:first').text(PID_names[0]);
+ $('.pid_tuning tr:eq(2) td:first').text(PID_names[1]);
+ $('.pid_tuning tr:eq(3) td:first').text(PID_names[2]);
+ $('.pid_tuning tr:eq(4) td:first').text(PID_names[3]);
+ $('.pid_tuning tr:eq(5) td:first').text(PID_names[9]);
+ $('.pid_tuning tr:eq(6) td:first').text(PID_names[4]);
+ $('.pid_tuning tr:eq(7) td:first').text(PID_names[5]);
+ $('.pid_tuning tr:eq(8) td:first').text(PID_names[6]);
+ $('.pid_tuning tr:eq(9) td:first').text(PID_names[7]);
+ $('.pid_tuning tr:eq(10) td:first').text(PID_names[8]);
+
+ data_stoarage_to_form();
var pidController_e = $('select[name="controller"]');
-
+ var profile_e = $('select[name="profile"]');
+ var form_e = $('#pid-tuning');
+
if (GUI.canChangePidController) {
pidController_e.val(PID.controller);
} else {
GUI.log(chrome.i18n.getMessage('pidTuningUpgradeFirmwareToChangePidController', [CONFIG.apiVersion, CONFIGURATOR.pidControllerChangeMinApiVersion]));
-
+
pidController_e.empty();
pidController_e.append('');
-
+
pidController_e.prop('disabled', true);
}
-
// Fill in currently selected profile
- $('select[name="profile"]').val(CONFIG.profile);
+
+ profile_e.val(CONFIG.profile);
// UI Hooks
- $('select[name="profile"]').change(function () {
+ profile_e.change(function () {
var profile = parseInt($(this).val());
MSP.send_message(MSP_codes.MSP_SELECT_SETTING, [profile], false, function () {
GUI.log(chrome.i18n.getMessage('pidTuningLoadedProfile', [profile + 1]));
@@ -221,74 +288,36 @@ TABS.pid_tuning.initialize = function (callback) {
$('a.refresh').click(function () {
GUI.tab_switch_cleanup(function () {
GUI.log(chrome.i18n.getMessage('pidTuningDataRefreshed'));
-
TABS.pid_tuning.initialize();
});
});
- $('a.update').click(function () {
- // Catch all the changes and stuff the inside PIDs array
- var i = 0;
- $('table.pid_tuning tr.ROLL input').each(function () {
- PIDs[0][i++] = parseFloat($(this).val());
- });
+ form_e.find('input').each(function (k, item) {
+ $(item).change(function () {
+ pidController_e.prop("disabled", true);
+ TABS.pid_tuning.controllerChanged = false;
+ })
+ });
- i = 0;
- $('table.pid_tuning tr.PITCH input').each(function () {
- PIDs[1][i++] = parseFloat($(this).val());
- });
-
- i = 0;
- $('table.pid_tuning tr.YAW input').each(function () {
- PIDs[2][i++] = parseFloat($(this).val());
- });
-
- i = 0;
- $('table.pid_tuning tr.ALT input').each(function () {
- PIDs[3][i++] = parseFloat($(this).val());
- });
-
- i = 0;
- $('table.pid_tuning tr.Vario input').each(function () {
- PIDs[9][i++] = parseFloat($(this).val());
- });
-
- i = 0;
- $('table.pid_tuning tr.Pos input').each(function () {
- PIDs[4][i++] = parseFloat($(this).val());
- });
-
- i = 0;
- $('table.pid_tuning tr.PosR input').each(function () {
- PIDs[5][i++] = parseFloat($(this).val());
- });
-
- i = 0;
- $('table.pid_tuning tr.NavR input').each(function () {
- PIDs[6][i++] = parseFloat($(this).val());
- });
-
- i = 0;
- $('table.pid_tuning tr.LEVEL input').each(function () {
- PIDs[7][i++] = parseFloat($(this).val());
- });
-
- i = 0;
- $('table.pid_tuning tr.MAG input').each(function () {
- PIDs[8][i++] = parseFloat($(this).val());
- });
-
- // catch RC_tuning changes
- RC_tuning.roll_pitch_rate = parseFloat($('.rate-tpa input[name="roll-pitch"]').val());
- RC_tuning.yaw_rate = parseFloat($('.rate-tpa input[name="yaw"]').val());
- RC_tuning.dynamic_THR_PID = parseFloat($('.rate-tpa input[name="tpa"]').val());
-
- var pidController_e = $('select[name="controller"]');
-
- function send_pids() {
- MSP.send_message(MSP_codes.MSP_SET_PID, MSP.crunch(MSP_codes.MSP_SET_PID), false, send_rc_tuning_changes);
+ pidController_e.change(function () {
+ if (PID.controller != pidController_e.val()) {
+ form_e.find('input').each(function (k, item) {
+ $(item).prop('disabled', true);
+ TABS.pid_tuning.controllerChanged = true;
+ });
}
-
+ });
+
+
+ // update == save.
+ $('a.update').click(function () {
+
+ form_to_pid_and_rc();
+
+ function send_pids() {
+ if (!TABS.pid_tuning.controllerChanged) MSP.send_message(MSP_codes.MSP_SET_PID, MSP.crunch(MSP_codes.MSP_SET_PID), false, send_rc_tuning_changes);
+ }
+
function send_rc_tuning_changes() {
MSP.send_message(MSP_codes.MSP_SET_RC_TUNING, MSP.crunch(MSP_codes.MSP_SET_RC_TUNING), false, save_to_eeprom);
}
@@ -299,9 +328,14 @@ TABS.pid_tuning.initialize = function (callback) {
});
}
- if (GUI.canChangePidController) {
- PID.controller = pidController_e.val();
- MSP.send_message(MSP_codes.MSP_SET_PID_CONTROLLER, MSP.crunch(MSP_codes.MSP_SET_PID_CONTROLLER), false, send_pids);
+ if (GUI.canChangePidController && TABS.pid_tuning.controllerChanged) {
+ PID.controller = pidController_e.val();
+ MSP.send_message(MSP_codes.MSP_SET_PID_CONTROLLER, MSP.crunch(MSP_codes.MSP_SET_PID_CONTROLLER), false, function () {
+ MSP.send_message(MSP_codes.MSP_EEPROM_WRITE, false, false, function () {
+ GUI.log(chrome.i18n.getMessage('pidTuningEepromSaved'));
+ });
+ TABS.pid_tuning.initialize();
+ });
} else {
send_pids();
}
@@ -318,4 +352,4 @@ TABS.pid_tuning.initialize = function (callback) {
TABS.pid_tuning.cleanup = function (callback) {
if (callback) callback();
-}
\ No newline at end of file
+};
\ No newline at end of file