mirror of
https://github.com/iNavFlight/inav-configurator.git
synced 2025-07-22 15:55:28 +03:00
Waypoint OOP version 1.9
This commit is contained in:
parent
3265158791
commit
0a8d4f81cf
6 changed files with 88 additions and 296 deletions
|
@ -2081,35 +2081,7 @@ var mspHelper = (function (gui) {
|
||||||
buffer.push(SENSOR_CONFIG.opflow);
|
buffer.push(SENSOR_CONFIG.opflow);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MSPCodes.MSP_SET_WP:
|
|
||||||
buffer.push(MISSION_PLANER.bufferPoint.number); // sbufReadU8(src); // number
|
|
||||||
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, 1));
|
|
||||||
buffer.push(specificByte(MISSION_PLANER.bufferPoint.lat, 2));
|
|
||||||
buffer.push(specificByte(MISSION_PLANER.bufferPoint.lat, 3));
|
|
||||||
buffer.push(specificByte(MISSION_PLANER.bufferPoint.lon, 0)); // sbufReadU32(src); // lon
|
|
||||||
buffer.push(specificByte(MISSION_PLANER.bufferPoint.lon, 1));
|
|
||||||
buffer.push(specificByte(MISSION_PLANER.bufferPoint.lon, 2));
|
|
||||||
buffer.push(specificByte(MISSION_PLANER.bufferPoint.lon, 3));
|
|
||||||
buffer.push(specificByte(MISSION_PLANER.bufferPoint.alt, 0)); // sbufReadU32(src); // to set altitude (cm)
|
|
||||||
buffer.push(specificByte(MISSION_PLANER.bufferPoint.alt, 1));
|
|
||||||
buffer.push(specificByte(MISSION_PLANER.bufferPoint.alt, 2));
|
|
||||||
buffer.push(specificByte(MISSION_PLANER.bufferPoint.alt, 3));
|
|
||||||
buffer.push(lowByte(MISSION_PLANER.bufferPoint.p1)); //sbufReadU16(src); // P1 speed or landing
|
|
||||||
buffer.push(highByte(MISSION_PLANER.bufferPoint.p1));
|
|
||||||
buffer.push(lowByte(MISSION_PLANER.bufferPoint.p2)); //sbufReadU16(src); // P2
|
|
||||||
buffer.push(highByte(MISSION_PLANER.bufferPoint.p2));
|
|
||||||
buffer.push(lowByte(MISSION_PLANER.bufferPoint.p3)); //sbufReadU16(src); // P3
|
|
||||||
buffer.push(highByte(MISSION_PLANER.bufferPoint.p3));
|
|
||||||
buffer.push(MISSION_PLANER.bufferPoint.endMission); //sbufReadU8(src); // future: to set nav flag
|
|
||||||
break;
|
|
||||||
case MSPCodes.MSP_WP:
|
|
||||||
console.log("MISSION_PLANER.bufferPoint.number : ",MISSION_PLANER.bufferPoint.number);
|
|
||||||
buffer.push(MISSION_PLANER.bufferPoint.number+1);
|
|
||||||
console.log("buffer ", buffer);
|
|
||||||
|
|
||||||
break;
|
|
||||||
case MSPCodes.MSP_WP_MISSION_SAVE:
|
case MSPCodes.MSP_WP_MISSION_SAVE:
|
||||||
// buffer.push(0);
|
// buffer.push(0);
|
||||||
console.log(buffer);
|
console.log(buffer);
|
||||||
|
@ -2924,7 +2896,6 @@ var mspHelper = (function (gui) {
|
||||||
MSP.send_message(MSPCodes.MSP_WP_GETINFO, false, false, getFirstWP);
|
MSP.send_message(MSPCodes.MSP_WP_GETINFO, false, false, getFirstWP);
|
||||||
|
|
||||||
function getFirstWP() {
|
function getFirstWP() {
|
||||||
console.log("MISSION_PLANER.getCountBusyPoints() ", MISSION_PLANER.getCountBusyPoints());
|
|
||||||
MSP.send_message(MSPCodes.MSP_WP, [waypointId], false, nextWaypoint)
|
MSP.send_message(MSPCodes.MSP_WP, [waypointId], false, nextWaypoint)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2937,10 +2908,6 @@ var mspHelper = (function (gui) {
|
||||||
MSP.send_message(MSPCodes.MSP_WP, [waypointId], false, callback);
|
MSP.send_message(MSPCodes.MSP_WP, [waypointId], false, callback);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
function endMission() {
|
|
||||||
console.log("End");
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
self.saveWaypoints = function (callback) {
|
self.saveWaypoints = function (callback) {
|
||||||
|
@ -2991,10 +2958,6 @@ var mspHelper = (function (gui) {
|
||||||
MSP.send_message(MSPCodes.MSP2_INAV_SET_SAFEHOME, SAFEHOMES.extractBuffer(safehomeId), false, callback);
|
MSP.send_message(MSPCodes.MSP2_INAV_SET_SAFEHOME, SAFEHOMES.extractBuffer(safehomeId), false, callback);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
function endSendSafehome() {
|
|
||||||
console.log("end sending safehome");
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
self._getSetting = function (name) {
|
self._getSetting = function (name) {
|
||||||
|
|
|
@ -123,9 +123,6 @@ let SafehomeCollection = function () {
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
console.log("Data empty");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -180,7 +180,6 @@ let WaypointCollection = function () {
|
||||||
optionIdx = 0;
|
optionIdx = 0;
|
||||||
idx++;
|
idx++;
|
||||||
}
|
}
|
||||||
console.log(((bMWPfile && bReverse) ? self.get().length : self.get().length-1));
|
|
||||||
if (element.getNumber() == ((bMWPfile && bReverse) ? self.get().length : self.get().length-1)) {
|
if (element.getNumber() == ((bMWPfile && bReverse) ? self.get().length : self.get().length-1)) {
|
||||||
element.setEndMission(0xA5);
|
element.setEndMission(0xA5);
|
||||||
}
|
}
|
||||||
|
@ -191,7 +190,16 @@ let WaypointCollection = function () {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
self.getNonAttachedList = function () {
|
||||||
|
let tmpData = [];
|
||||||
|
data.forEach(function (element) {
|
||||||
|
if (!element.isAttached()) {
|
||||||
|
tmpData.push(element);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return tmpData;
|
||||||
|
}
|
||||||
|
|
||||||
self.getAttachedList = function () {
|
self.getAttachedList = function () {
|
||||||
let tmpData = [];
|
let tmpData = [];
|
||||||
|
@ -292,6 +300,16 @@ let WaypointCollection = function () {
|
||||||
self.setVersion(mission.getVersion());
|
self.setVersion(mission.getVersion());
|
||||||
self.setCenter(mission.getCenter());
|
self.setCenter(mission.getCenter());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self.convertJumpNumberToWaypoint = function(jumpId) {
|
||||||
|
let outputNumber = 0;
|
||||||
|
self.getNonAttachedList().forEach(function (element) {
|
||||||
|
if (element.getLayerNumber() == jumpId) {
|
||||||
|
outputNumber = element.getNumber();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return outputNumber;
|
||||||
|
}
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
};
|
};
|
|
@ -186,6 +186,7 @@
|
||||||
padding-top: 5px;
|
padding-top: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.tab-mission-control {
|
.tab-mission-control {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,13 +25,13 @@
|
||||||
<a id="saveEepromMissionButton" class="btnicon ic_save2Eprom" href="#" title="Save Eeprom mission"></a>
|
<a id="saveEepromMissionButton" class="btnicon ic_save2Eprom" href="#" title="Save Eeprom mission"></a>
|
||||||
</div>
|
</div>
|
||||||
<hr>
|
<hr>
|
||||||
<div class="btn">
|
<!-- <div class="btn">
|
||||||
<a id="playMissionButton" class="btnicon ic_play" href="#" title="Play mission"></a>
|
<a id="playMissionButton" class="btnicon ic_play" href="#" title="Play mission"></a>
|
||||||
<div class="btn-danger">
|
<div class="btn-danger">
|
||||||
<a id="stopMissionButton" class="btnicon ic_stop" href="#" title="Stop mission"></a>
|
<a id="stopMissionButton" class="btnicon ic_stop" href="#" title="Stop mission"></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<hr>
|
<hr> -->
|
||||||
<div id="removeAllPoints" class="btn btn-danger" style="padding-top: 1px; display: inline-block">
|
<div id="removeAllPoints" class="btn btn-danger" style="padding-top: 1px; display: inline-block">
|
||||||
<a class="btnicon ic_removeAll" href="#" title="Remove all"></a>
|
<a class="btnicon ic_removeAll" href="#" title="Remove all"></a>
|
||||||
</div>
|
</div>
|
||||||
|
@ -76,6 +76,10 @@
|
||||||
<label class="point-label" for="MPdefaultPointSpeed">Speed (cm/s): </label>
|
<label class="point-label" for="MPdefaultPointSpeed">Speed (cm/s): </label>
|
||||||
<input id="MPdefaultPointSpeed" type="text" value="0" required>
|
<input id="MPdefaultPointSpeed" type="text" value="0" required>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="point">
|
||||||
|
<label class="point-label" for="MPdefaultSafeRangeSH">Radius (m): </label>
|
||||||
|
<input id="MPdefaultSafeRangeSH" type="text" value="0" required>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="missionPlanerSafehome" class="gui_box grey" style="display: none">
|
<div id="missionPlanerSafehome" class="gui_box grey" style="display: none">
|
||||||
|
|
|
@ -358,18 +358,10 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
var selectedFeature = null;
|
var selectedFeature = null;
|
||||||
var tempMarker = null;
|
var tempMarker = null;
|
||||||
|
|
||||||
var nonMarkerPoint = [];
|
|
||||||
var nonMarkerPointListRead = [];
|
|
||||||
var isOptions = false;
|
|
||||||
var oldMarkers = null;
|
|
||||||
var pointFromBuffer = {};
|
|
||||||
var pointForSend = 0;
|
|
||||||
var actionPointForSend = 0;
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// define & init parameters for default Settings
|
// define & init parameters for default Settings
|
||||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
var settings = { speed: 0, alt: 5000};
|
var settings = { speed: 0, alt: 5000, safeRadiusSH : 50};
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// define & init Waypoints parameters
|
// define & init Waypoints parameters
|
||||||
|
@ -381,8 +373,8 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
//var SAFEHOMES = new SafehomeCollection(); // TO COMMENT FOR RELEASE : DECOMMENT FOR DEBUG
|
//var SAFEHOMES = new SafehomeCollection(); // TO COMMENT FOR RELEASE : DECOMMENT FOR DEBUG
|
||||||
//SAFEHOMES.inflate(); // TO COMMENT FOR RELEASE : DECOMMENT FOR DEBUG
|
//SAFEHOMES.inflate(); // TO COMMENT FOR RELEASE : DECOMMENT FOR DEBUG
|
||||||
var safehomeRangeRadius = 200; //meters
|
//var safehomeRangeRadius = 200; //meters
|
||||||
var safehomeSafeRadius = 50; //meters
|
//var safehomeSafeRadius = 50; //meters
|
||||||
|
|
||||||
/////////////////////////////////////////////
|
/////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
|
@ -419,8 +411,9 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function refreshSettings() {
|
function refreshSettings() {
|
||||||
$('#MPdefaultPointAlt').val(settings.alt);
|
$('#MPdefaultPointAlt').val(String(settings.alt));
|
||||||
$('#MPdefaultPointSpeed').val(settings.speed);
|
$('#MPdefaultPointSpeed').val(String(settings.speed));
|
||||||
|
$('#MPdefaultSafeRangeSH').val(String(settings.safeRadiusSH));
|
||||||
}
|
}
|
||||||
|
|
||||||
function closeSettingsPanel() {
|
function closeSettingsPanel() {
|
||||||
|
@ -543,9 +536,7 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
let coord = ol.proj.fromLonLat([safehome.getLonMap(), safehome.getLatMap()]);
|
let coord = ol.proj.fromLonLat([safehome.getLonMap(), safehome.getLatMap()]);
|
||||||
var iconFeature = new ol.Feature({
|
var iconFeature = new ol.Feature({
|
||||||
geometry: new ol.geom.Point(coord),
|
geometry: new ol.geom.Point(coord),
|
||||||
name: 'Null Island',
|
name: 'safehome'
|
||||||
population: 4000,
|
|
||||||
rainfall: 500
|
|
||||||
});
|
});
|
||||||
|
|
||||||
//iconFeature.setStyle(getSafehomeIcon(safehome, safehome.isUsed()));
|
//iconFeature.setStyle(getSafehomeIcon(safehome, safehome.isUsed()));
|
||||||
|
@ -578,25 +569,31 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
}),
|
}),
|
||||||
style : function(iconFeature) {
|
style : function(iconFeature) {
|
||||||
let styles = [getSafehomeIcon(safehome)];
|
let styles = [getSafehomeIcon(safehome)];
|
||||||
/* console.log(iconFeature.getGeometry().getType());
|
|
||||||
if (safehome.isUsed()) {
|
if (safehome.isUsed()) {
|
||||||
circleStyle.setGeometry(new ol.geom.Circle(iconFeature.getGeometry().getCoordinates(), safehomeRangeRadius));
|
//circleStyle.setGeometry(new ol.geom.Circle(iconFeature.getGeometry().getCoordinates(), safehomeRangeRadius));
|
||||||
//circleSafeStyle.setGeometry(new ol.geom.Circle(iconFeature.getGeometry().getCenter(), safehomeSafeRadius));
|
circleSafeStyle.setGeometry(new ol.geom.Circle(iconFeature.getGeometry().getCoordinates(), getProjectedRadius(Number(settings.safeRadiusSH))));
|
||||||
styles.push(circleStyle);
|
styles.push(circleSafeStyle);
|
||||||
} */
|
}
|
||||||
return styles;
|
return styles;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
vectorLayer.kind = "safehome";
|
vectorLayer.kind = "safehome";
|
||||||
vectorLayer.number = safehome.getNumber();
|
vectorLayer.number = safehome.getNumber();
|
||||||
|
vectorLayer.selection = false;
|
||||||
|
|
||||||
safehomeMarkers.push(vectorLayer);
|
safehomeMarkers.push(vectorLayer);
|
||||||
|
|
||||||
return vectorLayer;
|
return vectorLayer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getProjectedRadius(radius) {
|
||||||
|
let projection = map.getView().getProjection();
|
||||||
|
let resolutionAtEquator = map.getView().getResolution();
|
||||||
|
let resolutionRate = resolutionAtEquator / ol.proj.getPointResolution(projection, resolutionAtEquator, map.getView().getCenter());
|
||||||
|
let radiusProjected = (radius / ol.proj.METERS_PER_UNIT.m) * resolutionRate;
|
||||||
|
return radiusProjected;
|
||||||
|
}
|
||||||
/////////////////////////////////////////////
|
/////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// Manage Waypoint
|
// Manage Waypoint
|
||||||
|
@ -604,7 +601,7 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
/////////////////////////////////////////////
|
/////////////////////////////////////////////
|
||||||
|
|
||||||
function removeAllWaypoints() {
|
function removeAllWaypoints() {
|
||||||
mission = new WaypointCollection();
|
mission.reinit();
|
||||||
cleanLayers();
|
cleanLayers();
|
||||||
clearEditForm();
|
clearEditForm();
|
||||||
updateTotalInfo();
|
updateTotalInfo();
|
||||||
|
@ -685,6 +682,7 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
// If action is Set_POI, increment counter of POI
|
// If action is Set_POI, increment counter of POI
|
||||||
poiList.push(element.getNumber());
|
poiList.push(element.getNumber());
|
||||||
activatePoi = true;
|
activatePoi = true;
|
||||||
|
activateHead = false;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// If classic WPs, draw standard line in-between
|
// If classic WPs, draw standard line in-between
|
||||||
|
@ -693,7 +691,7 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
}
|
}
|
||||||
// If one is POI, draw orange line in-between and modulate dashline each time a new POI is defined
|
// If one is POI, draw orange line in-between and modulate dashline each time a new POI is defined
|
||||||
else if (typeof oldPos !== 'undefined' && activatePoi == true && activateHead != true) {
|
else if (typeof oldPos !== 'undefined' && activatePoi == true && activateHead != true) {
|
||||||
if ((poiList % 2) == 0) {
|
if ((poiList.length % 2) == 0) {
|
||||||
paintLine(oldPos, coord, element.getNumber(), color='#ffb725', lineDash=5);
|
paintLine(oldPos, coord, element.getNumber(), color='#ffb725', lineDash=5);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -720,6 +718,7 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
oldHeading = 'undefined'
|
oldHeading = 'undefined'
|
||||||
}
|
}
|
||||||
else if (typeof element.getP1() != 'undefined' && element.getP1() != -1) {
|
else if (typeof element.getP1() != 'undefined' && element.getP1() != -1) {
|
||||||
|
activatePoi = false;
|
||||||
activateHead = true;
|
activateHead = true;
|
||||||
oldHeading = String(element.getP1());
|
oldHeading = String(element.getP1());
|
||||||
}
|
}
|
||||||
|
@ -863,7 +862,7 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
$row.find(".waypointOptions-number").text(element.getAttachedNumber()+1);
|
$row.find(".waypointOptions-number").text(element.getAttachedNumber()+1);
|
||||||
|
|
||||||
|
|
||||||
$row.find(".waypointOptions-p1").val(element.getP1()).change(function () {
|
$row.find(".waypointOptions-p1").val((MWNP.WPTYPE.REV[element.getAction()] == "JUMP" ? element.getP1()+1 : element.getP1())).change(function () {
|
||||||
if (MWNP.WPTYPE.REV[element.getAction()] == "SET_HEAD") {
|
if (MWNP.WPTYPE.REV[element.getAction()] == "SET_HEAD") {
|
||||||
if ($(this).val() >= 360 || ($(this).val() < 0 && $(this).val() != -1))
|
if ($(this).val() >= 360 || ($(this).val() < 0 && $(this).val() != -1))
|
||||||
{
|
{
|
||||||
|
@ -879,13 +878,13 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (MWNP.WPTYPE.REV[element.getAction()] == "JUMP") {
|
else if (MWNP.WPTYPE.REV[element.getAction()] == "JUMP") {
|
||||||
if ($(this).val() > mission.get().length || $(this).val() < 0)
|
if ($(this).val() > mission.getNonAttachedList().length || $(this).val() < 1)
|
||||||
{
|
{
|
||||||
$(this).val(0);
|
$(this).val(1);
|
||||||
alert(chrome.i18n.getMessage('MissionPlannerJumpSettingsCheck'));
|
alert(chrome.i18n.getMessage('MissionPlannerJumpSettingsCheck'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
element.setP1(Number($(this).val()));
|
element.setP1((MWNP.WPTYPE.REV[element.getAction()] == "JUMP" ? mission.convertJumpNumberToWaypoint(Number($(this).val())-1) : Number($(this).val())));
|
||||||
mission.updateWaypoint(element);
|
mission.updateWaypoint(element);
|
||||||
cleanLines();
|
cleanLines();
|
||||||
redrawLayer();
|
redrawLayer();
|
||||||
|
@ -1229,9 +1228,11 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
selectedFeature.setStyle(getWaypointIcon(selectedMarker, false));
|
selectedFeature.setStyle(getWaypointIcon(selectedMarker, false));
|
||||||
selectedMarker = null;
|
selectedMarker = null;
|
||||||
selectedFeature = null;
|
selectedFeature = null;
|
||||||
|
tempMarker = null;
|
||||||
clearEditForm();
|
clearEditForm();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
GUI.log(e);
|
console.log(e);
|
||||||
|
GUI.log("Previous selection was not a WAYPOINT!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
selectedFeature = map.forEachFeatureAtPixel(evt.pixel,
|
selectedFeature = map.forEachFeatureAtPixel(evt.pixel,
|
||||||
|
@ -1280,7 +1281,7 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
cleanLayers();
|
cleanLayers();
|
||||||
redrawLayers();
|
redrawLayers();
|
||||||
}
|
}
|
||||||
else if (selectedFeature && tempMarker.kind == "safehome") {
|
else if (selectedFeature && tempMarker.kind == "safehome" && tempMarker.selection) {
|
||||||
selectedMarker = SAFEHOMES.getSafehome(tempMarker.number);
|
selectedMarker = SAFEHOMES.getSafehome(tempMarker.number);
|
||||||
var geometry = selectedFeature.getGeometry();
|
var geometry = selectedFeature.getGeometry();
|
||||||
var coord = ol.proj.toLonLat(geometry.getCoordinates());
|
var coord = ol.proj.toLonLat(geometry.getCoordinates());
|
||||||
|
@ -1501,8 +1502,6 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
GUI.log('Start of getting Safehome points');
|
GUI.log('Start of getting Safehome points');
|
||||||
mspHelper.loadSafehomes();
|
mspHelper.loadSafehomes();
|
||||||
setTimeout(function(){
|
setTimeout(function(){
|
||||||
console.log("debug Safehome after loading");
|
|
||||||
SAFEHOMES.safehomeDisplayDebug();
|
|
||||||
renderSafehomesTable();
|
renderSafehomesTable();
|
||||||
cleanSafehomeLayers();
|
cleanSafehomeLayers();
|
||||||
renderSafehomesOnMap();
|
renderSafehomesOnMap();
|
||||||
|
@ -1565,7 +1564,7 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
removeAllWaypoints();
|
removeAllWaypoints();
|
||||||
$(this).addClass('disabled');
|
$(this).addClass('disabled');
|
||||||
GUI.log('Start get point');
|
GUI.log('Start get point');
|
||||||
getWaypoints();
|
getWaypointsFromFC();
|
||||||
GUI.log('End get point');
|
GUI.log('End get point');
|
||||||
$('#loadMissionButton').removeClass('disabled');
|
$('#loadMissionButton').removeClass('disabled');
|
||||||
});
|
});
|
||||||
|
@ -1573,37 +1572,35 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
$('#saveMissionButton').on('click', function () {
|
$('#saveMissionButton').on('click', function () {
|
||||||
$(this).addClass('disabled');
|
$(this).addClass('disabled');
|
||||||
GUI.log('Start send point');
|
GUI.log('Start send point');
|
||||||
MISSION_PLANER.reinit();
|
sendWaypointsToFC();
|
||||||
MISSION_PLANER.copy(mission);
|
GUI.log('End send point');
|
||||||
MISSION_PLANER.update(true, true);
|
$('#saveMissionButton').removeClass('disabled');
|
||||||
mspHelper.saveWaypoints();
|
|
||||||
setTimeout(function(){
|
|
||||||
GUI.log('End send point');
|
|
||||||
$('#saveMissionButton').removeClass('disabled');
|
|
||||||
mission.setMaxWaypoints(MISSION_PLANER.getMaxWaypoints());
|
|
||||||
mission.setValidMission(MISSION_PLANER.getValidMission());
|
|
||||||
mission.setCountBusyPoints(MISSION_PLANER.getCountBusyPoints());
|
|
||||||
updateTotalInfo();
|
|
||||||
}, 2000);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#loadEepromMissionButton').on('click', function () {
|
$('#loadEepromMissionButton').on('click', function () {
|
||||||
if (markers.length && !confirm(chrome.i18n.getMessage('confirm_delete_all_points'))) return;
|
if (markers.length && !confirm(chrome.i18n.getMessage('confirm_delete_all_points'))) return;
|
||||||
removeAllWaypoints();
|
removeAllWaypoints();
|
||||||
GUI.log(chrome.i18n.getMessage('eeprom_load_ok'));
|
GUI.log(chrome.i18n.getMessage('eeprom_load_ok'));
|
||||||
MSP.send_message(MSPCodes.MSP_WP_MISSION_LOAD, [0], getWaypoints);
|
MSP.send_message(MSPCodes.MSP_WP_MISSION_LOAD, [0], getWaypointsFromFC);
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#saveEepromMissionButton').on('click', function () {
|
$('#saveEepromMissionButton').on('click', function () {
|
||||||
|
$(this).addClass('disabled');
|
||||||
|
GUI.log('Start send point');
|
||||||
|
sendWaypointsToFC();
|
||||||
|
GUI.log('End send point');
|
||||||
|
$('#saveEepromMissionButton').removeClass('disabled');
|
||||||
GUI.log(chrome.i18n.getMessage('eeprom_saved_ok'));
|
GUI.log(chrome.i18n.getMessage('eeprom_saved_ok'));
|
||||||
MSP.send_message(MSPCodes.MSP_WP_MISSION_SAVE, [0], false);
|
setTimeout(function(){
|
||||||
|
MSP.send_message(MSPCodes.MSP_WP_MISSION_SAVE, [0], false);
|
||||||
|
},2000);
|
||||||
});
|
});
|
||||||
|
|
||||||
/////////////////////////////////////////////
|
/////////////////////////////////////////////
|
||||||
// Callback for settings
|
// Callback for settings
|
||||||
/////////////////////////////////////////////
|
/////////////////////////////////////////////
|
||||||
$('#saveSettings').on('click', function () {
|
$('#saveSettings').on('click', function () {
|
||||||
settings = { speed: $('#MPdefaultPointSpeed').val(), alt: $('#MPdefaultPointAlt').val() };
|
settings = { speed: Number($('#MPdefaultPointSpeed').val()), alt: Number($('#MPdefaultPointAlt').val()), safeRadiusSH: Number($('#MPdefaultSafeRangeSH').val()) };
|
||||||
saveSettings();
|
saveSettings();
|
||||||
closeSettingsPanel();
|
closeSettingsPanel();
|
||||||
});
|
});
|
||||||
|
@ -1749,8 +1746,8 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
var point = { $: {
|
var point = { $: {
|
||||||
'no': waypoint.getNumber()+1,
|
'no': waypoint.getNumber()+1,
|
||||||
'action': MWNP.WPTYPE.REV[waypoint.getAction()],
|
'action': MWNP.WPTYPE.REV[waypoint.getAction()],
|
||||||
'lat': Math.round(waypoint.getLatMap()),
|
'lat': waypoint.getLatMap(),
|
||||||
'lon': Math.round(waypoint.getLonMap()),
|
'lon': waypoint.getLonMap(),
|
||||||
'alt': (waypoint.getAlt() / 100),
|
'alt': (waypoint.getAlt() / 100),
|
||||||
'parameter1': (MWNP.WPTYPE.REV[waypoint.getAction()] == "JUMP" ? waypoint.getP1()+1 : waypoint.getP1()),
|
'parameter1': (MWNP.WPTYPE.REV[waypoint.getAction()] == "JUMP" ? waypoint.getP1()+1 : waypoint.getP1()),
|
||||||
'parameter2': waypoint.getP2(),
|
'parameter2': waypoint.getP2(),
|
||||||
|
@ -1775,219 +1772,31 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
// Load/Save FC mission Toolbox
|
// Load/Save FC mission Toolbox
|
||||||
//
|
//
|
||||||
/////////////////////////////////////////////
|
/////////////////////////////////////////////
|
||||||
function getWaypoints() {
|
function getWaypointsFromFC() {
|
||||||
mspHelper.loadWaypoints();
|
mspHelper.loadWaypoints();
|
||||||
setTimeout(function(){
|
setTimeout(function(){
|
||||||
console.log("getWaypoint MISSION_PLANER 0 ");
|
|
||||||
console.log(MISSION_PLANER.missionDisplayDebug());
|
|
||||||
mission.reinit();
|
mission.reinit();
|
||||||
mission.copy(MISSION_PLANER);
|
mission.copy(MISSION_PLANER);
|
||||||
mission.update(true);
|
mission.update(true);
|
||||||
console.log("getWaypoint 0 ");
|
|
||||||
console.log(mission.missionDisplayDebug());
|
|
||||||
redrawLayers();
|
redrawLayers();
|
||||||
updateTotalInfo();
|
updateTotalInfo();
|
||||||
}, 2000);
|
}, 2000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function sendWaypointsToFC() {
|
||||||
|
MISSION_PLANER.reinit();
|
||||||
|
MISSION_PLANER.copy(mission);
|
||||||
|
MISSION_PLANER.update(true, true);
|
||||||
|
mspHelper.saveWaypoints();
|
||||||
|
setTimeout(function(){
|
||||||
|
mission.setMaxWaypoints(MISSION_PLANER.getMaxWaypoints());
|
||||||
|
mission.setValidMission(MISSION_PLANER.getValidMission());
|
||||||
|
mission.setCountBusyPoints(MISSION_PLANER.getCountBusyPoints());
|
||||||
|
updateTotalInfo();
|
||||||
|
}, 2000);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function endGetPoint() {
|
|
||||||
GUI.log('End get point');
|
|
||||||
$('#loadMissionButton').removeClass('disabled');
|
|
||||||
repaint();
|
|
||||||
updateTotalInfo();
|
|
||||||
}
|
|
||||||
|
|
||||||
function getNextPoint() {
|
|
||||||
if (MISSION_PLANER.countBusyPoints == 0) {
|
|
||||||
endGetPoint();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// Populate a dictionary pointFromBuffer which stores all the point values from buffer to be post-treated then (Needed for JUMP option at least)
|
|
||||||
if (pointForSend > 0) {
|
|
||||||
pointFromBuffer[MISSION_PLANER.bufferPoint.number] = {
|
|
||||||
number : MISSION_PLANER.bufferPoint.number,
|
|
||||||
lon : MISSION_PLANER.bufferPoint.lon,
|
|
||||||
lat : MISSION_PLANER.bufferPoint.lat,
|
|
||||||
action : MISSION_PLANER.bufferPoint.action,
|
|
||||||
alt : MISSION_PLANER.bufferPoint.alt,
|
|
||||||
p1 : MISSION_PLANER.bufferPoint.p1,
|
|
||||||
p2 : MISSION_PLANER.bufferPoint.p2,
|
|
||||||
p3 : MISSION_PLANER.bufferPoint.p3
|
|
||||||
};
|
|
||||||
if ([MWNP.WPTYPE.JUMP,MWNP.WPTYPE.SET_HEAD,MWNP.WPTYPE.RTH].includes(MISSION_PLANER.bufferPoint.action)) {nonMarkerPointListRead.push(MISSION_PLANER.bufferPoint.number);};
|
|
||||||
}
|
|
||||||
|
|
||||||
// Once all points have been scanned and pointFromBuffer populated, then scan pointFromBuffer to generate the Map Layers Markers
|
|
||||||
if (pointForSend >= MISSION_PLANER.countBusyPoints) {
|
|
||||||
Object.keys(pointFromBuffer).forEach(function(key) {
|
|
||||||
if ([MWNP.WPTYPE.WAYPOINT,MWNP.WPTYPE.PH_UNLIM,MWNP.WPTYPE.PH_TIME,MWNP.WPTYPE.LAND, MWNP.WPTYPE.SET_POI].includes(pointFromBuffer[key].action)) {
|
|
||||||
if ((Number(key)+1) <= MISSION_PLANER.countBusyPoints) {
|
|
||||||
var coord = ol.proj.fromLonLat([pointFromBuffer[key].lon, pointFromBuffer[key].lat]);
|
|
||||||
if (pointFromBuffer[Number(key)+1].action == MWNP.WPTYPE.SET_HEAD) {
|
|
||||||
var options = {key: 'SET_HEAD',
|
|
||||||
heading: pointFromBuffer[Number(key)+1].p1
|
|
||||||
};
|
|
||||||
}
|
|
||||||
else if (pointFromBuffer[Number(key)+1].action == MWNP.WPTYPE.JUMP) {
|
|
||||||
var options = {key: 'JUMP',
|
|
||||||
targetWP: getNumberOfNonMarkerForJumpReversed(nonMarkerPointListRead, pointFromBuffer[Number(key)+1].p1),
|
|
||||||
numRepeat: pointFromBuffer[Number(key)+1].p2
|
|
||||||
};
|
|
||||||
}
|
|
||||||
else if (pointFromBuffer[Number(key)+1].action == MWNP.WPTYPE.RTH) {
|
|
||||||
var options = {key: 'RTH',
|
|
||||||
landAfter: pointFromBuffer[Number(key)+1].p1
|
|
||||||
};
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
var options = {key: 'None'};
|
|
||||||
}
|
|
||||||
map.addLayer(addMarker(coord, pointFromBuffer[key].alt, pointFromBuffer[key].action, pointFromBuffer[key].p1, pointFromBuffer[key].p2, pointFromBuffer[key].p3, options));
|
|
||||||
if (key == 1) {
|
|
||||||
map.getView().setCenter(coord);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
var coord = ol.proj.fromLonLat([pointFromBuffer[key].lon, pointFromBuffer[key].lat]);
|
|
||||||
map.addLayer(addMarker(coord, pointFromBuffer[key].alt, pointFromBuffer[key].action, pointFromBuffer[key].p1, pointFromBuffer[key].p2, pointFromBuffer[key].p3));
|
|
||||||
if (key == 1) {
|
|
||||||
map.getView().setCenter(coord);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
endGetPoint();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
MISSION_PLANER.bufferPoint.number = pointForSend;
|
|
||||||
|
|
||||||
|
|
||||||
pointForSend++;
|
|
||||||
|
|
||||||
MSP.send_message(MSPCodes.MSP_WP, mspHelper.crunch(MSPCodes.MSP_WP), false, getNextPoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
function sendNextPoint() {
|
|
||||||
if (pointForSend >= mission.get().length) {
|
|
||||||
endSendPoint();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
MISSION_PLANER.bufferPoint.number = pointForSend + actionPointForSend + 1;
|
|
||||||
MISSION_PLANER.bufferPoint.action = markers[pointForSend].action;
|
|
||||||
MISSION_PLANER.bufferPoint.lon = parseInt(coordinate[0] * 10000000);
|
|
||||||
MISSION_PLANER.bufferPoint.lat = parseInt(coordinate[1] * 10000000);
|
|
||||||
MISSION_PLANER.bufferPoint.alt = markers[pointForSend].alt;
|
|
||||||
MISSION_PLANER.bufferPoint.p1 = 0;
|
|
||||||
MISSION_PLANER.bufferPoint.p2 = 0;
|
|
||||||
MISSION_PLANER.bufferPoint.p3 = 0;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (pointForSend >= markers.length) {
|
|
||||||
endSendPoint();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var geometry = markers[pointForSend].getSource().getFeatures()[0].getGeometry();
|
|
||||||
var coordinate = ol.proj.toLonLat(geometry.getCoordinates());
|
|
||||||
// If MISSION_PLANER.bufferPoint do not content any options keys (i.e different from None) => isOptions==false
|
|
||||||
if (isOptions == false) {
|
|
||||||
if (markers[pointForSend].action == '5' || markers[pointForSend].action == '2' || markers[pointForSend].action == '8' ) {
|
|
||||||
MISSION_PLANER.bufferPoint.number = pointForSend + actionPointForSend + 1;
|
|
||||||
MISSION_PLANER.bufferPoint.action = markers[pointForSend].action;
|
|
||||||
MISSION_PLANER.bufferPoint.lon = parseInt(coordinate[0] * 10000000);
|
|
||||||
MISSION_PLANER.bufferPoint.lat = parseInt(coordinate[1] * 10000000);
|
|
||||||
MISSION_PLANER.bufferPoint.alt = markers[pointForSend].alt;
|
|
||||||
MISSION_PLANER.bufferPoint.p1 = 0;
|
|
||||||
MISSION_PLANER.bufferPoint.p2 = 0;
|
|
||||||
MISSION_PLANER.bufferPoint.p3 = 0;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
MISSION_PLANER.bufferPoint.number = pointForSend + actionPointForSend + 1;
|
|
||||||
MISSION_PLANER.bufferPoint.action = markers[pointForSend].action;
|
|
||||||
MISSION_PLANER.bufferPoint.lon = parseInt(coordinate[0] * 10000000);
|
|
||||||
MISSION_PLANER.bufferPoint.lat = parseInt(coordinate[1] * 10000000);
|
|
||||||
MISSION_PLANER.bufferPoint.alt = markers[pointForSend].alt;
|
|
||||||
MISSION_PLANER.bufferPoint.p1 = markers[pointForSend].parameter1;
|
|
||||||
MISSION_PLANER.bufferPoint.p2 = markers[pointForSend].parameter2;
|
|
||||||
MISSION_PLANER.bufferPoint.p3 = markers[pointForSend].parameter3;
|
|
||||||
}
|
|
||||||
if (markers[pointForSend].options.key != "None") {
|
|
||||||
isOptions = true
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
isOptions = false
|
|
||||||
pointForSend++;
|
|
||||||
}
|
|
||||||
oldMarkers = markers[pointForSend]
|
|
||||||
if (pointForSend >= markers.length) {
|
|
||||||
MISSION_PLANER.bufferPoint.endMission = 0xA5;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
MISSION_PLANER.bufferPoint.endMission = 0;
|
|
||||||
}
|
|
||||||
MSP.send_message(MSPCodes.MSP_SET_WP, mspHelper.crunch(MSPCodes.MSP_SET_WP), false, sendNextPoint);
|
|
||||||
}
|
|
||||||
// else if MISSION_PLANER.bufferPoint do content any options keys (i.e different from None) => isOptions==true
|
|
||||||
else if (isOptions == true) {
|
|
||||||
if (oldMarkers.options.key == "JUMP") {
|
|
||||||
actionPointForSend++;
|
|
||||||
nonMarkerPoint.push(pointForSend + actionPointForSend+1);
|
|
||||||
MISSION_PLANER.bufferPoint.number = pointForSend + actionPointForSend + 1;
|
|
||||||
MISSION_PLANER.bufferPoint.action = String(MWNP.WPTYPE[oldMarkers.options.key]);
|
|
||||||
MISSION_PLANER.bufferPoint.lon = 0;
|
|
||||||
MISSION_PLANER.bufferPoint.lat = 0;
|
|
||||||
MISSION_PLANER.bufferPoint.alt = 0;
|
|
||||||
MISSION_PLANER.bufferPoint.p1 = getNumberOfNonMarkerForJump2(nonMarkerPoint, Number(oldMarkers.options.targetWP));
|
|
||||||
MISSION_PLANER.bufferPoint.p2 = Number(oldMarkers.options.numRepeat);
|
|
||||||
MISSION_PLANER.bufferPoint.p3 = 0;
|
|
||||||
}
|
|
||||||
else if (oldMarkers.options.key == "SET_HEAD") {
|
|
||||||
actionPointForSend++;
|
|
||||||
nonMarkerPoint.push(pointForSend + actionPointForSend+1);
|
|
||||||
MISSION_PLANER.bufferPoint.number = pointForSend + actionPointForSend + 1;
|
|
||||||
MISSION_PLANER.bufferPoint.action = String(MWNP.WPTYPE[oldMarkers.options.key]);
|
|
||||||
MISSION_PLANER.bufferPoint.lon = 0;
|
|
||||||
MISSION_PLANER.bufferPoint.lat = 0;
|
|
||||||
MISSION_PLANER.bufferPoint.alt = 0;
|
|
||||||
MISSION_PLANER.bufferPoint.p1 = Number(oldMarkers.options.heading);
|
|
||||||
MISSION_PLANER.bufferPoint.p2 = 0;
|
|
||||||
MISSION_PLANER.bufferPoint.p3 = 0;
|
|
||||||
}
|
|
||||||
else if (oldMarkers.options.key == "RTH") {
|
|
||||||
actionPointForSend++;
|
|
||||||
nonMarkerPoint.push(pointForSend + actionPointForSend+1);
|
|
||||||
MISSION_PLANER.bufferPoint.number = pointForSend + actionPointForSend + 1;
|
|
||||||
MISSION_PLANER.bufferPoint.action = String(MWNP.WPTYPE[oldMarkers.options.key]);
|
|
||||||
MISSION_PLANER.bufferPoint.lon = 0;
|
|
||||||
MISSION_PLANER.bufferPoint.lat = 0;
|
|
||||||
MISSION_PLANER.bufferPoint.alt = Number(oldMarkers.alt);
|
|
||||||
MISSION_PLANER.bufferPoint.p1 = (Number(oldMarkers.options.landAfter)) ? 1: 0;
|
|
||||||
MISSION_PLANER.bufferPoint.p2 = 0;
|
|
||||||
MISSION_PLANER.bufferPoint.p3 = 0;
|
|
||||||
}
|
|
||||||
isOptions = false;
|
|
||||||
pointForSend++;
|
|
||||||
if (pointForSend >= markers.length) {
|
|
||||||
MISSION_PLANER.bufferPoint.endMission = 0xA5;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
MISSION_PLANER.bufferPoint.endMission = 0;
|
|
||||||
}
|
|
||||||
MSP.send_message(MSPCodes.MSP_SET_WP, mspHelper.crunch(MSPCodes.MSP_SET_WP), false, sendNextPoint);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function endSendPoint() {
|
|
||||||
GUI.log('End send point');
|
|
||||||
|
|
||||||
MSP.send_message(MSPCodes.MSP_WP_GETINFO, false, false, updateTotalInfo);
|
|
||||||
|
|
||||||
$('#saveMissionButton').removeClass('disabled');
|
|
||||||
}
|
|
||||||
|
|
||||||
function updateTotalInfo() {
|
function updateTotalInfo() {
|
||||||
if (CONFIGURATOR.connectionValid) {
|
if (CONFIGURATOR.connectionValid) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue