diff --git a/gulpfile.js b/gulpfile.js index 4f5391df..6de03ca7 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -107,6 +107,7 @@ sources.js = [ './js/logicConditionsCollection.js', './js/globalFunctionsCollection.js', './js/logicConditionsStatus.js', + './js/globalVariablesStatus.js', './js/vtx.js', './main.js', './js/tabs.js', diff --git a/js/fc.js b/js/fc.js index 9592d03b..c1a1e41a 100644 --- a/js/fc.js +++ b/js/fc.js @@ -20,7 +20,9 @@ var CONFIG, SERVO_RULES, MOTOR_RULES, LOGIC_CONDITIONS, + LOGIC_CONDITIONS_STATUS, GLOBAL_FUNCTIONS, + GLOBAL_VARIABLES_STATUS, SERIAL_CONFIG, SENSOR_DATA, MOTOR_DATA, @@ -172,6 +174,7 @@ var FC = { LOGIC_CONDITIONS = new LogicConditionsCollection(); GLOBAL_FUNCTIONS = new GlobalFunctionsCollection(); LOGIC_CONDITIONS_STATUS = new LogicConditionsStatus(); + GLOBAL_VARIABLES_STATUS = new GlobalVariablesStatus(); MIXER_CONFIG = { yawMotorDirection: 0, diff --git a/js/globalVariablesStatus.js b/js/globalVariablesStatus.js new file mode 100644 index 00000000..9fa33e30 --- /dev/null +++ b/js/globalVariablesStatus.js @@ -0,0 +1,25 @@ +'use strict'; + +let GlobalVariablesStatus = function () { + + let self = {}, + data = []; + + self.set = function (condition, value) { + data[condition] = value; + } + + self.get = function (condition) { + if (typeof data[condition] !== 'undefined') { + return data[condition]; + } else { + return null; + } + } + + self.getAll = function() { + return data; + } + + return self; +}; \ No newline at end of file diff --git a/js/msp/MSPCodes.js b/js/msp/MSPCodes.js index 285cb317..028386f6 100644 --- a/js/msp/MSPCodes.js +++ b/js/msp/MSPCodes.js @@ -210,6 +210,7 @@ var MSPCodes = { MSP2_INAV_GLOBAL_FUNCTIONS: 0x2024, MSP2_INAV_SET_GLOBAL_FUNCTIONS: 0x2025, MSP2_INAV_LOGIC_CONDITIONS_STATUS: 0x2026, + MSP2_INAV_GVAR_STATUS: 0x2027, MSP2_PID: 0x2030, MSP2_SET_PID: 0x2031, diff --git a/js/msp/MSPHelper.js b/js/msp/MSPHelper.js index 305b6519..d19d9bc7 100644 --- a/js/msp/MSPHelper.js +++ b/js/msp/MSPHelper.js @@ -535,6 +535,16 @@ var mspHelper = (function (gui) { } break; + case MSPCodes.MSP2_INAV_GVAR_STATUS: + if (data.byteLength % 4 === 0) { + let index = 0; + for (i = 0; i < data.byteLength; i += 4) { + GLOBAL_VARIABLES_STATUS.set(index, data.getInt32(i, true)); + index++; + } + } + break; + case MSPCodes.MSP2_INAV_SET_LOGIC_CONDITIONS: console.log("Logic conditions saved"); break; @@ -3305,7 +3315,7 @@ var mspHelper = (function (gui) { MSP.send_message(MSPCodes.MSP2_INAV_MC_BRAKING, false, false, callback); } - self.loadSensorStatus = function (callback) { + self.loadLogicConditionsStatus = function (callback) { if (semver.gte(CONFIG.flightControllerVersion, "2.3.0")) { MSP.send_message(MSPCodes.MSP2_INAV_LOGIC_CONDITIONS_STATUS, false, false, callback); } else { @@ -3313,5 +3323,13 @@ var mspHelper = (function (gui) { } }; + self.loadGlobalVariablesStatus = function (callback) { + if (semver.gte(CONFIG.flightControllerVersion, "2.5.0")) { + MSP.send_message(MSPCodes.MSP2_INAV_GVAR_STATUS, false, false, callback); + } else { + callback(); + } + }; + return self; })(GUI); diff --git a/tabs/mixer.js b/tabs/mixer.js index 7de60556..39cdbc48 100644 --- a/tabs/mixer.js +++ b/tabs/mixer.js @@ -414,7 +414,7 @@ TABS.mixer.initialize = function (callback, scrollPosition) { } function getLogicConditionsStatus() { - mspHelper.loadSensorStatus(onStatusPullDone); + mspHelper.loadLogicConditionsStatus(onStatusPullDone); } function onStatusPullDone() { diff --git a/tabs/programming.js b/tabs/programming.js index 24556bd0..7db026e9 100644 --- a/tabs/programming.js +++ b/tabs/programming.js @@ -4,7 +4,8 @@ TABS.programming = {}; TABS.programming.initialize = function (callback, scrollPosition) { let loadChainer = new MSPChainerClass(), - saveChainer = new MSPChainerClass(); + saveChainer = new MSPChainerClass(), + statusChainer = new MSPChainerClass(); if (GUI.active_tab != 'programming') { GUI.active_tab = 'programming'; @@ -24,6 +25,12 @@ TABS.programming.initialize = function (callback, scrollPosition) { mspHelper.saveToEeprom ]); + statusChainer.setChain([ + mspHelper.loadLogicConditionsStatus, + mspHelper.loadGlobalVariablesStatus + ]); + statusChainer.setExitPoint(onStatusPullDone); + function loadHtml() { GUI.load("./tabs/programming.html", processHtml); } @@ -45,16 +52,14 @@ TABS.programming.initialize = function (callback, scrollPosition) { }); if (semver.gte(CONFIG.flightControllerVersion, "2.3.0")) { - helper.mspBalancedInterval.add('logic_conditions_pull', 350, 1, getLogicConditionsStatus); + helper.mspBalancedInterval.add('logic_conditions_pull', 350, 1, function () { + statusChainer.execute(); + }); } GUI.content_ready(callback); } - function getLogicConditionsStatus() { - mspHelper.loadSensorStatus(onStatusPullDone); - } - function onStatusPullDone() { LOGIC_CONDITIONS.update(LOGIC_CONDITIONS_STATUS); }