diff --git a/_locales/en/messages.json b/_locales/en/messages.json index d0014f77..8c294646 100755 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -3124,6 +3124,9 @@ "missionDefaultSettingsHead": { "message": "Default settings" }, + "missionSafehomeHead": { + "message": "Safe Home manager" + }, "missionTemplateHead": { "message": "Mission template" }, @@ -3594,5 +3597,20 @@ }, "MissionPlannerHeadSettingsCheck": { "message": "Heading value is incorrect : Check it again !" + }, + "SafehomeSelected": { + "message": "" + }, + "SafehomeId": { + "message": "#" + }, + "SafehomeEnabled": { + "message": "Enabled" + }, + "SafehomeLon": { + "message": "Lon" + }, + "SafehomeLat": { + "message": "Lat" } } diff --git a/images/icons/cf_icon_MP_safehome_green.svg b/images/icons/cf_icon_MP_safehome_green.svg new file mode 100644 index 00000000..327dc99d --- /dev/null +++ b/images/icons/cf_icon_MP_safehome_green.svg @@ -0,0 +1,159 @@ + +image/svg+xml + + diff --git a/images/icons/cf_icon_MP_safehome_grey.svg b/images/icons/cf_icon_MP_safehome_grey.svg new file mode 100644 index 00000000..8bb9a326 --- /dev/null +++ b/images/icons/cf_icon_MP_safehome_grey.svg @@ -0,0 +1,152 @@ + +image/svg+xml + + diff --git a/images/icons/cf_icon_MP_safehome_red.svg b/images/icons/cf_icon_MP_safehome_red.svg new file mode 100644 index 00000000..f4df0751 --- /dev/null +++ b/images/icons/cf_icon_MP_safehome_red.svg @@ -0,0 +1,159 @@ + +image/svg+xml + + diff --git a/images/icons/cf_icon_MP_safehome_white.svg b/images/icons/cf_icon_MP_safehome_white.svg new file mode 100644 index 00000000..9ed25ce9 --- /dev/null +++ b/images/icons/cf_icon_MP_safehome_white.svg @@ -0,0 +1,159 @@ + +image/svg+xml + + diff --git a/images/icons/cf_icon_safehome_white.svg b/images/icons/cf_icon_safehome_white.svg new file mode 100644 index 00000000..1f92d3bc --- /dev/null +++ b/images/icons/cf_icon_safehome_white.svg @@ -0,0 +1,60 @@ + +image/svg+xml + + diff --git a/js/fc.js b/js/fc.js index ce650393..4b3a744a 100644 --- a/js/fc.js +++ b/js/fc.js @@ -60,7 +60,8 @@ var CONFIG, BATTERY_CONFIG, OUTPUT_MAPPING, SETTINGS, - BRAKING_CONFIG; + BRAKING_CONFIG, + SAFEHOME; var FC = { MAX_SERVO_RATE: 125, @@ -544,6 +545,13 @@ var FC = { OUTPUT_MAPPING = new OutputMappingCollection(); SETTINGS = {}; + + SAFEHOME = { + number: 0, + enabled: 0, + lon: 0, + lat: 0 + }; }, getOutputUsages: function() { return { diff --git a/js/msp/MSPCodes.js b/js/msp/MSPCodes.js index 028386f6..5e3f2732 100644 --- a/js/msp/MSPCodes.js +++ b/js/msp/MSPCodes.js @@ -215,5 +215,8 @@ var MSPCodes = { MSP2_PID: 0x2030, MSP2_SET_PID: 0x2031, - MSP2_INAV_OPFLOW_CALIBRATION: 0x2032 + MSP2_INAV_OPFLOW_CALIBRATION: 0x2032, + + MSP2_INAV_SAFEHOME: 0x2038, + MSP2_INAV_SET_SAFEHOME: 0x2039 }; diff --git a/js/msp/MSPHelper.js b/js/msp/MSPHelper.js index 9107e1f5..cc183618 100644 --- a/js/msp/MSPHelper.js +++ b/js/msp/MSPHelper.js @@ -65,8 +65,7 @@ var mspHelper = (function (gui) { flags, colorCount, color; - - if (!dataHandler.unsupported) switch (dataHandler.code) { + if (!dataHandler.unsupported || dataHandler.unsupported) switch (dataHandler.code) { case MSPCodes.MSP_IDENT: //FIXME remove this frame when proven not needed console.log('Using deprecated msp command: MSP_IDENT'); @@ -1462,7 +1461,13 @@ var mspHelper = (function (gui) { SENSOR_DATA.temperature[i] = temp_decidegrees / 10; // °C } break; - + case MSPCodes.MSP2_INAV_SAFEHOME: + console.log(MSPCodes.MSP2_INAV_SAFEHOME); + SAFEHOME.number = data.getUint8(0); + SAFEHOME.enable = data.getUint8(1); + SAFEHOME.lon = data.getInt32(2); + SAFEHOME.lat = data.getInt32(3); + break; default: console.log('Unknown code detected: ' + dataHandler.code); } else { @@ -2138,6 +2143,9 @@ var mspHelper = (function (gui) { buffer.push(BRAKING_CONFIG.bankAngle); break; + + case MSPCodes.MSP2_INAV_SET_SAFEHOME: + break; default: return false; diff --git a/src/css/tabs/mission_planer.css b/src/css/tabs/mission_planer.css index 1c147c71..a8fe1f35 100644 --- a/src/css/tabs/mission_planer.css +++ b/src/css/tabs/mission_planer.css @@ -221,7 +221,13 @@ .ol-touch .mission-control-settings { top: 80px; } - +.mission-control-safehome { + top: 85px; + left: .5em; +} +.ol-touch .mission-control-safehome { + top: 100px; +} .mission-control-template { top: 85px; left: .5em; diff --git a/tabs/mission_control.html b/tabs/mission_control.html index a767d9a6..29786174 100644 --- a/tabs/mission_control.html +++ b/tabs/mission_control.html @@ -26,6 +26,34 @@ +
Total information
diff --git a/tabs/mission_control.js b/tabs/mission_control.js index 92cb25ba..ef8d9b67 100644 --- a/tabs/mission_control.js +++ b/tabs/mission_control.js @@ -377,6 +377,17 @@ TABS.mission_control.initialize = function (callback) { } } + ///////////////////////////////////////////// + // Manage Safehome + ///////////////////////////////////////////// + function getSafeHomePointFromFC() { + console.log("Test"); + } + + function loadSafehome() { + MSP.send_message(MSPCodes.MSP2_INAV_SAFEHOME, false, false, getSafeHomePointFromFC); + } + ///////////////////////////////////////////// // Manage Plotting functions ///////////////////////////////////////////// @@ -624,7 +635,7 @@ TABS.mission_control.initialize = function (callback) { button.style = 'background: url(\'../images/CF_settings_white.svg\') no-repeat 1px -1px;background-color: rgba(0,60,136,.5);'; var handleShowSettings = function () { - $('#MPeditPoint, #missionPlanerTotalInfo','#missionPlanerTemplate').hide(); + $('#MPeditPoint, #missionPlanerTotalInfo','#missionPlanerTemplate', '#missionPlanerSafeHome').hide(); $('#missionPlanerSettings').fadeIn(300); }; @@ -644,6 +655,41 @@ TABS.mission_control.initialize = function (callback) { }; ol.inherits(app.PlannerSettingsControl, ol.control.Control); + + /** + * @constructor + * @extends {ol.control.Control} + * @param {Object=} opt_options Control options. + */ + app.PlannerSafehomeControl = function (opt_options) { + var options = opt_options || {}; + var button = document.createElement('button'); + + button.innerHTML = ' '; + button.style = 'background: url(\'../images/icons/cf_icon_safehome_white.svg\') no-repeat 1px -1px;background-color: rgba(0,60,136,.5);'; + + var handleShowSafehome = function () { + $('#MPeditPoint, #missionPlanerTotalInfo','#missionPlanerTemplate', '#missionPlanerSettings').hide(); + $('#missionPlanerSafeHome').fadeIn(300); + loadSafehome(); + }; + + button.addEventListener('click', handleShowSafehome, false); + button.addEventListener('touchstart', handleShowSafehome, false); + + var element = document.createElement('div'); + element.className = 'mission-control-safehome ol-unselectable ol-control'; + element.appendChild(button); + element.title = 'MP Safehome'; + + ol.control.Control.call(this, { + element: element, + target: options.target + }); + + }; + ol.inherits(app.PlannerSafehomeControl, ol.control.Control); + /** * @param {ol.MapBrowserEvent} evt Map browser event. * @return {boolean} `true` to start the drag sequence. @@ -739,16 +785,24 @@ TABS.mission_control.initialize = function (callback) { } else { mapLayer = new ol.source.OSM(); } - + + if (CONFIGURATOR.connectionValid) { + control_list = [ + new app.PlannerSettingsControl(), + new app.PlannerSafehomeControl() + ] + } + else { + control_list = [ + new app.PlannerSettingsControl() + ] + } map = new ol.Map({ controls: ol.control.defaults({ attributionOptions: { collapsible: false } - }).extend([ - new app.PlannerSettingsControl(), - //new app.PlannerTemplateControl() - ]), + }).extend(control_list), interactions: ol.interaction.defaults().extend([new app.Drag()]), layers: [ new ol.layer.Tile({