betaflight-configurator/tabs/pid_tuning.js

285 lines
9.4 KiB
JavaScript
Raw Normal View History

'use strict';
TABS.pid_tuning = {};
2014-08-12 14:20:26 +00:00
TABS.pid_tuning.initialize = function (callback) {
GUI.active_tab_ref = this;
GUI.active_tab = 'pid_tuning';
2014-07-16 10:59:12 +00:00
googleAnalytics.sendAppView('PID Tuning');
2014-03-08 05:25:15 +00:00
2014-05-03 20:42:11 +00:00
function get_pid_names() {
MSP.send_message(MSP_codes.MSP_PIDNAMES, false, false, get_pid_data);
2014-05-03 20:42:11 +00:00
}
function get_pid_data() {
MSP.send_message(MSP_codes.MSP_PID, false, false, get_rc_tuning_data);
}
function get_rc_tuning_data() {
MSP.send_message(MSP_codes.MSP_RC_TUNING, false, false, load_html);
}
function load_html() {
$('#content').load("./tabs/pid_tuning.html", process_html);
}
// requesting MSP_STATUS manually because it contains CONFIG.profile
MSP.send_message(MSP_codes.MSP_STATUS, false, false, get_pid_names);
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
var i = 0;
2014-08-12 14:20:26 +00:00
$('.pid_tuning .ROLL input').each(function () {
switch (i) {
case 0:
$(this).val(PIDs[0][i++].toFixed(1));
break;
case 1:
$(this).val(PIDs[0][i++].toFixed(3));
break;
case 2:
$(this).val(PIDs[0][i++].toFixed(0));
break;
}
});
2014-03-08 05:25:15 +00:00
i = 0;
2014-08-12 14:20:26 +00:00
$('.pid_tuning .PITCH input').each(function () {
switch (i) {
case 0:
$(this).val(PIDs[1][i++].toFixed(1));
break;
case 1:
$(this).val(PIDs[1][i++].toFixed(3));
break;
case 2:
$(this).val(PIDs[1][i++].toFixed(0));
break;
}
});
2014-03-08 05:25:15 +00:00
i = 0;
2014-08-12 14:20:26 +00:00
$('.pid_tuning .YAW input').each(function () {
switch (i) {
case 0:
$(this).val(PIDs[2][i++].toFixed(1));
break;
case 1:
$(this).val(PIDs[2][i++].toFixed(3));
break;
case 2:
$(this).val(PIDs[2][i++].toFixed(0));
break;
}
});
2013-04-08 23:09:11 +00:00
i = 0;
2014-08-12 14:20:26 +00:00
$('.pid_tuning .ALT input').each(function () {
switch (i) {
case 0:
$(this).val(PIDs[3][i++].toFixed(1));
break;
case 1:
$(this).val(PIDs[3][i++].toFixed(3));
break;
case 2:
$(this).val(PIDs[3][i++].toFixed(0));
break;
}
});
2013-04-08 23:09:11 +00:00
i = 0;
2014-08-12 14:20:26 +00:00
$('.pid_tuning .Pos input').each(function () {
$(this).val(PIDs[4][i++].toFixed(2));
});
2014-03-08 05:25:15 +00:00
i = 0;
2014-08-12 14:20:26 +00:00
$('.pid_tuning .PosR input').each(function () {
switch (i) {
case 0:
$(this).val(PIDs[5][i++].toFixed(1));
break;
case 1:
$(this).val(PIDs[5][i++].toFixed(2));
break;
case 2:
$(this).val(PIDs[5][i++].toFixed(3));
break;
}
});
2013-04-08 23:09:11 +00:00
i = 0;
2014-08-12 14:20:26 +00:00
$('.pid_tuning .NavR input').each(function () {
switch (i) {
case 0:
$(this).val(PIDs[6][i++].toFixed(1));
break;
case 1:
$(this).val(PIDs[6][i++].toFixed(2));
break;
case 2:
$(this).val(PIDs[6][i++].toFixed(3));
break;
}
});
2013-04-08 23:09:11 +00:00
i = 0;
2014-08-12 14:20:26 +00:00
$('.pid_tuning .LEVEL input').each(function () {
switch (i) {
case 0:
$(this).val(PIDs[7][i++].toFixed(1));
break;
case 1:
2014-06-09 00:56:38 +00:00
$(this).val(PIDs[7][i++].toFixed(3));
break;
case 2:
$(this).val(PIDs[7][i++].toFixed(0));
break;
}
});
2013-04-08 23:09:11 +00:00
i = 0;
2014-08-12 14:20:26 +00:00
$('.pid_tuning .MAG input').each(function () {
$(this).val(PIDs[8][i++].toFixed(1));
});
2013-04-08 23:49:49 +00:00
i = 0;
2014-08-12 14:20:26 +00:00
$('.pid_tuning .Vario input').each(function () {
switch (i) {
case 0:
$(this).val(PIDs[9][i++].toFixed(1));
break;
case 1:
$(this).val(PIDs[9][i++].toFixed(3));
break;
case 2:
$(this).val(PIDs[9][i++].toFixed(0));
break;
}
});
2014-03-08 05:25:15 +00:00
// Fill in data from RC_tuning object
$('.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));
2014-03-08 05:25:15 +00:00
// Fill in currently selected profile
$('input[name="profile"]').val(CONFIG.profile + 1); // +1 because the range is 0-2
2014-03-08 05:25:15 +00:00
// UI Hooks
2014-08-12 14:20:26 +00:00
$('input[name="profile"]').change(function () {
var profile = parseInt($(this).val());
2014-08-12 14:20:26 +00:00
MSP.send_message(MSP_codes.MSP_SELECT_SETTING, [profile - 1], false, function () {
2014-05-06 15:34:59 +00:00
GUI.log(chrome.i18n.getMessage('pidTuningLoadedProfile', [profile]));
2014-03-08 05:25:15 +00:00
2014-08-12 14:20:26 +00:00
GUI.tab_switch_cleanup(function () {
TABS.pid_tuning.initialize();
2014-07-10 16:14:33 +00:00
});
});
});
2014-03-08 05:25:15 +00:00
2014-08-12 14:20:26 +00:00
$('a.refresh').click(function () {
GUI.tab_switch_cleanup(function () {
2014-05-06 15:34:59 +00:00
GUI.log(chrome.i18n.getMessage('pidTuningDataRefreshed'));
2014-03-08 05:25:15 +00:00
TABS.pid_tuning.initialize();
});
});
2014-03-08 05:25:15 +00:00
2014-08-12 14:20:26 +00:00
$('a.update').click(function () {
// Catch all the changes and stuff the inside PIDs array
var i = 0;
2014-08-12 14:20:26 +00:00
$('table.pid_tuning tr.ROLL input').each(function () {
PIDs[0][i++] = parseFloat($(this).val());
});
i = 0;
2014-08-12 14:20:26 +00:00
$('table.pid_tuning tr.PITCH input').each(function () {
PIDs[1][i++] = parseFloat($(this).val());
});
i = 0;
2014-08-12 14:20:26 +00:00
$('table.pid_tuning tr.YAW input').each(function () {
PIDs[2][i++] = parseFloat($(this).val());
});
i = 0;
2014-08-12 14:20:26 +00:00
$('table.pid_tuning tr.ALT input').each(function () {
PIDs[3][i++] = parseFloat($(this).val());
});
i = 0;
2014-08-12 14:20:26 +00:00
$('table.pid_tuning tr.Vario input').each(function () {
PIDs[9][i++] = parseFloat($(this).val());
});
i = 0;
2014-08-12 14:20:26 +00:00
$('table.pid_tuning tr.Pos input').each(function () {
PIDs[4][i++] = parseFloat($(this).val());
});
i = 0;
2014-08-12 14:20:26 +00:00
$('table.pid_tuning tr.PosR input').each(function () {
PIDs[5][i++] = parseFloat($(this).val());
});
i = 0;
2014-08-12 14:20:26 +00:00
$('table.pid_tuning tr.NavR input').each(function () {
PIDs[6][i++] = parseFloat($(this).val());
});
i = 0;
2014-08-12 14:20:26 +00:00
$('table.pid_tuning tr.LEVEL input').each(function () {
PIDs[7][i++] = parseFloat($(this).val());
});
i = 0;
2014-08-12 14:20:26 +00:00
$('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 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);
}
function save_to_eeprom() {
2014-08-12 14:20:26 +00:00
MSP.send_message(MSP_codes.MSP_EEPROM_WRITE, false, false, function () {
2014-05-06 15:34:59 +00:00
GUI.log(chrome.i18n.getMessage('pidTuningEepromSaved'));
});
}
MSP.send_message(MSP_codes.MSP_SET_PID, MSP.crunch(MSP_codes.MSP_SET_PID), false, send_rc_tuning_changes);
2013-12-15 01:28:12 +00:00
});
// status data pulled via separate timer with static speed
2014-08-12 14:20:26 +00:00
GUI.interval_add('status_pull', function () {
MSP.send_message(MSP_codes.MSP_STATUS);
}, 250, true);
2014-07-10 16:14:33 +00:00
if (callback) callback();
}
2014-07-10 16:14:33 +00:00
};
2014-08-12 14:20:26 +00:00
TABS.pid_tuning.cleanup = function (callback) {
2014-07-10 16:14:33 +00:00
if (callback) callback();
2013-04-08 19:10:47 +00:00
}