mirror of
https://github.com/iNavFlight/inav-configurator.git
synced 2025-07-20 14:55:14 +03:00
Save and load mission from EEPROM, fix bugs
This commit is contained in:
parent
efda795698
commit
536c5488e4
5 changed files with 72 additions and 31 deletions
|
@ -2324,10 +2324,10 @@
|
||||||
"message": "Mission Control"
|
"message": "Mission Control"
|
||||||
},
|
},
|
||||||
"loadMissionButton": {
|
"loadMissionButton": {
|
||||||
"message": "Load mission"
|
"message": "Load mission from FC"
|
||||||
},
|
},
|
||||||
"saveMissionButton": {
|
"saveMissionButton": {
|
||||||
"message": "Save mission"
|
"message": "Save mission to FC"
|
||||||
},
|
},
|
||||||
"loadEepromMissionButton": {
|
"loadEepromMissionButton": {
|
||||||
"message": "Load Eeprom mission"
|
"message": "Load Eeprom mission"
|
||||||
|
@ -2352,5 +2352,11 @@
|
||||||
},
|
},
|
||||||
"useOnlyStandalone": {
|
"useOnlyStandalone": {
|
||||||
"message": "Use stand-alone application.<br> Please visit the <a href=\"https://github.com/iNavFlight/inav-configurator/releases\" target=\"_blank\">website</a> to read the release notes and download."
|
"message": "Use stand-alone application.<br> Please visit the <a href=\"https://github.com/iNavFlight/inav-configurator/releases\" target=\"_blank\">website</a> to read the release notes and download."
|
||||||
|
},
|
||||||
|
"eeprom_load_ok": {
|
||||||
|
"message": "EEPROM <span style=\"color: #37a8db\">loaded</span>"
|
||||||
|
},
|
||||||
|
"confirm_delete_all_points": {
|
||||||
|
"message": "Do you really want to delete all points?"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,7 @@ var MSPCodes = {
|
||||||
|
|
||||||
MSP_POSITION_ESTIMATION_CONFIG: 16,
|
MSP_POSITION_ESTIMATION_CONFIG: 16,
|
||||||
MSP_SET_POSITION_ESTIMATION_CONFIG: 17,
|
MSP_SET_POSITION_ESTIMATION_CONFIG: 17,
|
||||||
|
MSP_WP_MISSION_LOAD: 18,
|
||||||
MSP_WP_MISSION_SAVE: 19,
|
MSP_WP_MISSION_SAVE: 19,
|
||||||
MSP_WP_GETINFO: 20,
|
MSP_WP_GETINFO: 20,
|
||||||
MSP_RTH_AND_LAND_CONFIG: 21,
|
MSP_RTH_AND_LAND_CONFIG: 21,
|
||||||
|
|
|
@ -341,8 +341,8 @@ var mspHelper = (function (gui) {
|
||||||
case MSPCodes.MSP_WP:
|
case MSPCodes.MSP_WP:
|
||||||
MISSION_PLANER.bufferPoint.number = data.getUint8(0);
|
MISSION_PLANER.bufferPoint.number = data.getUint8(0);
|
||||||
MISSION_PLANER.bufferPoint.action = data.getUint8(1);
|
MISSION_PLANER.bufferPoint.action = data.getUint8(1);
|
||||||
MISSION_PLANER.bufferPoint.lon = data.getInt32(2, true) / 10000000;
|
MISSION_PLANER.bufferPoint.lat = data.getInt32(2, true) / 10000000;
|
||||||
MISSION_PLANER.bufferPoint.lat = data.getInt32(6, true) / 10000000;
|
MISSION_PLANER.bufferPoint.lon = data.getInt32(6, true) / 10000000;
|
||||||
MISSION_PLANER.bufferPoint.alt = data.getInt32(10, true);
|
MISSION_PLANER.bufferPoint.alt = data.getInt32(10, true);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -1120,6 +1120,14 @@ var mspHelper = (function (gui) {
|
||||||
case MSPCodes.MSP_SET_WP:
|
case MSPCodes.MSP_SET_WP:
|
||||||
console.log('Point saved');
|
console.log('Point saved');
|
||||||
break;
|
break;
|
||||||
|
case MSPCodes.MSP_WP_MISSION_SAVE:
|
||||||
|
// buffer.push(0);
|
||||||
|
console.log(data);
|
||||||
|
|
||||||
|
break;
|
||||||
|
case MSPCodes.MSP_WP_MISSION_LOAD:
|
||||||
|
console.log('Mission load');
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
console.log('Unknown code detected: ' + dataHandler.code);
|
console.log('Unknown code detected: ' + dataHandler.code);
|
||||||
} else {
|
} else {
|
||||||
|
@ -1601,8 +1609,6 @@ var mspHelper = (function (gui) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MSPCodes.MSP_SET_WP:
|
case MSPCodes.MSP_SET_WP:
|
||||||
console.log(MISSION_PLANER.bufferPoint.lat);
|
|
||||||
console.log(MISSION_PLANER.bufferPoint.lon);
|
|
||||||
buffer.push(MISSION_PLANER.bufferPoint.number); // sbufReadU8(src); // number
|
buffer.push(MISSION_PLANER.bufferPoint.number); // sbufReadU8(src); // number
|
||||||
buffer.push(MISSION_PLANER.bufferPoint.action); // sbufReadU8(src); // action
|
buffer.push(MISSION_PLANER.bufferPoint.action); // sbufReadU8(src); // action
|
||||||
buffer.push(specificByte(MISSION_PLANER.bufferPoint.lat, 0)); // sbufReadU32(src); // lat
|
buffer.push(specificByte(MISSION_PLANER.bufferPoint.lat, 0)); // sbufReadU32(src); // lat
|
||||||
|
@ -1627,11 +1633,17 @@ var mspHelper = (function (gui) {
|
||||||
break;
|
break;
|
||||||
case MSPCodes.MSP_WP:
|
case MSPCodes.MSP_WP:
|
||||||
console.log(MISSION_PLANER.bufferPoint.number);
|
console.log(MISSION_PLANER.bufferPoint.number);
|
||||||
buffer.push(MISSION_PLANER.bufferPoint.number);
|
buffer.push(MISSION_PLANER.bufferPoint.number+1);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case MSPCodes.MSP_WP_MISSION_SAVE:
|
case MSPCodes.MSP_WP_MISSION_SAVE:
|
||||||
// buffer.push(0);
|
// buffer.push(0);
|
||||||
|
console.log(buffer);
|
||||||
|
|
||||||
|
break;
|
||||||
|
case MSPCodes.MSP_WP_MISSION_LOAD:
|
||||||
|
// buffer.push(0);
|
||||||
|
console.log(buffer);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<div id="missionMap"></div>
|
<div id="missionMap"></div>
|
||||||
<div id="notLoadMap" data-i18n="useOnlyStandalone" style="display: none;"></div>
|
<div id="notLoadMap" data-i18n="useOnlyStandalone" style="display: none;"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="content_toolbar">
|
<div class="content_toolbar" id="missionControls">
|
||||||
<div class="waypoint waypoint-left">
|
<div class="waypoint waypoint-left">
|
||||||
<div class="gui_box" style="padding-bottom: 10px">
|
<div class="gui_box" style="padding-bottom: 10px">
|
||||||
<div class="gui_box_titlebar">
|
<div class="gui_box_titlebar">
|
||||||
|
@ -12,8 +12,8 @@
|
||||||
<div class="spacer">
|
<div class="spacer">
|
||||||
<input type="hidden" name="pointNumber" value="">
|
<input type="hidden" name="pointNumber" value="">
|
||||||
<div class="point">
|
<div class="point">
|
||||||
<select name="type" id="pointType" disabled>
|
<select name="type" id="pointType">
|
||||||
<option value="1">Home</option>
|
<!--<option value="1">Home</option>-->
|
||||||
<option value="1">Waypoint</option>
|
<option value="1">Waypoint</option>
|
||||||
<option value="4">RTH</option>
|
<option value="4">RTH</option>
|
||||||
</select>
|
</select>
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
<input id="pointLon" type="text" value="0.0" required>
|
<input id="pointLon" type="text" value="0.0" required>
|
||||||
</div>
|
</div>
|
||||||
<div class="point">
|
<div class="point">
|
||||||
<label class="point-label" for="pointAlt">Alt: </label>
|
<label class="point-label" for="pointAlt">Alt (cm): </label>
|
||||||
<input id="pointAlt" type="text" value="0" required>
|
<input id="pointAlt" type="text" value="0" required>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
|
|
|
@ -29,7 +29,7 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
if (typeof require !== "undefined") {
|
if (typeof require !== "undefined") {
|
||||||
initMap();
|
initMap();
|
||||||
} else {
|
} else {
|
||||||
$('#missionMap').hide();
|
$('#missionMap, #missionControls').hide();
|
||||||
$('#notLoadMap').show();
|
$('#notLoadMap').show();
|
||||||
}
|
}
|
||||||
localize();
|
localize();
|
||||||
|
@ -100,7 +100,7 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
map.addLayer(vectorLayer);
|
map.addLayer(vectorLayer);
|
||||||
}
|
}
|
||||||
|
|
||||||
function addMarker(_pos, _alt) {
|
function addMarker(_pos, _alt, _action) {
|
||||||
var iconFeature = new ol.Feature({
|
var iconFeature = new ol.Feature({
|
||||||
geometry: new ol.geom.Point(_pos),
|
geometry: new ol.geom.Point(_pos),
|
||||||
name: 'Null Island',
|
name: 'Null Island',
|
||||||
|
@ -139,6 +139,7 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
|
|
||||||
vectorLayer.alt = _alt;
|
vectorLayer.alt = _alt;
|
||||||
vectorLayer.number = markers.length;
|
vectorLayer.number = markers.length;
|
||||||
|
vectorLayer.action = _action;
|
||||||
|
|
||||||
markers.push(vectorLayer);
|
markers.push(vectorLayer);
|
||||||
|
|
||||||
|
@ -285,7 +286,7 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
target: document.getElementById('missionMap'),
|
target: document.getElementById('missionMap'),
|
||||||
view: new ol.View({
|
view: new ol.View({
|
||||||
center: ol.proj.fromLonLat([lon, lat]),
|
center: ol.proj.fromLonLat([lon, lat]),
|
||||||
zoom: 10
|
zoom: 14
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -305,8 +306,9 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
$('#pointLat').val(coord[0]);
|
$('#pointLat').val(coord[0]);
|
||||||
$('#pointLon').val(coord[1]);
|
$('#pointLon').val(coord[1]);
|
||||||
$('#pointAlt').val(selectedMarker.alt);
|
$('#pointAlt').val(selectedMarker.alt);
|
||||||
|
$('#pointType').val(selectedMarker.action);
|
||||||
} else {
|
} else {
|
||||||
map.addLayer(addMarker(evt.coordinate, 0));
|
map.addLayer(addMarker(evt.coordinate, 1500, 1));
|
||||||
repaint();
|
repaint();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -325,25 +327,24 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#removeAllPoints').on('click', function () {
|
$('#removeAllPoints').on('click', function () {
|
||||||
for (var i in markers) {
|
if (confirm(chrome.i18n.getMessage('confirm_delete_all_points'))) {
|
||||||
map.removeLayer(markers[i]);
|
removeAllPoints();
|
||||||
}
|
}
|
||||||
markers = [];
|
|
||||||
clearEditForm();
|
|
||||||
repaint();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#removePoint').on('click', function () {
|
$('#removePoint').on('click', function () {
|
||||||
if (selectedMarker) {
|
if (selectedMarker) {
|
||||||
map.removeLayer(selectedMarker);
|
|
||||||
var tmp = [];
|
var tmp = [];
|
||||||
for (var i in markers) {
|
for (var i in markers) {
|
||||||
if (markers[i] !== selectedMarker) {
|
if (markers[i] !== selectedMarker && typeof markers[i].action !== "undefined") {
|
||||||
tmp.push(markers[i]);
|
tmp.push(markers[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
map.removeLayer(selectedMarker);
|
||||||
markers = tmp;
|
markers = tmp;
|
||||||
selectedMarker = null;
|
selectedMarker = null;
|
||||||
|
|
||||||
clearEditForm();
|
clearEditForm();
|
||||||
repaint();
|
repaint();
|
||||||
}
|
}
|
||||||
|
@ -356,6 +357,7 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
var geometry = t.getSource().getFeatures()[0].getGeometry();
|
var geometry = t.getSource().getFeatures()[0].getGeometry();
|
||||||
geometry.setCoordinates(ol.proj.fromLonLat([parseFloat($('#pointLat').val()), parseFloat($('#pointLon').val())]));
|
geometry.setCoordinates(ol.proj.fromLonLat([parseFloat($('#pointLat').val()), parseFloat($('#pointLon').val())]));
|
||||||
t.alt = $('#pointAlt').val();
|
t.alt = $('#pointAlt').val();
|
||||||
|
t.action = $('#pointType').val();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -366,8 +368,8 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#loadMissionButton').on('click', function () {
|
$('#loadMissionButton').on('click', function () {
|
||||||
|
removeAllPoints();
|
||||||
$(this).addClass('disabled');
|
$(this).addClass('disabled');
|
||||||
console.log('Start get point');
|
|
||||||
GUI.log('Start get point');
|
GUI.log('Start get point');
|
||||||
|
|
||||||
pointForSend = 0;
|
pointForSend = 0;
|
||||||
|
@ -383,7 +385,9 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#loadEepromMissionButton').on('click', function () {
|
$('#loadEepromMissionButton').on('click', function () {
|
||||||
|
GUI.log(chrome.i18n.getMessage('eeprom_load_ok'));
|
||||||
|
|
||||||
|
MSP.send_message(MSPCodes.MSP_WP_MISSION_LOAD, false, getPointsFromEprom);
|
||||||
});
|
});
|
||||||
$('#saveEepromMissionButton').on('click', function () {
|
$('#saveEepromMissionButton').on('click', function () {
|
||||||
GUI.log(chrome.i18n.getMessage('eeprom_saved_ok'));
|
GUI.log(chrome.i18n.getMessage('eeprom_saved_ok'));
|
||||||
|
@ -393,20 +397,39 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
updateTotalInfo();
|
updateTotalInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function removeAllPoints() {
|
||||||
|
for (var i in markers) {
|
||||||
|
map.removeLayer(markers[i]);
|
||||||
|
}
|
||||||
|
markers = [];
|
||||||
|
clearEditForm();
|
||||||
|
repaint();
|
||||||
|
}
|
||||||
|
|
||||||
|
function getPointsFromEprom() {
|
||||||
|
pointForSend = 0;
|
||||||
|
MSP.send_message(MSPCodes.MSP_WP_GETINFO, false, false, getNextPoint);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function getNextPoint() {
|
function getNextPoint() {
|
||||||
|
var coord;
|
||||||
if (pointForSend > 0) {
|
if (pointForSend > 0) {
|
||||||
// console.log(MISSION_PLANER.bufferPoint.lon);
|
// console.log(MISSION_PLANER.bufferPoint.lon);
|
||||||
// console.log(MISSION_PLANER.bufferPoint.lat);
|
// console.log(MISSION_PLANER.bufferPoint.lat);
|
||||||
// console.log(MISSION_PLANER.bufferPoint.alt);
|
// console.log(MISSION_PLANER.bufferPoint.alt);
|
||||||
// console.log(MISSION_PLANER.bufferPoint.action);
|
// console.log(MISSION_PLANER.bufferPoint.action);
|
||||||
map.addLayer(addMarker(ol.proj.fromLonLat([MISSION_PLANER.bufferPoint.lon, MISSION_PLANER.bufferPoint.lat]), MISSION_PLANER.bufferPoint.alt));
|
|
||||||
// repaint();
|
coord = ol.proj.fromLonLat([MISSION_PLANER.bufferPoint.lon, MISSION_PLANER.bufferPoint.lat]);
|
||||||
|
map.addLayer(addMarker(coord, MISSION_PLANER.bufferPoint.alt, MISSION_PLANER.bufferPoint.action));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pointForSend > MISSION_PLANER.countBusyPoints) {
|
if (pointForSend >= MISSION_PLANER.countBusyPoints) {
|
||||||
GUI.log('End get point');
|
GUI.log('End get point');
|
||||||
$('#loadMissionButton').removeClass('disabled');
|
$('#loadMissionButton').removeClass('disabled');
|
||||||
|
map.getView().setCenter(coord);
|
||||||
repaint();
|
repaint();
|
||||||
|
updateTotalInfo();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -430,12 +453,11 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
var geometry = markers[pointForSend].getSource().getFeatures()[0].getGeometry();
|
var geometry = markers[pointForSend].getSource().getFeatures()[0].getGeometry();
|
||||||
var coordinate = ol.proj.toLonLat(geometry.getCoordinates());
|
var coordinate = ol.proj.toLonLat(geometry.getCoordinates());
|
||||||
|
|
||||||
MISSION_PLANER.bufferPoint.number = pointForSend;
|
MISSION_PLANER.bufferPoint.number = pointForSend + 1;
|
||||||
MISSION_PLANER.bufferPoint.action = 1;
|
MISSION_PLANER.bufferPoint.action = markers[pointForSend].action;
|
||||||
MISSION_PLANER.bufferPoint.lat = parseInt(coordinate[0] * 10000000);
|
MISSION_PLANER.bufferPoint.lon = parseInt(coordinate[0] * 10000000);
|
||||||
MISSION_PLANER.bufferPoint.lon = parseInt(coordinate[1] * 10000000);
|
MISSION_PLANER.bufferPoint.lat = parseInt(coordinate[1] * 10000000);
|
||||||
MISSION_PLANER.bufferPoint.alt = markers[pointForSend].alt;
|
MISSION_PLANER.bufferPoint.alt = markers[pointForSend].alt;
|
||||||
|
|
||||||
pointForSend++;
|
pointForSend++;
|
||||||
if (pointForSend >= markers.length) {
|
if (pointForSend >= markers.length) {
|
||||||
MISSION_PLANER.bufferPoint.endMission = 0xA5;
|
MISSION_PLANER.bufferPoint.endMission = 0xA5;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue