1
0
Fork 0
mirror of https://github.com/betaflight/betaflight-configurator.git synced 2025-07-25 09:15:49 +03:00

Merge pull request #2317 from haslinghuis/auxiliary

This commit is contained in:
Michael Keller 2020-12-16 15:08:32 +01:00 committed by GitHub
commit 5db04ddd26
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -5,7 +5,7 @@ TABS.auxiliary = {};
TABS.auxiliary.initialize = function (callback) { TABS.auxiliary.initialize = function (callback) {
GUI.active_tab_ref = this; GUI.active_tab_ref = this;
GUI.active_tab = 'auxiliary'; GUI.active_tab = 'auxiliary';
var prevChannelsValues = null; let prevChannelsValues = null;
function get_mode_ranges() { function get_mode_ranges() {
MSP.send_message(MSPCodes.MSP_MODE_RANGES, false, false, MSP.send_message(MSPCodes.MSP_MODE_RANGES, false, false,
@ -21,10 +21,10 @@ TABS.auxiliary.initialize = function (callback) {
} }
function get_rssi_config() { function get_rssi_config() {
MSP.send_message(MSPCodes.MSP_RSSI_CONFIG, false, false, get_rc_data); MSP.send_message(MSPCodes.MSP_RSSI_CONFIG, false, false, getRcData);
} }
function get_rc_data() { function getRcData() {
MSP.send_message(MSPCodes.MSP_RC, false, false, get_serial_config); MSP.send_message(MSPCodes.MSP_RC, false, false, get_serial_config);
} }
@ -39,10 +39,10 @@ TABS.auxiliary.initialize = function (callback) {
MSP.send_message(MSPCodes.MSP_BOXNAMES, false, false, get_mode_ranges); MSP.send_message(MSPCodes.MSP_BOXNAMES, false, false, get_mode_ranges);
function createMode(modeIndex, modeId) { function createMode(modeIndex, modeId) {
var modeTemplate = $('#tab-auxiliary-templates .mode'); const modeTemplate = $('#tab-auxiliary-templates .mode');
var newMode = modeTemplate.clone(); const newMode = modeTemplate.clone();
var modeName = FC.AUX_CONFIG[modeIndex]; let modeName = FC.AUX_CONFIG[modeIndex];
// Adjust the name of the box if a peripheral is selected // Adjust the name of the box if a peripheral is selected
modeName = adjustBoxNameIfPeripheralWithModeID(modeId, modeName); modeName = adjustBoxNameIfPeripheralWithModeID(modeId, modeName);
@ -65,18 +65,18 @@ TABS.auxiliary.initialize = function (callback) {
} }
function configureLogicList(template) { function configureLogicList(template) {
var logicList = $(template).find('.logic'); const logicList = $(template).find('.logic');
var logicOptionTemplate = $(logicList).find('option'); const logicOptionTemplate = $(logicList).find('option');
logicOptionTemplate.remove(); logicOptionTemplate.remove();
//add logic option(s) //add logic option(s)
var logicOption = logicOptionTemplate.clone(); let logicOption = logicOptionTemplate.clone();
logicOption.text(i18n.getMessage('auxiliaryModeLogicOR')); logicOption.text(i18n.getMessage('auxiliaryModeLogicOR'));
logicOption.val(0); logicOption.val(0);
logicList.append(logicOption); logicList.append(logicOption);
if(semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_41)){ if(semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_41)){
var logicOption = logicOptionTemplate.clone(); logicOption = logicOptionTemplate.clone();
logicOption.text(i18n.getMessage('auxiliaryModeLogicAND')); logicOption.text(i18n.getMessage('auxiliaryModeLogicAND'));
logicOption.val(1); logicOption.val(1);
logicList.append(logicOption); logicList.append(logicOption);
@ -85,20 +85,20 @@ TABS.auxiliary.initialize = function (callback) {
} }
function configureRangeTemplate(auxChannelCount) { function configureRangeTemplate(auxChannelCount) {
var rangeTemplate = $('#tab-auxiliary-templates .range'); const rangeTemplate = $('#tab-auxiliary-templates .range');
var channelList = $(rangeTemplate).find('.channel'); const channelList = $(rangeTemplate).find('.channel');
var channelOptionTemplate = $(channelList).find('option'); const channelOptionTemplate = $(channelList).find('option');
channelOptionTemplate.remove(); channelOptionTemplate.remove();
//add value to autodetect channel //add value to autodetect channel
var channelOption = channelOptionTemplate.clone(); let channelOption = channelOptionTemplate.clone();
channelOption.text(i18n.getMessage('auxiliaryAutoChannelSelect')); channelOption.text(i18n.getMessage('auxiliaryAutoChannelSelect'));
channelOption.val(-1); channelOption.val(-1);
channelList.append(channelOption); channelList.append(channelOption);
for (var channelIndex = 0; channelIndex < auxChannelCount; channelIndex++) { for (let channelIndex = 0; channelIndex < auxChannelCount; channelIndex++) {
var channelOption = channelOptionTemplate.clone(); channelOption = channelOptionTemplate.clone();
channelOption.text('AUX ' + (channelIndex + 1)); channelOption.text('AUX ' + (channelIndex + 1));
channelOption.val(channelIndex); channelOption.val(channelIndex);
channelList.append(channelOption); channelList.append(channelOption);
@ -110,20 +110,20 @@ TABS.auxiliary.initialize = function (callback) {
} }
function configureLinkTemplate() { function configureLinkTemplate() {
var linkTemplate = $('#tab-auxiliary-templates .link'); const linkTemplate = $('#tab-auxiliary-templates .link');
var linkList = $(linkTemplate).find('.linkedTo'); const linkList = $(linkTemplate).find('.linkedTo');
var linkOptionTemplate = $(linkList).find('option'); const linkOptionTemplate = $(linkList).find('option');
linkOptionTemplate.remove(); linkOptionTemplate.remove();
// set up a blank option in place of ARM // set up a blank option in place of ARM
var linkOption = linkOptionTemplate.clone(); let linkOption = linkOptionTemplate.clone();
linkOption.text(""); linkOption.text("");
linkOption.val(0); linkOption.val(0);
linkList.append(linkOption); linkList.append(linkOption);
for (var index = 1; index < FC.AUX_CONFIG.length; index++) { for (let index = 1; index < FC.AUX_CONFIG.length; index++) {
var linkOption = linkOptionTemplate.clone(); linkOption = linkOptionTemplate.clone();
linkOption.text(FC.AUX_CONFIG[index]); linkOption.text(FC.AUX_CONFIG[index]);
linkOption.val(FC.AUX_CONFIG_IDS[index]); // set value to mode id linkOption.val(FC.AUX_CONFIG_IDS[index]); // set value to mode id
linkList.append(linkOption); linkList.append(linkOption);
@ -135,22 +135,22 @@ TABS.auxiliary.initialize = function (callback) {
} }
function addRangeToMode(modeElement, auxChannelIndex, modeLogic, range) { function addRangeToMode(modeElement, auxChannelIndex, modeLogic, range) {
var modeIndex = $(modeElement).data('index'); const modeIndex = $(modeElement).data('index');
var modeRanges = $(modeElement).find('.ranges'); const modeRanges = $(modeElement).find('.ranges');
var channel_range = { const channel_range = {
'min': [ 900 ], 'min': [ 900 ],
'max': [ 2100 ] 'max': [ 2100 ]
}; };
var rangeValues = [1300, 1700]; // matches MultiWii default values for the old checkbox MID range. let rangeValues = [1300, 1700]; // matches MultiWii default values for the old checkbox MID range.
if (range != undefined) { if (range !== undefined) {
rangeValues = [range.start, range.end]; rangeValues = [range.start, range.end];
} }
var rangeIndex = modeRanges.children().length; const rangeIndex = modeRanges.children().length;
var rangeElement = $('#tab-auxiliary-templates .range').clone(); let rangeElement = $('#tab-auxiliary-templates .range').clone();
rangeElement.attr('id', 'mode-' + modeIndex + '-range-' + rangeIndex); rangeElement.attr('id', 'mode-' + modeIndex + '-range-' + rangeIndex);
modeRanges.append(rangeElement); modeRanges.append(rangeElement);
@ -172,7 +172,7 @@ TABS.auxiliary.initialize = function (callback) {
}) })
}); });
var elementName = '#mode-' + modeIndex + '-range-' + rangeIndex; const elementName = '#mode-' + modeIndex + '-range-' + rangeIndex;
$(elementName + ' .channel-slider').Link('lower').to($(elementName + ' .lowerLimitValue')); $(elementName + ' .channel-slider').Link('lower').to($(elementName + ' .lowerLimitValue'));
$(elementName + ' .channel-slider').Link('upper').to($(elementName + ' .upperLimitValue')); $(elementName + ' .channel-slider').Link('upper').to($(elementName + ' .upperLimitValue'));
@ -191,12 +191,12 @@ TABS.auxiliary.initialize = function (callback) {
$(rangeElement).find('.deleteRange').data('modeElement', modeElement); $(rangeElement).find('.deleteRange').data('modeElement', modeElement);
$(rangeElement).find('a.deleteRange').click(function () { $(rangeElement).find('a.deleteRange').click(function () {
var modeElement = $(this).data('modeElement'); modeElement = $(this).data('modeElement');
var rangeElement = $(this).data('rangeElement'); rangeElement = $(this).data('rangeElement');
rangeElement.remove(); rangeElement.remove();
var siblings = $(modeElement).find('.ranges').children(); const siblings = $(modeElement).find('.ranges').children();
if (siblings.length == 1) { if (siblings.length == 1) {
siblings.eq(0).find('.logic').hide(); siblings.eq(0).find('.logic').hide();
@ -208,13 +208,13 @@ TABS.auxiliary.initialize = function (callback) {
} }
function addLinkedToMode(modeElement, modeLogic, linkedTo) { function addLinkedToMode(modeElement, modeLogic, linkedTo) {
var modeId = $(modeElement).data('id'); const modeId = $(modeElement).data('id');
var modeIndex = $(modeElement).data('index'); const modeIndex = $(modeElement).data('index');
var modeRanges = $(modeElement).find('.ranges'); const modeRanges = $(modeElement).find('.ranges');
var linkIndex = modeRanges.children().length; const linkIndex = modeRanges.children().length;
var linkElement = $('#tab-auxiliary-templates .link').clone(); let linkElement = $('#tab-auxiliary-templates .link').clone();
linkElement.attr('id', 'mode-' + modeIndex + '-link-' + linkIndex); linkElement.attr('id', 'mode-' + modeIndex + '-link-' + linkIndex);
modeRanges.append(linkElement); modeRanges.append(linkElement);
@ -225,19 +225,19 @@ TABS.auxiliary.initialize = function (callback) {
} }
// disable the option associated with this mode // disable the option associated with this mode
var linkSelect = $(linkElement).find('.linkedTo'); const linkSelect = $(linkElement).find('.linkedTo');
$(linkSelect).find('option[value="' + modeId + '"]').prop('disabled',true); $(linkSelect).find('option[value="' + modeId + '"]').prop('disabled',true);
$(linkElement).find('.deleteLink').data('linkElement', linkElement); $(linkElement).find('.deleteLink').data('linkElement', linkElement);
$(linkElement).find('.deleteLink').data('modeElement', modeElement); $(linkElement).find('.deleteLink').data('modeElement', modeElement);
$(linkElement).find('a.deleteLink').click(function () { $(linkElement).find('a.deleteLink').click(function () {
var modeElement = $(this).data('modeElement'); modeElement = $(this).data('modeElement');
var linkElement = $(this).data('linkElement'); linkElement = $(this).data('linkElement');
linkElement.remove(); linkElement.remove();
var siblings = $(modeElement).find('.ranges').children(); const siblings = $(modeElement).find('.ranges').children();
if (siblings.length == 1) { if (siblings.length == 1) {
siblings.eq(0).find('.logic').hide(); siblings.eq(0).find('.logic').hide();
@ -249,24 +249,24 @@ TABS.auxiliary.initialize = function (callback) {
} }
function process_html() { function process_html() {
var auxChannelCount = FC.RC.active_channels - 4; let auxChannelCount = FC.RC.active_channels - 4;
configureRangeTemplate(auxChannelCount); configureRangeTemplate(auxChannelCount);
configureLinkTemplate(); configureLinkTemplate();
const modeTableBodyElement = $('.tab-auxiliary .modes'); const modeTableBodyElement = $('.tab-auxiliary .modes');
for (var modeIndex = 0; modeIndex < FC.AUX_CONFIG.length; modeIndex++) { for (let modeIndex = 0; modeIndex < FC.AUX_CONFIG.length; modeIndex++) {
var modeId = FC.AUX_CONFIG_IDS[modeIndex]; const modeId = FC.AUX_CONFIG_IDS[modeIndex];
var newMode = createMode(modeIndex, modeId); const newMode = createMode(modeIndex, modeId);
modeTableBodyElement.append(newMode); modeTableBodyElement.append(newMode);
// generate ranges from the supplied AUX names and MODE_RANGES[_EXTRA] data // generate ranges from the supplied AUX names and MODE_RANGES[_EXTRA] data
// skip linked modes for now // skip linked modes for now
for (var modeRangeIndex = 0; modeRangeIndex < FC.MODE_RANGES.length; modeRangeIndex++) { for (let modeRangeIndex = 0; modeRangeIndex < FC.MODE_RANGES.length; modeRangeIndex++) {
var modeRange = FC.MODE_RANGES[modeRangeIndex]; const modeRange = FC.MODE_RANGES[modeRangeIndex];
var modeRangeExtra = { let modeRangeExtra = {
id: modeRange.id, id: modeRange.id,
modeLogic: 0, modeLogic: 0,
linkedTo: 0 linkedTo: 0
@ -280,8 +280,8 @@ TABS.auxiliary.initialize = function (callback) {
} }
if (modeId == 0 || modeRangeExtra.linkedTo == 0) { if (modeId == 0 || modeRangeExtra.linkedTo == 0) {
var range = modeRange.range; const range = modeRange.range;
if (!(range.start < range.end)) { if (range.start >= range.end) {
continue; // invalid! continue; // invalid!
} }
@ -294,13 +294,13 @@ TABS.auxiliary.initialize = function (callback) {
} }
$('a.addRange').click(function () { $('a.addRange').click(function () {
var modeElement = $(this).data('modeElement'); const modeElement = $(this).data('modeElement');
// auto select AUTO option; default to 'OR' logic // auto select AUTO option; default to 'OR' logic
addRangeToMode(modeElement, -1, 0); addRangeToMode(modeElement, -1, 0);
}); });
$('a.addLink').click(function () { $('a.addLink').click(function () {
var modeElement = $(this).data('modeElement'); const modeElement = $(this).data('modeElement');
// default to 'OR' logic and no link selected // default to 'OR' logic and no link selected
addLinkedToMode(modeElement, 0, 0); addLinkedToMode(modeElement, 0, 0);
}); });
@ -314,18 +314,18 @@ TABS.auxiliary.initialize = function (callback) {
// update internal data structures based on current UI elements // update internal data structures based on current UI elements
// we must send this many back to the FC - overwrite all of the old ones to be sure. // we must send this many back to the FC - overwrite all of the old ones to be sure.
var requiredModesRangeCount = FC.MODE_RANGES.length; const requiredModesRangeCount = FC.MODE_RANGES.length;
FC.MODE_RANGES = []; FC.MODE_RANGES = [];
FC.MODE_RANGES_EXTRA = []; FC.MODE_RANGES_EXTRA = [];
$('.tab-auxiliary .modes .mode').each(function () { $('.tab-auxiliary .modes .mode').each(function () {
var modeElement = $(this); const modeElement = $(this);
var modeId = modeElement.data('id'); const modeId = modeElement.data('id');
$(modeElement).find('.range').each(function() { $(modeElement).find('.range').each(function() {
var rangeValues = $(this).find('.channel-slider').val(); const rangeValues = $(this).find('.channel-slider').val();
var modeRange = { const modeRange = {
id: modeId, id: modeId,
auxChannelIndex: parseInt($(this).find('.channel').val()), auxChannelIndex: parseInt($(this).find('.channel').val()),
range: { range: {
@ -335,7 +335,7 @@ TABS.auxiliary.initialize = function (callback) {
}; };
FC.MODE_RANGES.push(modeRange); FC.MODE_RANGES.push(modeRange);
var modeRangeExtra = { const modeRangeExtra = {
id: modeId, id: modeId,
modeLogic: parseInt($(this).find('.logic').val()), modeLogic: parseInt($(this).find('.logic').val()),
linkedTo: 0 linkedTo: 0
@ -344,12 +344,12 @@ TABS.auxiliary.initialize = function (callback) {
}); });
$(modeElement).find('.link').each(function() { $(modeElement).find('.link').each(function() {
var linkedToSelection = parseInt($(this).find('.linkedTo').val()); const linkedToSelection = parseInt($(this).find('.linkedTo').val());
if (linkedToSelection == 0) { if (linkedToSelection == 0) {
$(this).remove(); $(this).remove();
} else { } else {
var modeRange = { const modeRange = {
id: modeId, id: modeId,
auxChannelIndex: 0, auxChannelIndex: 0,
range: { range: {
@ -359,7 +359,7 @@ TABS.auxiliary.initialize = function (callback) {
}; };
FC.MODE_RANGES.push(modeRange); FC.MODE_RANGES.push(modeRange);
var modeRangeExtra = { const modeRangeExtra = {
id: modeId, id: modeId,
modeLogic: parseInt($(this).find('.logic').val()), modeLogic: parseInt($(this).find('.logic').val()),
linkedTo: linkedToSelection linkedTo: linkedToSelection
@ -369,8 +369,8 @@ TABS.auxiliary.initialize = function (callback) {
}); });
}); });
for (var modeRangeIndex = FC.MODE_RANGES.length; modeRangeIndex < requiredModesRangeCount; modeRangeIndex++) { for (let modeRangeIndex = FC.MODE_RANGES.length; modeRangeIndex < requiredModesRangeCount; modeRangeIndex++) {
var defaultModeRange = { const defaultModeRange = {
id: 0, id: 0,
auxChannelIndex: 0, auxChannelIndex: 0,
range: { range: {
@ -380,7 +380,7 @@ TABS.auxiliary.initialize = function (callback) {
}; };
FC.MODE_RANGES.push(defaultModeRange); FC.MODE_RANGES.push(defaultModeRange);
var defaultModeRangeExtra = { const defaultModeRangeExtra = {
id: 0, id: 0,
modeLogic: 0, modeLogic: 0,
linkedTo: 0 linkedTo: 0
@ -411,11 +411,11 @@ TABS.auxiliary.initialize = function (callback) {
} }
function update_marker(auxChannelIndex, channelPosition) { function update_marker(auxChannelIndex, channelPosition) {
var percentage = (channelPosition - 900) / (2100-900) * 100; const percentage = (channelPosition - 900) / (2100-900) * 100;
$('.modes .ranges .range').each( function () { $('.modes .ranges .range').each( function () {
var auxChannelCandidateIndex = $(this).find('.channel').val(); const auxChannelCandidateIndex = $(this).find('.channel').val();
if (auxChannelCandidateIndex != auxChannelIndex) { if (auxChannelCandidateIndex !== auxChannelIndex) {
return; return;
} }
@ -449,12 +449,12 @@ TABS.auxiliary.initialize = function (callback) {
//ARM mode is a special case //ARM mode is a special case
if (i == 0) { if (i == 0) {
var armSwitchActive = false; let armSwitchActive = false;
if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_36)) { if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_36)) {
if (FC.CONFIG.armingDisableCount > 0) { if (FC.CONFIG.armingDisableCount > 0) {
// check the highest bit of the armingDisableFlags. This will be the ARMING_DISABLED_ARMSWITCH flag. // check the highest bit of the armingDisableFlags. This will be the ARMING_DISABLED_ARMSWITCH flag.
var armSwitchMask = 1 << (FC.CONFIG.armingDisableCount - 1); const armSwitchMask = 1 << (FC.CONFIG.armingDisableCount - 1);
if ((FC.CONFIG.armingDisableFlags & armSwitchMask) > 0) { if ((FC.CONFIG.armingDisableFlags & armSwitchMask) > 0) {
armSwitchActive = true; armSwitchActive = true;
} }
@ -488,9 +488,9 @@ TABS.auxiliary.initialize = function (callback) {
auto_select_channel(FC.RC.channels, FC.RSSI_CONFIG.channel); auto_select_channel(FC.RC.channels, FC.RSSI_CONFIG.channel);
var auxChannelCount = FC.RC.active_channels - 4; auxChannelCount = FC.RC.active_channels - 4;
for (var i = 0; i < (auxChannelCount); i++) { for (let i = 0; i < (auxChannelCount); i++) {
update_marker(i, limit_channel(FC.RC.channels[i + 4])); update_marker(i, limit_channel(FC.RC.channels[i + 4]));
} }
@ -503,30 +503,30 @@ TABS.auxiliary.initialize = function (callback) {
* @param RC_channels * @param RC_channels
*/ */
function auto_select_channel(RC_channels, RSSI_channel) { function auto_select_channel(RC_channels, RSSI_channel) {
var auto_option = $('.tab-auxiliary select.channel option[value="-1"]:selected'); const auto_option = $('.tab-auxiliary select.channel option[value="-1"]:selected');
if (auto_option.length === 0) { if (auto_option.length === 0) {
prevChannelsValues = null; prevChannelsValues = null;
return; return;
} }
var fillPrevChannelsValues = function () { const fillPrevChannelsValues = function () {
prevChannelsValues = RC_channels.slice(0); //clone array prevChannelsValues = RC_channels.slice(0); //clone array
} }
if (!prevChannelsValues || RC_channels.length === 0) return fillPrevChannelsValues(); if (!prevChannelsValues || RC_channels.length === 0) return fillPrevChannelsValues();
var diff_array = RC_channels.map(function(currentValue, index) { const diff_array = RC_channels.map(function(currentValue, index) {
return Math.abs(prevChannelsValues[index] - currentValue); return Math.abs(prevChannelsValues[index] - currentValue);
}); });
var largest = diff_array.reduce(function(x,y){ const largest = diff_array.reduce(function(x,y){
return (x > y) ? x : y; return (x > y) ? x : y;
}, 0); }, 0);
//minimum change to autoselect is 100 //minimum change to autoselect is 100
if (largest < 100) return fillPrevChannelsValues(); if (largest < 100) return fillPrevChannelsValues();
var indexOfMaxValue = diff_array.indexOf(largest); const indexOfMaxValue = diff_array.indexOf(largest);
if (indexOfMaxValue >= 4 && indexOfMaxValue != RSSI_channel - 1){ //set channel if (indexOfMaxValue >= 4 && indexOfMaxValue != RSSI_channel - 1){ //set channel
auto_option.parent().val(indexOfMaxValue - 4); auto_option.parent().val(indexOfMaxValue - 4);
} }