From 35baf4302bbe211b8168f7928a7aa22609f0ad61 Mon Sep 17 00:00:00 2001 From: "U-PAWEL-X220\\pawel" Date: Wed, 4 Jan 2017 22:50:18 +0100 Subject: [PATCH 01/17] first cut of presets --- _locales/en/messages.json | 9 ++ js/gui.js | 3 +- main.html | 3 + main.js | 3 + tabs/configuration.js | 1 + tabs/profiles.css | 27 ++++ tabs/profiles.html | 40 ++++++ tabs/profiles.js | 250 ++++++++++++++++++++++++++++++++++++++ 8 files changed, 335 insertions(+), 1 deletion(-) create mode 100644 tabs/profiles.css create mode 100644 tabs/profiles.html create mode 100644 tabs/profiles.js diff --git a/_locales/en/messages.json b/_locales/en/messages.json index daa44a93..7841ee1f 100755 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -1894,5 +1894,14 @@ }, "armingCheckFail": { "message": "FAIL" + }, + "tabPresets": { + "message": "Presets" + }, + "presetsPreset": { + "message": "Preset" + }, + "presetsDescription": { + "message": "Description" } } \ No newline at end of file diff --git a/js/gui.js b/js/gui.js index e3bdeed6..e70376ce 100644 --- a/js/gui.js +++ b/js/gui.js @@ -37,7 +37,8 @@ var GUI_control = function () { 'sensors', 'servos', 'setup', - 'osd' + 'osd', + 'profiles' ]; this.allowedTabs = this.defaultAllowedTabsWhenDisconnected; diff --git a/main.html b/main.html index 55bb2dc9..4e209cb5 100755 --- a/main.html +++ b/main.html @@ -28,6 +28,7 @@ + @@ -88,6 +89,7 @@ + @@ -221,6 +223,7 @@
diff --git a/tabs/receiver.js b/tabs/receiver.js index a7a8ce42..86680c8b 100644 --- a/tabs/receiver.js +++ b/tabs/receiver.js @@ -1,3 +1,5 @@ +/*global chrome*/ + 'use strict'; TABS.receiver = { @@ -12,38 +14,23 @@ TABS.receiver.initialize = function (callback) { googleAnalytics.sendAppView('Receiver'); } - function get_misc_data() { - MSP.send_message(MSPCodes.MSP_MISC, false, false, get_rc_data); - } + var loadChainer = new MSPChainerClass(); - function get_rc_data() { - MSP.send_message(MSPCodes.MSP_RC, false, false, get_rc_map); - } - - function get_rc_map() { - MSP.send_message(MSPCodes.MSP_RX_MAP, false, false, load_config); - } - - // Fetch features so we can check if RX_MSP is enabled: - function load_config() { - MSP.send_message(MSPCodes.MSP_BF_CONFIG, false, false, load_rc_configs); - } - - function load_rc_configs() { - var next_callback = load_html; - if (semver.gte(CONFIG.apiVersion, "1.15.0")) { - MSP.send_message(MSPCodes.MSP_RC_DEADBAND, false, false, next_callback); - } else { - next_callback(); - } - } + loadChainer.setChain([ + mspHelper.loadRcTuningData, + mspHelper.loadMisc, + mspHelper.loadRcData, + mspHelper.loadRcMap, + mspHelper.loadBfConfig, + mspHelper.loadRcDeadband + ]); + loadChainer.setExitPoint(load_html); + loadChainer.execute(); function load_html() { $('#content').load("./tabs/receiver.html", process_html); } - MSP.send_message(MSPCodes.MSP_RC_TUNING, false, false, get_misc_data); - function process_html() { // translate to user-selected language localize(); From e39094ae0c33d99b877149bc59e5aab33e880719 Mon Sep 17 00:00:00 2001 From: "U-PAWEL-X220\\pawel" Date: Fri, 6 Jan 2017 21:23:12 +0100 Subject: [PATCH 09/17] setup page using load chain --- tabs/setup.js | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/tabs/setup.js b/tabs/setup.js index 9e1eaa06..6f4c2fe7 100755 --- a/tabs/setup.js +++ b/tabs/setup.js @@ -1,3 +1,4 @@ +/*global chrome*/ 'use strict'; TABS.setup = { @@ -12,24 +13,21 @@ TABS.setup.initialize = function (callback) { googleAnalytics.sendAppView('Setup'); } - function load_ident() { - MSP.send_message(MSPCodes.MSP_IDENT, false, false, load_config); - } + var loadChainer = new MSPChainerClass(); - function load_config() { - MSP.send_message(MSPCodes.MSP_BF_CONFIG, false, false, load_misc_data); - } - - function load_misc_data() { - MSP.send_message(MSPCodes.MSP_MISC, false, false, load_html); - } + loadChainer.setChain([ + mspHelper.loadStatus, + mspHelper.loadMspIdent, + mspHelper.loadBfConfig, + mspHelper.loadMisc + ]); + loadChainer.setExitPoint(load_html); + loadChainer.execute(); function load_html() { $('#content').load("./tabs/setup.html", process_html); } - MSP.send_message(MSPCodes.MSP_STATUS, false, false, load_ident); - function process_html() { // translate to user-selected language localize(); @@ -246,9 +244,19 @@ TABS.setup.initializeInstruments = function() { }; }; -TABS.setup.initialize3D = function (compatibility) { +TABS.setup.initialize3D = function () { var self = this, - loader, canvas, wrapper, renderer, camera, scene, light, light2, modelWrapper, model, model_file, + loader, + canvas, + wrapper, + renderer, + camera, + scene, + light, + light2, + modelWrapper, + model, + model_file, useWebGlRenderer = false; canvas = $('.model-and-info #canvas'); @@ -269,7 +277,7 @@ TABS.setup.initialize3D = function (compatibility) { // // modelWrapper adds an extra axis of rotation to avoid gimbal lock with the euler angles - modelWrapper = new THREE.Object3D() + modelWrapper = new THREE.Object3D(); // // load the model including materials if (useWebGlRenderer) { @@ -279,10 +287,8 @@ TABS.setup.initialize3D = function (compatibility) { } // Temporary workaround for 'custom' model until akfreak's custom model is merged. - var useLegacyCustomModel = false; if (model_file == 'custom') { model_file = 'fallback'; - useLegacyCustomModel = true; } // setup scene From e0c14837a09e04441c9eb1cc5ca1902a62c7e947 Mon Sep 17 00:00:00 2001 From: "U-PAWEL-X220\\pawel" Date: Mon, 9 Jan 2017 19:06:45 +0100 Subject: [PATCH 10/17] Save chainer on presets page --- js/msp/MSPHelper.js | 48 ++++++++++++++++++++ tabs/profiles.js | 105 +++++++++++++------------------------------- 2 files changed, 78 insertions(+), 75 deletions(-) diff --git a/js/msp/MSPHelper.js b/js/msp/MSPHelper.js index 7c36894d..827bb0a4 100644 --- a/js/msp/MSPHelper.js +++ b/js/msp/MSPHelper.js @@ -1826,5 +1826,53 @@ var mspHelper = (function (gui) { MSP.send_message(MSPCodes.MSP_RC, false, false, callback); }; + self.saveToEeprom = function saveToEeprom(callback) { + MSP.send_message(MSPCodes.MSP_EEPROM_WRITE, false, false, callback); + }; + + self.saveINAVPidConfig = function (callback) { + if (semver.gt(CONFIG.flightControllerVersion, "1.3.0")) { + MSP.send_message(MSPCodes.MSP_SET_INAV_PID, mspHelper.crunch(MSPCodes.MSP_SET_INAV_PID), false, callback); + } else { + callback(); + } + }; + + self.saveLooptimeConfig = function (callback) { + MSP.send_message(MSPCodes.MSP_SET_LOOP_TIME, mspHelper.crunch(MSPCodes.MSP_SET_LOOP_TIME), false, callback); + }; + + self.saveAdvancedConfig = function (callback) { + if (semver.gte(CONFIG.flightControllerVersion, "1.3.0")) { + MSP.send_message(MSPCodes.MSP_SET_ADVANCED_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_ADVANCED_CONFIG), false, callback); + } else { + callback(); + } + }; + + self.saveFilterConfig = function (callback) { + if (semver.gte(CONFIG.flightControllerVersion, "1.4.0")) { + MSP.send_message(MSPCodes.MSP_SET_FILTER_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_FILTER_CONFIG), false, callback); + } else { + callback(); + } + }; + + self.savePidData = function (callback) { + MSP.send_message(MSPCodes.MSP_SET_PID, mspHelper.crunch(MSPCodes.MSP_SET_PID), false, callback); + }; + + self.saveRcTuningData = function (callback) { + MSP.send_message(MSPCodes.MSP_SET_RC_TUNING, mspHelper.crunch(MSPCodes.MSP_SET_RC_TUNING), false, callback); + }; + + self.savePidAdvanced = function (callback) { + if (semver.gte(CONFIG.flightControllerVersion, "1.4.0")) { + MSP.send_message(MSPCodes.MSP_SET_PID_ADVANCED, mspHelper.crunch(MSPCodes.MSP_SET_PID_ADVANCED), false, callback); + } else { + callback(); + } + }; + return self; })(GUI); diff --git a/tabs/profiles.js b/tabs/profiles.js index 6075361f..08e82a6d 100644 --- a/tabs/profiles.js +++ b/tabs/profiles.js @@ -41,7 +41,7 @@ presets.presets = [ "5 inch propellers", "400g-650g weight", "F3 or F4 CPU", - "MPU6000 gyro", + "MPU6000 or MPU6050 gyro", "No GPS capabilities" ], applyDefaults: ["PIDs", "INAV_PID_CONFIG", "ADVANCED_CONFIG", "RC_tuning", "PID_ADVANCED", "FILTER_CONFIG", "FC_CONFIG"], @@ -124,7 +124,8 @@ TABS.profiles.initialize = function (callback, scrollPosition) { var currentPreset, currentPresetId, - loadChainer = new MSPChainerClass(); + loadChainer = new MSPChainerClass(), + saveChainer = new MSPChainerClass(); if (GUI.active_tab != 'profiles') { GUI.active_tab = 'profiles'; @@ -144,10 +145,36 @@ TABS.profiles.initialize = function (callback, scrollPosition) { loadChainer.setExitPoint(loadHtml); loadChainer.execute(); + saveChainer.setChain([ + mspHelper.saveINAVPidConfig, + mspHelper.saveLooptimeConfig, + mspHelper.saveAdvancedConfig, + mspHelper.saveFilterConfig, + mspHelper.savePidData, + mspHelper.saveRcTuningData, + mspHelper.savePidAdvanced, + mspHelper.saveToEeprom + ]); + saveChainer.setExitPoint(reboot); + function loadHtml() { $('#content').load("./tabs/profiles.html", processHtml); } + function reboot() { + //noinspection JSUnresolvedVariable + GUI.log(chrome.i18n.getMessage('configurationEepromSaved')); + GUI.tab_switch_cleanup(function () { + MSP.send_message(MSPCodes.MSP_SET_REBOOT, false, false, reinitialize); + }); + } + + function reinitialize() { + //noinspection JSUnresolvedVariable + GUI.log(chrome.i18n.getMessage('deviceRebooting')); + GUI.handleReconnect($('.tab_setup a')); + } + function fillPresetDescription(preset) { var $features = $('#preset-features'); @@ -197,81 +224,9 @@ TABS.profiles.initialize = function (callback, scrollPosition) { } } - saveINAVPidConfig(); + saveChainer.execute(); }); - //FIXME duplicate from configuration.js - function saveINAVPidConfig() { - var next_callback = saveLooptimeConfig; - if (semver.gt(CONFIG.flightControllerVersion, "1.3.0")) { - MSP.send_message(MSPCodes.MSP_SET_INAV_PID, mspHelper.crunch(MSPCodes.MSP_SET_INAV_PID), false, next_callback); - } else { - next_callback(); - } - } - - //FIXME duplicate from configuration.js - function saveLooptimeConfig() { - MSP.send_message(MSPCodes.MSP_SET_LOOP_TIME, mspHelper.crunch(MSPCodes.MSP_SET_LOOP_TIME), false, saveAdvancedConfig); - } - - //FIXME Duplicate - function saveAdvancedConfig() { - var next_callback = saveFilterConfig; - if (semver.gte(CONFIG.flightControllerVersion, "1.3.0")) { - MSP.send_message(MSPCodes.MSP_SET_ADVANCED_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_ADVANCED_CONFIG), false, next_callback); - } else { - next_callback(); - } - } - - //FIXME duplicate - function saveFilterConfig() { - var next_callback = savePids; - if (semver.gte(CONFIG.flightControllerVersion, "1.4.0")) { - MSP.send_message(MSPCodes.MSP_SET_FILTER_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_FILTER_CONFIG), false, next_callback); - } else { - next_callback(); - } - } - - function savePids() { - MSP.send_message(MSPCodes.MSP_SET_PID, mspHelper.crunch(MSPCodes.MSP_SET_PID), false, saveRcTuning); - } - - function saveRcTuning() { - MSP.send_message(MSPCodes.MSP_SET_RC_TUNING, mspHelper.crunch(MSPCodes.MSP_SET_RC_TUNING), false, savePidAdvanced); - } - - function savePidAdvanced() { - var next_callback = saveToEeprom; - if (semver.gte(CONFIG.flightControllerVersion, "1.4.0")) { - MSP.send_message(MSPCodes.MSP_SET_PID_ADVANCED, mspHelper.crunch(MSPCodes.MSP_SET_PID_ADVANCED), false, next_callback); - } else { - next_callback(); - } - } - - //FIXME duplicate from configuration.js - function saveToEeprom() { - MSP.send_message(MSPCodes.MSP_EEPROM_WRITE, false, false, reboot); - } - - function reboot() { - //noinspection JSUnresolvedVariable - GUI.log(chrome.i18n.getMessage('configurationEepromSaved')); - - GUI.tab_switch_cleanup(function () { - MSP.send_message(MSPCodes.MSP_SET_REBOOT, false, false, reinitialize); - }); - } - - function reinitialize() { - //noinspection JSUnresolvedVariable - GUI.log(chrome.i18n.getMessage('deviceRebooting')); - GUI.handleReconnect($('.tab_setup a')); - } - GUI.interval_add('status_pull', function status_pull() { MSP.send_message(MSPCodes.MSP_STATUS); From b99c5c1bf4db09aadecf96f722b2f2ed75723e32 Mon Sep 17 00:00:00 2001 From: "U-PAWEL-X220\\pawel" Date: Mon, 9 Jan 2017 19:20:37 +0100 Subject: [PATCH 11/17] mixer added to preset --- js/model.js | 51 ++++++++++++++++++++++----------------------- js/msp/MSPHelper.js | 4 ++++ tabs/profiles.js | 8 ++++++- 3 files changed, 36 insertions(+), 27 deletions(-) diff --git a/js/model.js b/js/model.js index b30f8b9f..e67f2780 100644 --- a/js/model.js +++ b/js/model.js @@ -2,30 +2,29 @@ // generate mixer var mixerList = [ - {name: 'Tricopter', model: 'tricopter', image: 'tri'}, - {name: 'Quad +', model: 'quad_x', image: 'quad_p'}, - {name: 'Quad X', model: 'quad_x', image: 'quad_x'}, - {name: 'Bicopter', model: 'custom', image: 'bicopter'}, - {name: 'Gimbal', model: 'custom', image: 'custom'}, - {name: 'Y6', model: 'y6', image: 'y6'}, - {name: 'Hex +', model: 'hex_plus', image: 'hex_p'}, - {name: 'Flying Wing', model: 'custom', image: 'flying_wing'}, - {name: 'Y4', model: 'y4', image: 'y4'}, - {name: 'Hex X', model: 'hex_x', image: 'hex_x'}, - {name: 'Octo X8', model: 'custom', image: 'octo_x8'}, - {name: 'Octo Flat +', model: 'custom', image: 'octo_flat_p'}, - {name: 'Octo Flat X', model: 'custom', image: 'octo_flat_x'}, - {name: 'Airplane', model: 'custom', image: 'airplane'}, - {name: 'Heli 120', model: 'custom', image: 'custom'}, - {name: 'Heli 90', model: 'custom', image: 'custom'}, - {name: 'V-tail Quad', model: 'quad_vtail', image: 'vtail_quad'}, - {name: 'Hex H', model: 'custom', image: 'custom'}, - {name: 'PPM to SERVO', model: 'custom', image: 'custom'}, - {name: 'Dualcopter', model: 'custom', image: 'custom'}, - {name: 'Singlecopter', model: 'custom', image: 'custom'}, - {name: 'A-tail Quad', model: 'quad_atail', image: 'atail_quad'}, - {name: 'Custom', model: 'custom', image: 'custom'}, - {name: 'Custom Airplane', model: 'custom', image: 'custom'}, - {name: 'Custom Tricopter', model: 'custom', image: 'custom'} - + {name: 'Tricopter', model: 'tricopter', image: 'tri'}, // 1 + {name: 'Quad +', model: 'quad_x', image: 'quad_p'}, // 2 + {name: 'Quad X', model: 'quad_x', image: 'quad_x'}, // 3 + {name: 'Bicopter', model: 'custom', image: 'bicopter'}, // 4 + {name: 'Gimbal', model: 'custom', image: 'custom'}, // 5 + {name: 'Y6', model: 'y6', image: 'y6'}, // 6 + {name: 'Hex +', model: 'hex_plus', image: 'hex_p'}, // 7 + {name: 'Flying Wing', model: 'custom', image: 'flying_wing'}, // 8 + {name: 'Y4', model: 'y4', image: 'y4'}, // 9 + {name: 'Hex X', model: 'hex_x', image: 'hex_x'}, // 10 + {name: 'Octo X8', model: 'custom', image: 'octo_x8'}, // 11 + {name: 'Octo Flat +', model: 'custom', image: 'octo_flat_p'}, // 12 + {name: 'Octo Flat X', model: 'custom', image: 'octo_flat_x'}, // 13 + {name: 'Airplane', model: 'custom', image: 'airplane'}, // 14 + {name: 'Heli 120', model: 'custom', image: 'custom'}, // 15 + {name: 'Heli 90', model: 'custom', image: 'custom'}, // 16 + {name: 'V-tail Quad', model: 'quad_vtail', image: 'vtail_quad'}, // 17 + {name: 'Hex H', model: 'custom', image: 'custom'}, // 18 + {name: 'PPM to SERVO', model: 'custom', image: 'custom'}, // 19 + {name: 'Dualcopter', model: 'custom', image: 'custom'}, // 20 + {name: 'Singlecopter', model: 'custom', image: 'custom'}, // 21 + {name: 'A-tail Quad', model: 'quad_atail', image: 'atail_quad'}, // 22 + {name: 'Custom', model: 'custom', image: 'custom'}, // 23 + {name: 'Custom Airplane', model: 'custom', image: 'custom'}, // 24 + {name: 'Custom Tricopter', model: 'custom', image: 'custom'} // 25 ]; diff --git a/js/msp/MSPHelper.js b/js/msp/MSPHelper.js index 827bb0a4..1916aa7b 100644 --- a/js/msp/MSPHelper.js +++ b/js/msp/MSPHelper.js @@ -1874,5 +1874,9 @@ var mspHelper = (function (gui) { } }; + self.saveBfConfig = function (callback) { + MSP.send_message(MSPCodes.MSP_SET_BF_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_BF_CONFIG), false, callback); + }; + return self; })(GUI); diff --git a/tabs/profiles.js b/tabs/profiles.js index 08e82a6d..2fade76d 100644 --- a/tabs/profiles.js +++ b/tabs/profiles.js @@ -46,6 +46,7 @@ presets.presets = [ ], applyDefaults: ["PIDs", "INAV_PID_CONFIG", "ADVANCED_CONFIG", "RC_tuning", "PID_ADVANCED", "FILTER_CONFIG", "FC_CONFIG"], settings: [ + presets.elementHelper("BF_CONFIG", "mixerConfiguration", 3), presets.elementHelper("INAV_PID_CONFIG", "asynchronousMode", 2), presets.elementHelper("FC_CONFIG", "loopTime", 1000), presets.elementHelper("INAV_PID_CONFIG", "gyroscopeLpf", 0), @@ -68,10 +69,13 @@ presets.presets = [ ], applyDefaults: ["PIDs", "INAV_PID_CONFIG", "ADVANCED_CONFIG", "RC_tuning", "PID_ADVANCED", "FILTER_CONFIG", "FC_CONFIG"], settings: [ + presets.elementHelper("BF_CONFIG", "mixerConfiguration", 8), presets.elementHelper("PIDs", 0, [15, 30, 15]), //ROLL PIDs presets.elementHelper("PIDs", 1, [15, 40, 15]), //PITCH PIDs presets.elementHelper("RC_tuning", "roll_rate", 400), - presets.elementHelper("RC_tuning", "pitch_rate", 150) + presets.elementHelper("RC_tuning", "pitch_rate", 150), + presets.elementHelper("ADVANCED_CONFIG", "gyroSync", 1), + presets.elementHelper("INAV_PID_CONFIG", "gyroscopeLpf", 1) ] } ]; @@ -134,6 +138,7 @@ TABS.profiles.initialize = function (callback, scrollPosition) { loadChainer.setChain([ mspHelper.loadMspIdent, + mspHelper.loadBfConfig, mspHelper.loadLoopTime, mspHelper.loadINAVPidConfig, mspHelper.loadAdvancedConfig, @@ -153,6 +158,7 @@ TABS.profiles.initialize = function (callback, scrollPosition) { mspHelper.savePidData, mspHelper.saveRcTuningData, mspHelper.savePidAdvanced, + mspHelper.saveBfConfig, mspHelper.saveToEeprom ]); saveChainer.setExitPoint(reboot); From e8705b0365b0b0d274c98ba61b10a65e82f3b371 Mon Sep 17 00:00:00 2001 From: "U-PAWEL-X220\\pawel" Date: Mon, 9 Jan 2017 19:58:43 +0100 Subject: [PATCH 12/17] configuration using save chainer --- js/msp/MSPHelper.js | 40 +++++++++++++++ tabs/configuration.js | 117 +++++++++++++----------------------------- tabs/profiles.js | 6 +++ 3 files changed, 82 insertions(+), 81 deletions(-) diff --git a/js/msp/MSPHelper.js b/js/msp/MSPHelper.js index 1916aa7b..22d4db70 100644 --- a/js/msp/MSPHelper.js +++ b/js/msp/MSPHelper.js @@ -1826,6 +1826,10 @@ var mspHelper = (function (gui) { MSP.send_message(MSPCodes.MSP_RC, false, false, callback); }; + self.loadAccTrim = function (callback) { + MSP.send_message(MSPCodes.MSP_ACC_TRIM, false, false, callback); + }; + self.saveToEeprom = function saveToEeprom(callback) { MSP.send_message(MSPCodes.MSP_EEPROM_WRITE, false, false, callback); }; @@ -1878,5 +1882,41 @@ var mspHelper = (function (gui) { MSP.send_message(MSPCodes.MSP_SET_BF_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_BF_CONFIG), false, callback); }; + self.saveMisc = function (callback) { + MSP.send_message(MSPCodes.MSP_SET_MISC, mspHelper.crunch(MSPCodes.MSP_SET_MISC), false, callback); + }; + + self.save3dConfig = function (callback) { + MSP.send_message(MSPCodes.MSP_SET_3D, mspHelper.crunch(MSPCodes.MSP_SET_3D), false, callback); + }; + + self.saveSensorAlignment = function (callback) { + MSP.send_message(MSPCodes.MSP_SET_SENSOR_ALIGNMENT, mspHelper.crunch(MSPCodes.MSP_SET_SENSOR_ALIGNMENT), false, callback); + }; + + self.saveAccTrim = function (callback) { + MSP.send_message(MSPCodes.MSP_SET_ACC_TRIM, mspHelper.crunch(MSPCodes.MSP_SET_ACC_TRIM), false, callback); + }; + + self.saveArmingConfig = function (callback) { + MSP.send_message(MSPCodes.MSP_SET_ARMING_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_ARMING_CONFIG), false, callback); + }; + + self.saveRxConfig = function (callback) { + if(semver.gte(CONFIG.apiVersion, "1.21.0")) { + MSP.send_message(MSPCodes.MSP_SET_RX_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_RX_CONFIG), false, callback); + } else { + callback(); + } + }; + + self.saveSensorConfig = function (callback) { + if(semver.gte(CONFIG.flightControllerVersion, "1.5.0")) { + MSP.send_message(MSPCodes.MSP_SET_SENSOR_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_SENSOR_CONFIG), false, callback); + } else { + callback(); + } + }; + return self; })(GUI); diff --git a/tabs/configuration.js b/tabs/configuration.js index c4595f88..dac56df2 100644 --- a/tabs/configuration.js +++ b/tabs/configuration.js @@ -1,3 +1,4 @@ +/*global chrome*/ 'use strict'; TABS.configuration = {}; @@ -22,11 +23,44 @@ TABS.configuration.initialize = function (callback, scrollPosition) { mspHelper.loadSensorAlignment, mspHelper.loadAdvancedConfig, mspHelper.loadINAVPidConfig, - mspHelper.loadSensorConfig + mspHelper.loadSensorConfig, + mspHelper.loadAccTrim ]); loadChainer.setExitPoint(load_html); loadChainer.execute(); + var saveChainer = new MSPChainerClass(); + + saveChainer.setChain([ + mspHelper.saveMisc, + mspHelper.save3dConfig, + mspHelper.saveSensorAlignment, + mspHelper.saveAccTrim, + mspHelper.saveArmingConfig, + mspHelper.saveLooptimeConfig, + mspHelper.saveRxConfig, + mspHelper.saveAdvancedConfig, + mspHelper.saveINAVPidConfig, + mspHelper.saveSensorConfig, + mspHelper.saveToEeprom + ]); + saveChainer.setExitPoint(reboot); + + function reboot() { + //noinspection JSUnresolvedVariable + GUI.log(chrome.i18n.getMessage('configurationEepromSaved')); + + GUI.tab_switch_cleanup(function() { + MSP.send_message(MSPCodes.MSP_SET_REBOOT, false, false, reinitialize); + }); + } + + function reinitialize() { + //noinspection JSUnresolvedVariable + GUI.log(chrome.i18n.getMessage('deviceRebooting')); + GUI.handleReconnect($('.tab_configuration a')); + } + function load_html() { $('#content').load("./tabs/configuration.html", process_html); } @@ -594,86 +628,7 @@ TABS.configuration.initialize = function (callback, scrollPosition) { } } - function save_misc() { - MSP.send_message(MSPCodes.MSP_SET_MISC, mspHelper.crunch(MSPCodes.MSP_SET_MISC), false, save_3d); - } - - function save_3d() { - MSP.send_message(MSPCodes.MSP_SET_3D, mspHelper.crunch(MSPCodes.MSP_SET_3D), false, save_sensor_alignment); - } - - function save_sensor_alignment() { - MSP.send_message(MSPCodes.MSP_SET_SENSOR_ALIGNMENT, mspHelper.crunch(MSPCodes.MSP_SET_SENSOR_ALIGNMENT), false, save_acc_trim); - } - - function save_acc_trim() { - MSP.send_message(MSPCodes.MSP_SET_ACC_TRIM, mspHelper.crunch(MSPCodes.MSP_SET_ACC_TRIM), false, save_arming_config); - } - - function save_arming_config() { - MSP.send_message(MSPCodes.MSP_SET_ARMING_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_ARMING_CONFIG), false, save_looptime_config); - } - - function save_looptime_config() { - MSP.send_message(MSPCodes.MSP_SET_LOOP_TIME, mspHelper.crunch(MSPCodes.MSP_SET_LOOP_TIME), false, save_rx_config); - } - - function save_rx_config() { - var next_callback = saveAdvancedConfig; - if(semver.gte(CONFIG.apiVersion, "1.21.0")) { - MSP.send_message(MSPCodes.MSP_SET_RX_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_RX_CONFIG), false, next_callback); - } else { - next_callback(); - } - } - - function saveAdvancedConfig() { - var next_callback = saveINAVPidConfig; - if(semver.gte(CONFIG.flightControllerVersion, "1.3.0")) { - MSP.send_message(MSPCodes.MSP_SET_ADVANCED_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_ADVANCED_CONFIG), false, next_callback); - } else { - next_callback(); - } - } - - function saveINAVPidConfig() { - var next_callback = saveSensorConfig; - if(semver.gt(CONFIG.flightControllerVersion, "1.3.0")) { - MSP.send_message(MSPCodes.MSP_SET_INAV_PID, mspHelper.crunch(MSPCodes.MSP_SET_INAV_PID), false, next_callback); - } else { - next_callback(); - } - } - - function saveSensorConfig() { - var next_callback = save_to_eeprom; - if(semver.gte(CONFIG.flightControllerVersion, "1.5.0")) { - MSP.send_message(MSPCodes.MSP_SET_SENSOR_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_SENSOR_CONFIG), false, next_callback); - } else { - next_callback(); - } - } - - function save_to_eeprom() { - MSP.send_message(MSPCodes.MSP_EEPROM_WRITE, false, false, reboot); - } - - function reboot() { - //noinspection JSUnresolvedVariable - GUI.log(chrome.i18n.getMessage('configurationEepromSaved')); - - GUI.tab_switch_cleanup(function() { - MSP.send_message(MSPCodes.MSP_SET_REBOOT, false, false, reinitialize); - }); - } - - function reinitialize() { - //noinspection JSUnresolvedVariable - GUI.log(chrome.i18n.getMessage('deviceRebooting')); - GUI.handleReconnect($('.tab_configuration a')); - } - - MSP.send_message(MSPCodes.MSP_SET_BF_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_BF_CONFIG), false, save_misc); + saveChainer.execute(); }); // status data pulled via separate timer with static speed diff --git a/tabs/profiles.js b/tabs/profiles.js index 2fade76d..31cb1e2c 100644 --- a/tabs/profiles.js +++ b/tabs/profiles.js @@ -31,6 +31,12 @@ presets.defaultValues = { FC_CONFIG: {"loopTime": 2000} }; +/* + * When defining a preset, following fields are required: + * + * BF_CONFIG::mixerConfiguration + * + */ presets.presets = [ { name: '5" Racer', From ea3c972a495712a79013e324c676ccb4e415385d Mon Sep 17 00:00:00 2001 From: "U-PAWEL-X220\\pawel" Date: Mon, 9 Jan 2017 21:12:05 +0100 Subject: [PATCH 13/17] Preset save modal --- _locales/en/messages.json | 15 ++++++++ main.css | 79 +++++++++++++++++++++++++++++++++++++++ tabs/profiles.html | 36 ++++++++++++------ tabs/profiles.js | 48 ++++++++++++++++-------- 4 files changed, 150 insertions(+), 28 deletions(-) diff --git a/_locales/en/messages.json b/_locales/en/messages.json index 7841ee1f..1e37ecb3 100755 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -1903,5 +1903,20 @@ }, "presetsDescription": { "message": "Description" + }, + "presetsButtonApply": { + "message": "Apply" + }, + "presetApplyTitle" : { + "message": "Confirm" + }, + "presetsButtonSaveAndReboot": { + "message": "Save and reboot" + }, + "presetsApplyHeader": { + "message": "Warning" + }, + "presetApplyDescription": { + "message": "Preset overwrites selected configuration values including mixer, filtering, PIDs and other. Settings like: flight modes, radio settings, failsafe and OSD are not changed. Applied values should NOT treated as final values, but entry points for final tuning.
Always check new configuration before flying!" } } \ No newline at end of file diff --git a/main.css b/main.css index f47e6d05..00e1084d 100644 --- a/main.css +++ b/main.css @@ -1819,4 +1819,83 @@ select { .full-width { width: 100% !important; +} + +.is-hidden { + display: none; +} + +.modal__content { + +} + +.modal__buttons { + position: absolute; + bottom: 0; + right: 0; + margin: 1em; +} + +.modal__button { + padding: 1em; + text-align: center; + background-color: #fff; + border-radius: 4px; + border: 1px solid #37a8db; + color: #37a8db; + font-family: 'open_sanssemibold', Arial, serif; + font-size: 12px; + line-height: 13px; + display: block; + transition: all ease 0.2s; + text-decoration: none; + cursor: pointer; +} + +.modal__button--main { + background-color: #37a8db; + text-shadow: 0 1px rgba(0, 0, 0, 0.25); + color: #fff; + border: 1px solid #3a9dbf; + transition: all ease 0.2s; +} + +.modal__button--main:active { + background-color: #37a8db; + transition: all ease 0.0s; + box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.35); +} + +.modal__button--main:hover { + background-color: #3394b5; + transition: all ease 0.2s; +} + +.modal__button--disabled { + cursor: default; + color: #fff; + background-color: #AFAFAF; + border: 1px solid #AFAFAF; + pointer-events: none; + text-shadow: none; + opacity: 0.5; +} + +.modal__title { + border-bottom: 1px solid #37a8db; + font-size: 20px; + line-height: 24px; + height: 30px; + font-family: 'open_sanslight', Arial, serif; + margin-bottom: 15px; +} + +.modal__title--warning { + border-bottom: none; + color: darkred; +} + +.modal__text { + line-height: 1.5em; + font-size: 1.3em; } \ No newline at end of file diff --git a/tabs/profiles.html b/tabs/profiles.html index 7fb0d52c..b0866e42 100644 --- a/tabs/profiles.html +++ b/tabs/profiles.html @@ -2,22 +2,24 @@
Presets
-
-
-
-
-
-
-
- +
+
+
+
+
+
+
+
+ +
-
+
@@ -30,11 +32,21 @@
+ +
- +
\ No newline at end of file diff --git a/tabs/profiles.js b/tabs/profiles.js index 31cb1e2c..b456de71 100644 --- a/tabs/profiles.js +++ b/tabs/profiles.js @@ -187,6 +187,24 @@ TABS.profiles.initialize = function (callback, scrollPosition) { GUI.handleReconnect($('.tab_setup a')); } + function applyAndSave() { + + presets.model.applyDefaults(currentPreset.applyDefaults, presets.defaultValues); + + var setting; + + //Iterate over settings saved in preset + for (var i in currentPreset.settings) { + if (currentPreset.settings.hasOwnProperty(i)) { + setting = currentPreset.settings[i]; + //Apply setting + window[setting.group][setting.field] = setting.value; + } + } + + saveChainer.execute(); + } + function fillPresetDescription(preset) { var $features = $('#preset-features'); @@ -214,6 +232,12 @@ TABS.profiles.initialize = function (callback, scrollPosition) { currentPresetId = $presetList.val(); currentPreset = presets.presets[currentPresetId]; fillPresetDescription(currentPreset); + $('#save-button').removeClass('disabled'); + }); + + $('#execute-button').click(function () { + applyAndSave(); + OSD.GUI.jbox.close(); }); localize(); @@ -221,22 +245,14 @@ TABS.profiles.initialize = function (callback, scrollPosition) { //noinspection JSValidateTypes $('#content').scrollTop((scrollPosition) ? scrollPosition : 0); - $('#save-button').click(function () { - - presets.model.applyDefaults(currentPreset.applyDefaults, presets.defaultValues); - - var setting; - - //Iterate over settings saved in preset - for (var i in currentPreset.settings) { - if (currentPreset.settings.hasOwnProperty(i)) { - setting = currentPreset.settings[i]; - //Apply setting - window[setting.group][setting.field] = setting.value; - } - } - - saveChainer.execute(); + OSD.GUI.jbox = new jBox('Modal', { + width: 600, + height: 240, + closeButton: 'title', + animation: false, + attach: $('#save-button'), + title: chrome.i18n.getMessage("presetApplyTitle"), + content: $('#presetApplyContent') }); GUI.interval_add('status_pull', function status_pull() { From a734264d87bb35e6e0da5797acd7001fabd59f3b Mon Sep 17 00:00:00 2001 From: "Pawel Spychalski (DzikuVx)" Date: Tue, 10 Jan 2017 16:28:08 +0100 Subject: [PATCH 14/17] presets removed from < 1.6 firmware --- js/serial_backend.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/js/serial_backend.js b/js/serial_backend.js index 5fdbd3b6..fc359fca 100755 --- a/js/serial_backend.js +++ b/js/serial_backend.js @@ -260,6 +260,13 @@ function onOpen(openInfo) { GUI.allowedTabs.splice(GUI.allowedTabs.indexOf('osd'), 1); } + /* + * Remove Presets on older than 1.6 + */ + if (semver.lt(CONFIG.flightControllerVersion, "1.6.0")) { + GUI.allowedTabs.splice(GUI.allowedTabs.indexOf('profiles'), 1); + } + onConnect(); $('#tabs ul.mode-connected .tab_setup a').click(); From 08559abdd7dbe96bc85a7a5513974f4d43f50623 Mon Sep 17 00:00:00 2001 From: "U-PAWEL-X220\\pawel" Date: Tue, 10 Jan 2017 19:37:10 +0100 Subject: [PATCH 15/17] missing save --- tabs/configuration.js | 1 + 1 file changed, 1 insertion(+) diff --git a/tabs/configuration.js b/tabs/configuration.js index dac56df2..a79555a5 100644 --- a/tabs/configuration.js +++ b/tabs/configuration.js @@ -32,6 +32,7 @@ TABS.configuration.initialize = function (callback, scrollPosition) { var saveChainer = new MSPChainerClass(); saveChainer.setChain([ + mspHelper.saveBfConfig, mspHelper.saveMisc, mspHelper.save3dConfig, mspHelper.saveSensorAlignment, From bbd5b579f1bf8c484e11bc240001e2dc9182c6d7 Mon Sep 17 00:00:00 2001 From: "U-PAWEL-X220\\pawel" Date: Tue, 10 Jan 2017 22:10:05 +0100 Subject: [PATCH 16/17] 10 inch UAV preset --- tabs/profiles.js | 57 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/tabs/profiles.js b/tabs/profiles.js index b456de71..1bc1e083 100644 --- a/tabs/profiles.js +++ b/tabs/profiles.js @@ -38,6 +38,15 @@ presets.defaultValues = { * */ presets.presets = [ + { + name: 'Default Preset', + description: "INAV default Quad X configuration", + features: [], + applyDefaults: ["PIDs", "INAV_PID_CONFIG", "ADVANCED_CONFIG", "RC_tuning", "PID_ADVANCED", "FILTER_CONFIG", "FC_CONFIG"], + settings: [ + presets.elementHelper("BF_CONFIG", "mixerConfiguration", 3) + ] + }, { name: '5" Racer', description: "210-250 class racer with F3/F4 CPU on 4S battery", @@ -63,7 +72,53 @@ presets.presets = [ presets.elementHelper("FILTER_CONFIG", "dtermLpfHz", 80), presets.elementHelper("RC_tuning", "roll_rate", 800), presets.elementHelper("RC_tuning", "pitch_rate", 800), - presets.elementHelper("RC_tuning", "yaw_rate", 650) + presets.elementHelper("RC_tuning", "yaw_rate", 650), + presets.elementHelper("FILTER_CONFIG", "dtermNotchHz", 260), + presets.elementHelper("FILTER_CONFIG", "dtermNotchCutoff", 160), + presets.elementHelper("FILTER_CONFIG", "gyroNotchHz1", 400), + presets.elementHelper("FILTER_CONFIG", "gyroNotchCutoff1", 300), + presets.elementHelper("FILTER_CONFIG", "gyroNotchHz2", 200), + presets.elementHelper("FILTER_CONFIG", "gyroNotchCutoff2", 100), + presets.elementHelper("PIDs", 0, [43, 40, 20]), //ROLL PIDs + presets.elementHelper("PIDs", 1, [58, 50, 22]), //PITCH PIDs + presets.elementHelper("PIDs", 2, [70, 45, 0]) //YAW PIDs + ] + }, + { + name: '10" General Purpose', + description: "450-600 class general purpose multirotor", + features: [ + "10 inch propellers", + "0.kg - 1.4kg weight", + "F1, F3 or F4 CPU", + "MPU6000 or MPU6050 gyro", + "GPS optional" + ], + applyDefaults: ["PIDs", "INAV_PID_CONFIG", "ADVANCED_CONFIG", "RC_tuning", "PID_ADVANCED", "FILTER_CONFIG", "FC_CONFIG"], + settings: [ + presets.elementHelper("BF_CONFIG", "mixerConfiguration", 3), + presets.elementHelper("INAV_PID_CONFIG", "asynchronousMode", 1), + presets.elementHelper("FC_CONFIG", "loopTime", 2000), + presets.elementHelper("INAV_PID_CONFIG", "gyroscopeLpf", 1), + presets.elementHelper("ADVANCED_CONFIG", "gyroSync", 1), + presets.elementHelper("ADVANCED_CONFIG", "gyroSyncDenominator", 1), + presets.elementHelper("FILTER_CONFIG", "gyroSoftLpfHz", 70), + presets.elementHelper("FILTER_CONFIG", "dtermLpfHz", 40), + presets.elementHelper("RC_tuning", "roll_rate", 400), + presets.elementHelper("RC_tuning", "pitch_rate", 400), + presets.elementHelper("RC_tuning", "yaw_rate", 200), + presets.elementHelper("FILTER_CONFIG", "dtermNotchHz", 125), + presets.elementHelper("FILTER_CONFIG", "dtermNotchCutoff", 90), + presets.elementHelper("FILTER_CONFIG", "gyroNotchHz1", 170), + presets.elementHelper("FILTER_CONFIG", "gyroNotchCutoff1", 125), + presets.elementHelper("FILTER_CONFIG", "gyroNotchHz2", 85), + presets.elementHelper("FILTER_CONFIG", "gyroNotchCutoff2", 43), + presets.elementHelper("INAV_PID_CONFIG", "magHoldRateLimit", 30), + presets.elementHelper("PID_ADVANCED", "axisAccelerationLimitRollPitch", 40), + presets.elementHelper("PID_ADVANCED", "axisAccelerationLimitYaw", 18), + presets.elementHelper("PIDs", 0, [75, 30, 18]), //ROLL PIDs + presets.elementHelper("PIDs", 1, [75, 30, 18]), //PITCH PIDs + presets.elementHelper("PIDs", 2, [85, 45, 0]) //YAW PIDs ] }, { From 35bb15b81274d0e99aa0c61f4b54fe5dc1190b69 Mon Sep 17 00:00:00 2001 From: "U-PAWEL-X220\\pawel" Date: Wed, 11 Jan 2017 19:17:52 +0100 Subject: [PATCH 17/17] Additional presets --- tabs/profiles.js | 58 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/tabs/profiles.js b/tabs/profiles.js index 1bc1e083..e9cba633 100644 --- a/tabs/profiles.js +++ b/tabs/profiles.js @@ -68,6 +68,8 @@ presets.presets = [ presets.elementHelper("INAV_PID_CONFIG", "attitudeTaskFrequency", 100), presets.elementHelper("ADVANCED_CONFIG", "gyroSync", 1), presets.elementHelper("ADVANCED_CONFIG", "gyroSyncDenominator", 4), + presets.elementHelper("ADVANCED_CONFIG", "motorPwmProtocol", 1), + presets.elementHelper("ADVANCED_CONFIG", "motorPwmRate", 2000), presets.elementHelper("FILTER_CONFIG", "gyroSoftLpfHz", 90), presets.elementHelper("FILTER_CONFIG", "dtermLpfHz", 80), presets.elementHelper("RC_tuning", "roll_rate", 800), @@ -121,6 +123,62 @@ presets.presets = [ presets.elementHelper("PIDs", 2, [85, 45, 0]) //YAW PIDs ] }, + { + name: '12" General Purpose', + description: "550 and above general purpose multirotor", + features: [ + "12 inch propellers", + "1.4kg-2kg weight", + "F3 or F4 CPU", + "MPU6000 or MPU6050 gyro", + "GPS optional" + ], + applyDefaults: ["PIDs", "INAV_PID_CONFIG", "ADVANCED_CONFIG", "RC_tuning", "PID_ADVANCED", "FILTER_CONFIG", "FC_CONFIG"], + settings: [ + presets.elementHelper("BF_CONFIG", "mixerConfiguration", 3), + presets.elementHelper("INAV_PID_CONFIG", "asynchronousMode", 1), + presets.elementHelper("FC_CONFIG", "loopTime", 2000), + presets.elementHelper("INAV_PID_CONFIG", "gyroscopeLpf", 1), + presets.elementHelper("ADVANCED_CONFIG", "gyroSync", 1), + presets.elementHelper("ADVANCED_CONFIG", "gyroSyncDenominator", 1), + presets.elementHelper("FILTER_CONFIG", "gyroSoftLpfHz", 55), + presets.elementHelper("FILTER_CONFIG", "dtermLpfHz", 30), + presets.elementHelper("RC_tuning", "roll_rate", 180), + presets.elementHelper("RC_tuning", "pitch_rate", 180), + presets.elementHelper("RC_tuning", "yaw_rate", 90), + presets.elementHelper("FILTER_CONFIG", "dtermNotchHz", 108), + presets.elementHelper("FILTER_CONFIG", "dtermNotchCutoff", 72), + presets.elementHelper("FILTER_CONFIG", "gyroNotchHz1", 144), + presets.elementHelper("FILTER_CONFIG", "gyroNotchCutoff1", 90), + presets.elementHelper("FILTER_CONFIG", "gyroNotchHz2", 72), + presets.elementHelper("FILTER_CONFIG", "gyroNotchCutoff2", 43), + presets.elementHelper("INAV_PID_CONFIG", "magHoldRateLimit", 30), + presets.elementHelper("PID_ADVANCED", "axisAccelerationLimitRollPitch", 18), + presets.elementHelper("PID_ADVANCED", "axisAccelerationLimitYaw", 9), + presets.elementHelper("PIDs", 0, [80, 30, 18]), //ROLL PIDs + presets.elementHelper("PIDs", 1, [80, 30, 18]), //PITCH PIDs + presets.elementHelper("PIDs", 2, [85, 45, 0]), //YAW PIDs + presets.elementHelper("PIDs", 7, [10, 7, 75]) //Level PIDs + ] + }, + { + name: "Airplane General", + description: "General setup for airplanes", + features: [ + ], + applyDefaults: ["PIDs", "INAV_PID_CONFIG", "ADVANCED_CONFIG", "RC_tuning", "PID_ADVANCED", "FILTER_CONFIG", "FC_CONFIG"], + settings: [ + presets.elementHelper("BF_CONFIG", "mixerConfiguration", 14), + presets.elementHelper("PIDs", 0, [20, 30, 15]), //ROLL PIDs + presets.elementHelper("PIDs", 1, [20, 30, 15]), //PITCH PIDs + presets.elementHelper("PIDs", 2, [45, 5, 15]), //YAW PIDs + presets.elementHelper("RC_tuning", "roll_rate", 200), + presets.elementHelper("RC_tuning", "pitch_rate", 150), + presets.elementHelper("RC_tuning", "yaw_rate", 90), + presets.elementHelper("ADVANCED_CONFIG", "gyroSync", 1), + presets.elementHelper("INAV_PID_CONFIG", "gyroscopeLpf", 1) + ] + }, { name: "600mm Flying Wing", description: "Small flying wing on multirotor racer parts",