diff --git a/js/serialPortHelper.js b/js/serialPortHelper.js index 4cb9fdb4..31b98d53 100644 --- a/js/serialPortHelper.js +++ b/js/serialPortHelper.js @@ -11,96 +11,113 @@ helper.serialPortHelper = (function () { // This is a list of all the rules for the serial ports as well as their names privateScope.rules = [ - { name: 'MSP', groups: ['data', 'msp'], maxPorts: 2 }, - { name: 'GPS', groups: ['sensors'], maxPorts: 1, defaultBaud: 115200 }, - { name: 'TELEMETRY_FRSKY', groups: ['telemetry'], sharableWith: ['msp'], notSharableWith: ['blackbox'], maxPorts: 1 }, - { name: 'TELEMETRY_HOTT', groups: ['telemetry'], sharableWith: ['msp'], notSharableWith: ['blackbox'], maxPorts: 1 }, - { name: 'TELEMETRY_SMARTPORT', groups: ['telemetry'], maxPorts: 1 }, - { name: 'TELEMETRY_LTM', groups: ['telemetry'], sharableWith: ['msp'], notSharableWith: ['blackbox'], maxPorts: 1 }, - { name: 'RX_SERIAL', groups: ['rx'], maxPorts: 1 }, - { name: 'BLACKBOX', groups: ['peripherals'], sharableWith: ['msp'], notSharableWith: ['telemetry'], maxPorts: 1 }, + { + name: 'MSP', + groups: ['data'] + }, + { + name: 'GPS', + groups: ['sensors'], + defaultBaud: 115200, + isUnique: true + }, + { + name: 'TELEMETRY_FRSKY', + groups: ['telemetry'] + }, + { + name: 'TELEMETRY_HOTT', + groups: ['telemetry'] + }, + { + name: 'TELEMETRY_SMARTPORT', + groups: ['telemetry'] + }, + { + name: 'TELEMETRY_LTM', + groups: ['telemetry'] + }, + { + name: 'RX_SERIAL', + groups: ['rx'], + isUnique: true + }, + { + name: 'BLACKBOX', + groups: ['peripherals'] + }, { name: 'TELEMETRY_MAVLINK', groups: ['telemetry'], - sharableWith: ['msp'], - notSharableWith: ['blackbox'], - maxPorts: 1 }, { name: 'TELEMETRY_IBUS', groups: ['telemetry'], - sharableWith: ['msp'], - notSharableWith: ['blackbox'], - maxPorts: 1 }, { name: 'RANGEFINDER', groups: ['sensors'], - maxPorts: 1 + isUnique: true }, { name: 'GSM_SMS', groups: ['telemetry'], - maxPorts: 1 }, { name: 'RUNCAM_DEVICE_CONTROL', groups: ['peripherals'], - maxPorts: 1 }, { name: 'TBS_SMARTAUDIO', groups: ['peripherals'], - maxPorts: 1 + isUnique: true }, { name: 'IRC_TRAMP', groups: ['peripherals'], - maxPorts: 1 + isUnique: true }, { name: 'VTX_FFPV', groups: ['peripherals'], - maxPorts: 1 + isUnique: true }, { name: 'ESC', groups: ['peripherals'], - maxPorts: 1, - defaultBaud: 115200 + defaultBaud: 115200, + isUnique: true }, { name: 'OPFLOW', groups: ['sensors'], - maxPorts: 1 + isUnique: true }, { name: 'FRSKY_OSD', groups: ['peripherals'], - maxPorts: 1, - defaultBaud: 250000 + defaultBaud: 250000, + isUnique: true }, { name: 'DJI_FPV', groups: ['peripherals'], - maxPorts: 1, - defaultBaud: 115200 + defaultBaud: 115200, + isUnique: true }, { name: 'MSP_DISPLAYPORT', groups: ['peripherals'], - maxPorts: 1 + isUnique: true }, { name: 'SMARTPORT_MASTER', groups: ['peripherals'], - maxPorts: 1, defaultBaud: 57600 }, { name: 'SBUS_OUTPUT', groups: ['peripherals'], - maxPorts: 1, defaultBaud: 115200 } ]; diff --git a/tabs/ports.js b/tabs/ports.js index 5b26fd26..b37ae88e 100644 --- a/tabs/ports.js +++ b/tabs/ports.js @@ -101,7 +101,7 @@ TABS.ports.initialize = function (callback) { select_e = functions_e.find(selectElementSelector); if (select_e.length == 0) { - functions_e.prepend(''); select_e = functions_e.find(selectElementSelector); var disabledText = chrome.i18n.getMessage('portsTelemetryDisabled'); select_e.append(''); @@ -118,6 +118,48 @@ TABS.ports.initialize = function (callback) { } } + + $('table.ports tbody').on('change', 'select', onSwitchChange); + $('table.ports tbody').on('change', 'input', onSwitchChange); + } + + function onSwitchChange(e) { + let $cT = $(e.currentTarget); + + let functionName = $cT.val(); + let rule = helper.serialPortHelper.getRuleByName($cT.val()); + + //if type is checkbox then process only if selected + if ($cT.is('input[type="checkbox"]') && !$cT.is(':checked')) { + return; + } + //if type select then process only if selected + if ($cT.is('select') && !functionName) { + return; + } + + if (rule && rule.isUnique) { + let $selects = $cT.closest('tr').find('.function-select'); + $selects.each(function (index, element) { + + let $element = $(element); + + if ($element.val() != functionName) { + $element.val(''); + } + }); + + let $checkboxes = $cT.closest('tr').find('input[type="checkbox"]'); + $checkboxes.each(function (index, element) { + let $element = $(element); + + if ($element.val() != functionName) { + $element.prop('checked', false); + $element.trigger('change'); + } + }); + } + } function on_tab_loaded_handler() { @@ -206,15 +248,10 @@ function updateDefaultBaud(baudSelect, column) { let portName = section.find('.function-' + column).val(); let baudRate = (column === 'telemetry') ? "AUTO" : 115200;; - let rules = helper.serialPortHelper.getRules(); + let rule = helper.serialPortHelper.getRuleByName(portName); - for (i = 0; i < rules.length; i++) { - if (rules[i].name === portName) { - if (typeof rules[i].defaultBaud !== 'undefined') { - baudRate = rules[i].defaultBaud; - } - break; - } + if (rule && typeof rule.defaultBaud !== 'undefined') { + baudRate = rule.defaultBaud; } section.find("." + column + "_baudrate").children('[value=' + baudRate + ']').prop('selected', true);