'use strict'; var ORIG_AUX_CONFIG_IDS = []; TABS.auxiliary = {}; TABS.auxiliary.initialize = function (callback) { GUI.active_tab_ref = this; GUI.active_tab = 'auxiliary'; googleAnalytics.sendAppView('Auxiliary'); function get_mode_ranges() { MSP.send_message(MSPCodes.MSP_MODE_RANGES, false, false, get_box_ids); } function get_box_ids() { MSP.send_message(MSPCodes.MSP_BOXIDS, false, false, get_rc_data); } function get_rc_data() { if (SERIAL_CONFIG.ports.length == 0) { MSP.send_message(MSPCodes.MSP_RC, false, false, get_serial_config); } else { MSP.send_message(MSPCodes.MSP_RC, false, false, load_html); } } function get_serial_config() { MSP.send_message(MSPCodes.MSP_CF_SERIAL_CONFIG, false, false, load_html); } function load_html() { sort_modes_for_display(); GUI.load("./tabs/auxiliary.html", process_html); } MSP.send_message(MSPCodes.MSP_BOXNAMES, false, false, get_mode_ranges); function sort_modes_for_display() { // This array defines the order that the modes are displayed in the configurator modes page configuratorBoxOrder = [ "ARM", "PREARM", // Arming "ANGLE", "HORIZON", "MANUAL", // Flight modes "NAV RTH", "NAV POSHOLD", "NAV CRUISE", "NAV COURSE HOLD", // Navigation mode "NAV ALTHOLD", "HEADING HOLD", "AIR MODE", // Flight mode modifiers "NAV WP", "GCS NAV", "HOME RESET", // Navigation "SERVO AUTOTRIM", "AUTO LEVEL", "AUTO TUNE", "NAV LAUNCH", "LOITER CHANGE", "FLAPERON", // Fixed wing specific "TURTLE", "FPV ANGLE MIX", "TURN ASSIST", "MC BRAKING", "SURFACE", "HEADFREE", "HEADADJ", // Multi-rotor specific "BEEPER", "LEDS OFF", "LIGHTS", // Feedback "OSD OFF", "OSD ALT 1", "OSD ALT 2", "OSD ALT 3", // OSD "CAMSTAB", "CAMERA CONTROL 1", "CAMERA CONTROL 2", "CAMERA CONTROL 3", // FPV Camera "BLACKBOX", "FAILSAFE", "KILLSWITCH", "TELEMETRY", "MSP RC OVERRIDE", "USER1", "USER2" // Misc ]; // Sort the modes var tmpAUX_CONFIG = []; var tmpAUX_CONFIG_IDS =[]; var found = false; var sortedID = 0; for (i=0; i AUX_CONFIG.length) { for (i=0; i 2100) { channelPosition = 2100; } var percentage = (channelPosition - 900) / (2100-900) * 100; $('.modes .ranges .range').each( function () { var auxChannelCandidateIndex = $(this).find('.channel').val(); if (auxChannelCandidateIndex != auxChannelIndex) { return; } $(this).find('.marker').css('left', percentage + '%'); }); } // data pulling functions used inside interval timer function get_rc_data() { if (helper.mspQueue.shouldDrop()) { return; } MSP.send_message(MSPCodes.MSP_RC, false, false, update_ui); } function update_ui() { let hasUsedMode = false; for (var i = 0; i < AUX_CONFIG.length; i++) { var modeElement = $('#mode-' + i); if (modeElement.find(' .range').length == 0) { // if the mode is unused, skip it modeElement.removeClass('off').removeClass('on'); continue; } if (FC.isModeBitSet(modeElement.data('origId'))) { $('.mode .name').eq(modeElement.data('index')).data('modeElement').addClass('on').removeClass('off'); } else { $('.mode .name').eq(modeElement.data('index')).data('modeElement').removeClass('on').addClass('off'); } hasUsedMode = true; } let hideUnused = hideUnusedModes && hasUsedMode; for (let i = 0; i < AUX_CONFIG.length; i++) { let modeElement = $('#mode-' + i); if (modeElement.find(' .range').length == 0) { modeElement.toggle(!hideUnused); } } var auxChannelCount = RC.active_channels - 4; for (var i = 0; i < (auxChannelCount); i++) { update_marker(i, RC.channels[i + 4]); } } let hideUnusedModes = false; chrome.storage.local.get('hideUnusedModes', function (result) { $("input#switch-toggle-unused") .change(function() { hideUnusedModes = $(this).prop("checked"); chrome.storage.local.set({ hideUnusedModes: hideUnusedModes }); update_ui(); }) .prop("checked", !!result.hideUnusedModes) .change(); }); // update ui instantly on first load update_ui(); // enable data pulling helper.mspBalancedInterval.add('aux_data_pull', 50, 1, get_rc_data); GUI.content_ready(callback); } }; TABS.auxiliary.cleanup = function (callback) { if (callback) callback(); };