mirror of
https://github.com/iNavFlight/inav-configurator.git
synced 2025-07-24 16:55:22 +03:00
Merge remote-tracking branch 'upstream/master' into abo_home_safehome_lon_lat_swap
This commit is contained in:
commit
0a0e451bfb
8 changed files with 342 additions and 109 deletions
|
@ -3346,7 +3346,7 @@
|
|||
},
|
||||
"osdSettingPLUS_CODE_DIGITS_HELP": {
|
||||
"message": "Precision at the equator: 10=13.9x13.9m; 11=2.8x3.5m; 12=56x87cm; 13=11x22cm."
|
||||
},
|
||||
},
|
||||
"osdSettingPLUS_CODE_SHORT_HELP": {
|
||||
"message": "Removing 2, 4 and 6 leading digits requires a reference location within, respectively, ~800km, ~40km and ~2km to recover the original coordinates."
|
||||
},
|
||||
|
@ -3998,6 +3998,9 @@
|
|||
"MissionPlannerJumpTargetRemoval": {
|
||||
"message": "You can't remove a Waypoint which is defined as a JUMP target! \nYou first need to remove the target on the waypoint triggering the JUMP."
|
||||
},
|
||||
"MissionPlannerAltitudeChangeReset": {
|
||||
"message": "Altitude below ground level. Change ignored"
|
||||
},
|
||||
"SafehomeSelected": {
|
||||
"message": ""
|
||||
},
|
||||
|
|
|
@ -15,7 +15,7 @@ let Waypoint = function (number, action, lat, lon, alt=0, p1=0, p2=0, p3=0, endM
|
|||
self.setNumber = function (data) {
|
||||
number = data;
|
||||
};
|
||||
|
||||
|
||||
self.getLayerNumber = function () {
|
||||
return layerNumber;
|
||||
};
|
||||
|
@ -23,7 +23,7 @@ let Waypoint = function (number, action, lat, lon, alt=0, p1=0, p2=0, p3=0, endM
|
|||
self.setLayerNumber = function (data) {
|
||||
layerNumber = data;
|
||||
};
|
||||
|
||||
|
||||
self.getPoiNumber = function () {
|
||||
return poiNumber;
|
||||
};
|
||||
|
@ -31,7 +31,7 @@ let Waypoint = function (number, action, lat, lon, alt=0, p1=0, p2=0, p3=0, endM
|
|||
self.setPoiNumber = function (data) {
|
||||
poiNumber = data;
|
||||
};
|
||||
|
||||
|
||||
self.isUsed = function () {
|
||||
return isUsed;
|
||||
};
|
||||
|
@ -39,7 +39,7 @@ let Waypoint = function (number, action, lat, lon, alt=0, p1=0, p2=0, p3=0, endM
|
|||
self.setUsed = function (data) {
|
||||
isUsed = data;
|
||||
};
|
||||
|
||||
|
||||
self.isAttached = function () {
|
||||
return isAttached;
|
||||
};
|
||||
|
@ -51,7 +51,7 @@ let Waypoint = function (number, action, lat, lon, alt=0, p1=0, p2=0, p3=0, endM
|
|||
self.getLon = function () {
|
||||
return lon;
|
||||
};
|
||||
|
||||
|
||||
self.getLonMap = function () {
|
||||
return lon / 10000000;
|
||||
};
|
||||
|
@ -63,7 +63,7 @@ let Waypoint = function (number, action, lat, lon, alt=0, p1=0, p2=0, p3=0, endM
|
|||
self.getLat = function () {
|
||||
return lat;
|
||||
};
|
||||
|
||||
|
||||
self.getLatMap = function () {
|
||||
return lat / 10000000;
|
||||
};
|
||||
|
@ -71,55 +71,55 @@ let Waypoint = function (number, action, lat, lon, alt=0, p1=0, p2=0, p3=0, endM
|
|||
self.setLat = function (data) {
|
||||
lat = data;
|
||||
};
|
||||
|
||||
|
||||
self.getAction = function () {
|
||||
return action;
|
||||
};
|
||||
|
||||
|
||||
self.setAction = function (data) {
|
||||
action = data;
|
||||
};
|
||||
|
||||
|
||||
self.getAlt = function () {
|
||||
return alt;
|
||||
};
|
||||
|
||||
|
||||
self.setAlt = function (data) {
|
||||
alt = data;
|
||||
};
|
||||
|
||||
|
||||
self.getP1 = function () {
|
||||
return p1;
|
||||
};
|
||||
|
||||
|
||||
self.setP1 = function (data) {
|
||||
p1 = data;
|
||||
};
|
||||
|
||||
|
||||
self.getP2 = function () {
|
||||
return p2;
|
||||
};
|
||||
|
||||
|
||||
self.setP2 = function (data) {
|
||||
p2 = data;
|
||||
};
|
||||
|
||||
|
||||
self.getP3 = function () {
|
||||
return p3;
|
||||
};
|
||||
|
||||
|
||||
self.setP3 = function (data) {
|
||||
p3 = data;
|
||||
};
|
||||
|
||||
|
||||
self.getEndMission = function () {
|
||||
return endMission;
|
||||
};
|
||||
|
||||
|
||||
self.setEndMission = function (data) {
|
||||
endMission = data;
|
||||
};
|
||||
|
||||
|
||||
self.getAttachedId = function () {
|
||||
return attachedId;
|
||||
};
|
||||
|
@ -127,7 +127,7 @@ let Waypoint = function (number, action, lat, lon, alt=0, p1=0, p2=0, p3=0, endM
|
|||
self.setAttachedId = function (data) {
|
||||
attachedId = data;
|
||||
};
|
||||
|
||||
|
||||
self.getAttachedNumber = function () {
|
||||
return attachedNumber;
|
||||
};
|
||||
|
@ -135,16 +135,18 @@ let Waypoint = function (number, action, lat, lon, alt=0, p1=0, p2=0, p3=0, endM
|
|||
self.setAttachedNumber = function (data) {
|
||||
attachedNumber = data;
|
||||
};
|
||||
|
||||
|
||||
self.getElevation = async function (globalSettings) {
|
||||
let elevation;
|
||||
if (globalSettings.mapProviderType == 'bing') {
|
||||
const response = await fetch('http://dev.virtualearth.net/REST/v1/Elevation/List?points='+self.getLatMap()+','+self.getLonMap()+'&heights=ellipsoid&key='+globalSettings.mapApiKey);
|
||||
const myJson = await response.json();
|
||||
let elevationEarthModel = $('#elevationEarthModel').prop("checked") ? "sealevel" : "ellipsoid";
|
||||
|
||||
const response = await fetch('http://dev.virtualearth.net/REST/v1/Elevation/List?points='+self.getLatMap()+','+self.getLonMap()+'&heights='+elevationEarthModel+'&key='+globalSettings.mapApiKey);
|
||||
const myJson = await response.json();
|
||||
elevation = myJson.resourceSets[0].resources[0].elevations[0];
|
||||
}
|
||||
else {
|
||||
elevation = "NA";
|
||||
elevation = "N/A";
|
||||
}
|
||||
return elevation;
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@ let WaypointCollection = function () {
|
|||
countBusyPoints = 0,
|
||||
version = 0,
|
||||
center = {}
|
||||
|
||||
|
||||
self.getMaxWaypoints = function () {
|
||||
return maxWaypoints;
|
||||
};
|
||||
|
@ -18,15 +18,15 @@ let WaypointCollection = function () {
|
|||
self.setMaxWaypoints = function (data) {
|
||||
maxWaypoints = data;
|
||||
};
|
||||
|
||||
|
||||
self.getValidMission = function () {
|
||||
return isValidMission;
|
||||
};
|
||||
|
||||
|
||||
self.setValidMission = function (data) {
|
||||
isValidMission = data;
|
||||
};
|
||||
|
||||
|
||||
self.getCountBusyPoints = function () {
|
||||
return countBusyPoints;
|
||||
};
|
||||
|
@ -34,7 +34,7 @@ let WaypointCollection = function () {
|
|||
self.setCountBusyPoints = function (data) {
|
||||
countBusyPoints = data;
|
||||
};
|
||||
|
||||
|
||||
self.getVersion = function () {
|
||||
return version;
|
||||
};
|
||||
|
@ -42,11 +42,11 @@ let WaypointCollection = function () {
|
|||
self.setVersion = function (data) {
|
||||
version = data;
|
||||
};
|
||||
|
||||
|
||||
self.getCenter = function () {
|
||||
return center;
|
||||
};
|
||||
|
||||
|
||||
self.setCenter = function (data) {
|
||||
center = data;
|
||||
};
|
||||
|
@ -54,11 +54,11 @@ let WaypointCollection = function () {
|
|||
self.setCenterZoom = function (data) {
|
||||
center.zoom = data;
|
||||
};
|
||||
|
||||
|
||||
self.setCenterLon = function (data) {
|
||||
center.lon = data;
|
||||
};
|
||||
|
||||
|
||||
self.setCenterLat = function (data) {
|
||||
center.lat = data;
|
||||
};
|
||||
|
@ -70,7 +70,7 @@ let WaypointCollection = function () {
|
|||
self.get = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
|
||||
self.isEmpty = function () {
|
||||
return data == [];
|
||||
};
|
||||
|
@ -78,7 +78,7 @@ let WaypointCollection = function () {
|
|||
self.flush = function () {
|
||||
data = [];
|
||||
};
|
||||
|
||||
|
||||
self.reinit = function () {
|
||||
data = [];
|
||||
maxWaypoints = 60;
|
||||
|
@ -99,13 +99,13 @@ let WaypointCollection = function () {
|
|||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
self.updateWaypoint = function(newWaypoint) {
|
||||
if (newWaypoint.isUsed()) {
|
||||
data[newWaypoint.getNumber()] = newWaypoint;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
self.dropWaypoint = function(newWaypoint) {
|
||||
self.getWaypoint(newWaypoint.getNumber()).setUsed(false);
|
||||
let indexId = newWaypoint.getNumber()
|
||||
|
@ -120,7 +120,7 @@ let WaypointCollection = function () {
|
|||
data.splice(indexId, 1);
|
||||
|
||||
};
|
||||
|
||||
|
||||
self.insertWaypoint = function (newWaypoint, indexId) {
|
||||
data.forEach(function (wp) {
|
||||
if (wp.getNumber() >= indexId) {
|
||||
|
@ -133,7 +133,7 @@ let WaypointCollection = function () {
|
|||
data.splice(indexId, 0, newWaypoint);
|
||||
};
|
||||
|
||||
|
||||
|
||||
self.drop = function (waypointId) {
|
||||
self.getWaypoint(waypointId).setUsed(false);
|
||||
var tmpData = [];
|
||||
|
@ -148,7 +148,7 @@ let WaypointCollection = function () {
|
|||
|
||||
data = tmpData;
|
||||
};
|
||||
|
||||
|
||||
self.update = function (bMWPfile=false, bReverse=false) {
|
||||
let oldWPNumber = 0;
|
||||
let optionIdx = 0;
|
||||
|
@ -167,7 +167,7 @@ let WaypointCollection = function () {
|
|||
element.setP1(element.getP1()+1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if ([MWNP.WPTYPE.JUMP,MWNP.WPTYPE.SET_HEAD,MWNP.WPTYPE.RTH].includes(element.getAction())) {
|
||||
element.setAttachedId(oldWPNumber);
|
||||
element.setAttachedNumber(optionIdx);
|
||||
|
@ -189,7 +189,7 @@ let WaypointCollection = function () {
|
|||
}
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
self.getNonAttachedList = function () {
|
||||
let tmpData = [];
|
||||
data.forEach(function (element) {
|
||||
|
@ -199,8 +199,8 @@ let WaypointCollection = function () {
|
|||
});
|
||||
|
||||
return tmpData;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
self.getAttachedList = function () {
|
||||
let tmpData = [];
|
||||
data.forEach(function (element) {
|
||||
|
@ -210,8 +210,8 @@ let WaypointCollection = function () {
|
|||
});
|
||||
|
||||
return tmpData;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
self.getAttachedFromWaypoint = function (waypoint) {
|
||||
let tmpData = [];
|
||||
data.forEach(function (element) {
|
||||
|
@ -221,8 +221,8 @@ let WaypointCollection = function () {
|
|||
});
|
||||
|
||||
return tmpData;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
self.addAttachedFromWaypoint = function (waypoint) {
|
||||
let tmpNumber = 0;
|
||||
let tmpData = self.getAttachedFromWaypoint(waypoint);
|
||||
|
@ -234,8 +234,8 @@ let WaypointCollection = function () {
|
|||
tempWp.setAttachedId(waypoint.getNumber());
|
||||
self.insertWaypoint(tempWp, waypoint.getNumber()+tmpNumber+1);
|
||||
self.update();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
self.dropAttachedFromWaypoint = function (waypoint, waypointAttachedNumber) {
|
||||
data.forEach(function (element) {
|
||||
if (element.isAttached() && element.getAttachedId() == waypoint.getNumber() && element.getAttachedNumber() == waypointAttachedNumber) {
|
||||
|
@ -243,9 +243,9 @@ let WaypointCollection = function () {
|
|||
self.update();
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
self.extractBuffer = function(waypointId) {
|
||||
let buffer = [];
|
||||
let waypoint = self.getWaypoint(waypointId);
|
||||
|
@ -270,10 +270,10 @@ let WaypointCollection = function () {
|
|||
buffer.push(lowByte(waypoint.getP3())); //sbufReadU16(src); // P3
|
||||
buffer.push(highByte(waypoint.getP3()));
|
||||
buffer.push(waypoint.getEndMission()); //sbufReadU8(src); // future: to set nav flag
|
||||
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
|
||||
self.missionDisplayDebug = function() {
|
||||
if (data && data.length != 0) {
|
||||
data.forEach(function (element) {
|
||||
|
@ -289,7 +289,7 @@ let WaypointCollection = function () {
|
|||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
self.copy = function(mission){
|
||||
mission.get().forEach(function (element) {
|
||||
self.put(element);
|
||||
|
@ -300,7 +300,7 @@ let WaypointCollection = function () {
|
|||
self.setVersion(mission.getVersion());
|
||||
self.setCenter(mission.getCenter());
|
||||
}
|
||||
|
||||
|
||||
self.convertJumpNumberToWaypoint = function(jumpId) {
|
||||
let outputNumber = 0;
|
||||
self.getNonAttachedList().forEach(function (element) {
|
||||
|
@ -310,7 +310,7 @@ let WaypointCollection = function () {
|
|||
});
|
||||
return outputNumber;
|
||||
}
|
||||
|
||||
|
||||
self.isJumpTargetAttached = function(waypoint) {
|
||||
let lJumptTargetAttached = [];
|
||||
data.forEach(function (element) {
|
||||
|
@ -320,7 +320,7 @@ let WaypointCollection = function () {
|
|||
});
|
||||
return (lJumptTargetAttached.length != 0 && lJumptTargetAttached != 'undefined')
|
||||
}
|
||||
|
||||
|
||||
self.getPoiList = function() {
|
||||
let poiList = [];
|
||||
data.forEach(function (element) {
|
||||
|
@ -330,7 +330,7 @@ let WaypointCollection = function () {
|
|||
});
|
||||
return poiList;
|
||||
}
|
||||
|
||||
|
||||
self.getPoint2Measure = function(reverse=false) {
|
||||
let point2measure = [];
|
||||
let altPoint2measure = [];
|
||||
|
@ -383,10 +383,10 @@ let WaypointCollection = function () {
|
|||
nStart++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return [nLoop, point2measure, altPoint2measure, namePoint2measure, refPoint2measure];
|
||||
}
|
||||
|
||||
|
||||
self.getDistance = function(display) {
|
||||
let lengthLine = [];
|
||||
const [nLoop, point2measure, altPoint2measure, namePoint2measure, refPoint2measure] = self.getPoint2Measure();
|
||||
|
@ -394,9 +394,9 @@ let WaypointCollection = function () {
|
|||
return [-1];
|
||||
}
|
||||
else {
|
||||
|
||||
|
||||
const cumulativeSum = (sum => value => sum += value)(0);
|
||||
|
||||
|
||||
let oldCoord = [];
|
||||
point2measure.forEach(function (coord) {
|
||||
if (oldCoord != 'undefined' && oldCoord != []) {
|
||||
|
@ -408,7 +408,7 @@ let WaypointCollection = function () {
|
|||
return lengthLine.map(cumulativeSum);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
self.getElevation = async function(globalSettings) {
|
||||
const [nLoop, point2measure, altPoint2measure, namePoint2measure, refPoint2measure] = self.getPoint2Measure(true);
|
||||
let lengthMission = self.getDistance(true);
|
||||
|
@ -424,19 +424,21 @@ let WaypointCollection = function () {
|
|||
samples = 1024;
|
||||
}
|
||||
if (globalSettings.mapProviderType == 'bing') {
|
||||
let elevationEarthModel = $('#elevationEarthModel').prop("checked") ? "sealevel" : "ellipsoid";
|
||||
|
||||
if (point2measure.length >1) {
|
||||
const response = await fetch('http://dev.virtualearth.net/REST/v1/Elevation/Polyline?points='+point2measure+'&heights=ellipsoid&samples='+String(samples+1)+'&key='+globalSettings.mapApiKey);
|
||||
const myJson = await response.json();
|
||||
const response = await fetch('http://dev.virtualearth.net/REST/v1/Elevation/Polyline?points='+point2measure+'&heights='+elevationEarthModel+'&samples='+String(samples+1)+'&key='+globalSettings.mapApiKey);
|
||||
const myJson = await response.json();
|
||||
elevation = myJson.resourceSets[0].resources[0].elevations;
|
||||
}
|
||||
else {
|
||||
const response = await fetch('http://dev.virtualearth.net/REST/v1/Elevation/List?points='+point2measure+'&heights=ellipsoid&key='+globalSettings.mapApiKey);
|
||||
const myJson = await response.json();
|
||||
const response = await fetch('http://dev.virtualearth.net/REST/v1/Elevation/List?points='+point2measure+'&heights='+elevationEarthModel+'&key='+globalSettings.mapApiKey);
|
||||
const myJson = await response.json();
|
||||
elevation = myJson.resourceSets[0].resources[0].elevations;
|
||||
}
|
||||
}
|
||||
else {
|
||||
elevation = "NA";
|
||||
elevation = "N/A";
|
||||
}
|
||||
//console.log("elevation ", elevation);
|
||||
return [lengthMission, totalMissionDistance, samples, elevation, altPoint2measure, namePoint2measure, refPoint2measure];
|
||||
|
|
|
@ -22,6 +22,14 @@
|
|||
background: #37a8db;
|
||||
}
|
||||
|
||||
.tab-auxiliary .mode.inRange .info {
|
||||
background: #104156;
|
||||
color: white;
|
||||
}
|
||||
.tab-auxiliary .mode.inRange:nth-child(odd) .info {
|
||||
background: #104156;
|
||||
}
|
||||
|
||||
.tab-auxiliary .mode.off .info {
|
||||
background: #828885;
|
||||
color: white;
|
||||
|
@ -198,6 +206,33 @@
|
|||
padding: 10px 5px;
|
||||
}
|
||||
|
||||
.tab-auxiliary .acroEnabled {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
background-color: #828885;
|
||||
color: white;
|
||||
font-family: 'open_sansbold', Arial, serif;
|
||||
font-size: 12px;
|
||||
display: block;
|
||||
cursor: pointer;
|
||||
transition: all ease 0.2s;
|
||||
line-height: 28px;
|
||||
position: fixed;
|
||||
bottom:10px;
|
||||
left:20px;
|
||||
width:10%;
|
||||
text-align: center;
|
||||
z-index: 25000;
|
||||
}
|
||||
|
||||
.tab-auxiliary .acroEnabled.on {
|
||||
background-color: #37a8db;
|
||||
}
|
||||
|
||||
.tab-auxiliary .acroEnabled.off {
|
||||
background-color: #828885;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 1055px) , only screen and (max-device-width: 1055px) {
|
||||
.tab-auxiliary .fixed_band {
|
||||
width: calc(100% - -30px);
|
||||
|
|
|
@ -22,6 +22,9 @@
|
|||
<a class="save" href="#" i18n="auxiliaryButtonSave"></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="acroEnabled">
|
||||
ACRO
|
||||
</div>
|
||||
</div>
|
||||
<div id="tab-auxiliary-templates">
|
||||
<table class="modes">
|
||||
|
|
|
@ -111,6 +111,7 @@ TABS.auxiliary.initialize = function (callback) {
|
|||
$(newMode).data('index', modeIndex);
|
||||
$(newMode).data('id', modeId);
|
||||
$(newMode).data('origId', ORIG_AUX_CONFIG_IDS[modeIndex]);
|
||||
$(newMode).data('modeName', AUX_CONFIG[modeIndex]);
|
||||
|
||||
$(newMode).find('.name').data('modeElement', newMode);
|
||||
$(newMode).find('a.addRange').data('modeElement', newMode);
|
||||
|
@ -344,8 +345,19 @@ TABS.auxiliary.initialize = function (callback) {
|
|||
|
||||
function update_ui() {
|
||||
let hasUsedMode = false;
|
||||
let acroEnabled = true;
|
||||
let acroFail = ["ANGLE", "HORIZON", "MANUAL", "NAV RTH", "NAV POSHOLD", "NAV CRUISE", "NAV COURSE HOLD", "NAV WP", "GCS NAV"];
|
||||
|
||||
var auxChannelCount = RC.active_channels - 4;
|
||||
|
||||
for (var i = 0; i < (auxChannelCount); i++) {
|
||||
update_marker(i, RC.channels[i + 4]);
|
||||
}
|
||||
|
||||
for (var i = 0; i < AUX_CONFIG.length; i++) {
|
||||
var modeElement = $('#mode-' + i);
|
||||
let inRange = false;
|
||||
|
||||
if (modeElement.find(' .range').length == 0) {
|
||||
// if the mode is unused, skip it
|
||||
modeElement.removeClass('off').removeClass('on');
|
||||
|
@ -353,12 +365,48 @@ TABS.auxiliary.initialize = function (callback) {
|
|||
}
|
||||
|
||||
if (FC.isModeBitSet(modeElement.data('origId'))) {
|
||||
$('.mode .name').eq(modeElement.data('index')).data('modeElement').addClass('on').removeClass('off');
|
||||
// The flight controller can activate the mode
|
||||
$('.mode .name').eq(modeElement.data('index')).data('modeElement').addClass('on').removeClass('inRange').removeClass('off');
|
||||
|
||||
if (jQuery.inArray(modeElement.data('modeName'), acroFail) !== -1) {
|
||||
acroEnabled = false;
|
||||
}
|
||||
} else {
|
||||
$('.mode .name').eq(modeElement.data('index')).data('modeElement').removeClass('on').addClass('off');
|
||||
// Check to see if the mode is in range
|
||||
var modeRanges = modeElement.find(' .range');
|
||||
for (r = 0; r < modeRanges.length; r++) {
|
||||
var rangeLow = $(modeRanges[r]).find('.lowerLimitValue').html();
|
||||
var rangeHigh = $(modeRanges[r]).find('.upperLimitValue').html();
|
||||
var markerPosition = $(modeRanges[r]).find('.marker')[0].style.left;
|
||||
markerPosition = markerPosition.substring(0, markerPosition.length-1);
|
||||
|
||||
rangeLow = (rangeLow - 900) / (2100-900) * 100;
|
||||
rangeHigh = (rangeHigh - 900) / (2100-900) * 100;
|
||||
|
||||
if ((markerPosition >= rangeLow) && (markerPosition <= rangeHigh)) {
|
||||
inRange = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (inRange) {
|
||||
$('.mode .name').eq(modeElement.data('index')).data('modeElement').removeClass('on').addClass('inRange').removeClass('off');
|
||||
|
||||
if (jQuery.inArray(modeElement.data('modeName'), acroFail) !== -1) {
|
||||
acroEnabled = false;
|
||||
}
|
||||
} else {
|
||||
// If not, it is shown as disabled.
|
||||
$('.mode .name').eq(modeElement.data('index')).data('modeElement').removeClass('on').removeClass('inRange').addClass('off');
|
||||
}
|
||||
}
|
||||
hasUsedMode = true;
|
||||
}
|
||||
|
||||
if (acroEnabled) {
|
||||
$('.acroEnabled').addClass('on').removeClass('off');
|
||||
} else {
|
||||
$('.acroEnabled').removeClass('on').addClass('off');
|
||||
}
|
||||
|
||||
let hideUnused = hideUnusedModes && hasUsedMode;
|
||||
for (let i = 0; i < AUX_CONFIG.length; i++) {
|
||||
|
@ -367,11 +415,6 @@ TABS.auxiliary.initialize = function (callback) {
|
|||
modeElement.toggle(!hideUnused);
|
||||
}
|
||||
}
|
||||
var auxChannelCount = RC.active_channels - 4;
|
||||
|
||||
for (var i = 0; i < (auxChannelCount); i++) {
|
||||
update_marker(i, RC.channels[i + 4]);
|
||||
}
|
||||
}
|
||||
|
||||
let hideUnusedModes = false;
|
||||
|
@ -391,6 +434,8 @@ TABS.auxiliary.initialize = function (callback) {
|
|||
// enable data pulling
|
||||
helper.mspBalancedInterval.add('aux_data_pull', 50, 1, get_rc_data);
|
||||
|
||||
$(".tab-auxiliary .acroEnabled").width($("#mode-0 .info").width());
|
||||
|
||||
GUI.content_ready(callback);
|
||||
}
|
||||
};
|
||||
|
@ -398,3 +443,7 @@ TABS.auxiliary.initialize = function (callback) {
|
|||
TABS.auxiliary.cleanup = function (callback) {
|
||||
if (callback) callback();
|
||||
};
|
||||
|
||||
$(window).on('resize', function(){
|
||||
$(".tab-auxiliary .acroEnabled").width($("#mode-0 .info").width());
|
||||
});
|
|
@ -114,14 +114,18 @@
|
|||
<a class="ic_center" data-role="home-center" href="#" title="move to center view"></a>
|
||||
</div>
|
||||
</td>
|
||||
<td><input type="number" class="home-lat" /></td>
|
||||
<td><input type="number" class="home-lon" /></td>
|
||||
<td><span id="elevationValueAtHome">NA</span></td>
|
||||
<td><input type="number" class="home-lat" /></td>
|
||||
<td><span id="elevationValueAtHome">N/A</span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="point" id="elevationEarthModelclass" style="display: none">
|
||||
<label class="spacer_box_title i18n-replaced" for="elevationEarthModel">Use Sea Level Earth DEM Model: </label>
|
||||
<input id="elevationEarthModel" type="checkbox" value="0" class="togglemedium" required>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="missionPlanerSafehome" class="gui_box grey" style="display: none">
|
||||
|
@ -215,7 +219,11 @@
|
|||
</div>
|
||||
<div class="point" id="elevationAtWP" style="display: none">
|
||||
<label class="point-label">Elevation (m): </label>
|
||||
<span id="elevationValueAtWP">NA</span>
|
||||
<span id="elevationValueAtWP">N/A</span>
|
||||
</div>
|
||||
<div class="point" id="groundClearanceAtWP" style="display: none">
|
||||
<label class="point-label">Grd Dist (m): </label>
|
||||
<span id="groundClearanceValueAtWP">N/A</span>
|
||||
</div>
|
||||
<div class="point" id="pointP1class" style="display: none">
|
||||
<label class="point-label" for="pointP1">Parameter 1: </label>
|
||||
|
|
|
@ -663,6 +663,11 @@ TABS.mission_control.initialize = function (callback) {
|
|||
HOME.setAlt(elevationAtHome);
|
||||
})()
|
||||
|
||||
if (globalSettings.mapProviderType == 'bing') {
|
||||
$('#elevationEarthModelclass').fadeIn(300);
|
||||
} else {
|
||||
$('#elevationEarthModelclass').fadeOut(300);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -1301,8 +1306,10 @@ TABS.mission_control.initialize = function (callback) {
|
|||
let tempWp = mission.getWaypoint(tempMarker.number);
|
||||
tempWp.setLon(Math.round(coord[0] * 10000000));
|
||||
tempWp.setLat(Math.round(coord[1] * 10000000));
|
||||
$('#pointLon').val(Math.round(coord[0] * 10000000) / 10000000);
|
||||
$('#pointLat').val(Math.round(coord[1] * 10000000) / 10000000);
|
||||
if (selectedMarker != null && tempMarker.number == selectedMarker.getLayerNumber()) {
|
||||
$('#pointLon').val(Math.round(coord[0] * 10000000) / 10000000);
|
||||
$('#pointLat').val(Math.round(coord[1] * 10000000) / 10000000);
|
||||
}
|
||||
mission.updateWaypoint(tempWp);
|
||||
repaintLine4Waypoints(mission);
|
||||
}
|
||||
|
@ -1351,14 +1358,16 @@ TABS.mission_control.initialize = function (callback) {
|
|||
* @return {boolean} `false` to stop the drag sequence.
|
||||
*/
|
||||
app.Drag.prototype.handleUpEvent = function (evt) {
|
||||
if (tempMarker.kind == "waypoint" ){
|
||||
if ( tempMarker.kind == "waypoint" ) {
|
||||
if (selectedMarker != null && tempMarker.number == selectedMarker.getLayerNumber()) {
|
||||
(async () => {
|
||||
if (mission.getWaypoint(tempMarker.number).getP3() == 1.0) {
|
||||
const elevationAtWP = await mission.getWaypoint(tempMarker.number).getElevation(globalSettings);
|
||||
$('#elevationValueAtWP').text(elevationAtWP);
|
||||
}
|
||||
const elevationAtWP = await mission.getWaypoint(tempMarker.number).getElevation(globalSettings);
|
||||
$('#elevationValueAtWP').text(elevationAtWP);
|
||||
const returnAltitude = checkAltElevSanity(false, mission.getWaypoint(tempMarker.number).getAlt(), elevationAtWP, mission.getWaypoint(tempMarker.number).getP3());
|
||||
mission.getWaypoint(tempMarker.number).setAlt(returnAltitude);
|
||||
plotElevation();
|
||||
})()
|
||||
}
|
||||
}
|
||||
else if (tempMarker.kind == "home" ) {
|
||||
(async () => {
|
||||
|
@ -1459,7 +1468,9 @@ TABS.mission_control.initialize = function (callback) {
|
|||
// Map on-click behavior definition
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
map.on('click', function (evt) {
|
||||
var tempSelectedMarkerIndex = null;
|
||||
if (selectedMarker != null && selectedFeature != null) {
|
||||
tempSelectedMarkerIndex = selectedMarker.getLayerNumber();
|
||||
try {
|
||||
selectedFeature.setStyle(getWaypointIcon(selectedMarker, false));
|
||||
selectedMarker = null;
|
||||
|
@ -1488,6 +1499,23 @@ TABS.mission_control.initialize = function (callback) {
|
|||
|
||||
var altitudeMeters = app.ConvertCentimetersToMeters(selectedMarker.getAlt());
|
||||
|
||||
if (globalSettings.mapProviderType == 'bing') {
|
||||
$('#elevationAtWP').fadeIn();
|
||||
$('#groundClearanceAtWP').fadeIn();
|
||||
if (tempSelectedMarkerIndex == null || tempSelectedMarkerIndex != selectedMarker.getLayerNumber()) {
|
||||
(async () => {
|
||||
const elevationAtWP = await selectedMarker.getElevation(globalSettings);
|
||||
$('#elevationValueAtWP').text(elevationAtWP);
|
||||
const returnAltitude = checkAltElevSanity(false, selectedMarker.getAlt(), elevationAtWP, selectedMarker.getP3());
|
||||
selectedMarker.setAlt(returnAltitude);
|
||||
plotElevation();
|
||||
})()
|
||||
}
|
||||
} else {
|
||||
$('#elevationAtWP').fadeOut();
|
||||
$('#groundClearanceAtWP').fadeOut();
|
||||
}
|
||||
|
||||
$('#altitudeInMeters').text(` ${altitudeMeters}m`);
|
||||
$('#pointLon').val(Math.round(coord[0] * 10000000) / 10000000);
|
||||
$('#pointLat').val(Math.round(coord[1] * 10000000) / 10000000);
|
||||
|
@ -1515,10 +1543,24 @@ TABS.mission_control.initialize = function (callback) {
|
|||
else if (selectedFeature && tempMarker.kind == "line" && tempMarker.selection) {
|
||||
let tempWpCoord = ol.proj.toLonLat(evt.coordinate);
|
||||
let tempWp = new Waypoint(tempMarker.number, MWNP.WPTYPE.WAYPOINT, Math.round(tempWpCoord[1] * 10000000), Math.round(tempWpCoord[0] * 10000000), alt=Number(settings.alt), p1=Number(settings.speed));
|
||||
mission.insertWaypoint(tempWp, tempMarker.number);
|
||||
mission.update();
|
||||
cleanLayers();
|
||||
redrawLayers();
|
||||
if (homeMarkers.length && HOME.getAlt() != "N/A") {
|
||||
(async () => {
|
||||
const elevationAtWP = await tempWp.getElevation(globalSettings);
|
||||
tempWp.setAlt(checkAltElevSanity(false, settings.alt, elevationAtWP, 0));
|
||||
|
||||
mission.insertWaypoint(tempWp, tempMarker.number);
|
||||
mission.update();
|
||||
cleanLayers();
|
||||
redrawLayers();
|
||||
plotElevation();
|
||||
})()
|
||||
} else {
|
||||
mission.insertWaypoint(tempWp, tempMarker.number);
|
||||
mission.update();
|
||||
cleanLayers();
|
||||
redrawLayers();
|
||||
plotElevation();
|
||||
}
|
||||
}
|
||||
else if (selectedFeature && tempMarker.kind == "safehome" && tempMarker.selection) {
|
||||
selectedMarker = SAFEHOMES.getSafehome(tempMarker.number);
|
||||
|
@ -1538,11 +1580,24 @@ TABS.mission_control.initialize = function (callback) {
|
|||
else {
|
||||
let tempWpCoord = ol.proj.toLonLat(evt.coordinate);
|
||||
let tempWp = new Waypoint(mission.get().length, MWNP.WPTYPE.WAYPOINT, Math.round(tempWpCoord[1] * 10000000), Math.round(tempWpCoord[0] * 10000000), alt=Number(settings.alt), p1=Number(settings.speed));
|
||||
mission.put(tempWp);
|
||||
mission.update();
|
||||
cleanLayers();
|
||||
redrawLayers();
|
||||
plotElevation();
|
||||
if (homeMarkers.length && HOME.getAlt() != "N/A") {
|
||||
(async () => {
|
||||
const elevationAtWP = await tempWp.getElevation(globalSettings);
|
||||
tempWp.setAlt(checkAltElevSanity(false, settings.alt, elevationAtWP, 0));
|
||||
|
||||
mission.put(tempWp);
|
||||
mission.update();
|
||||
cleanLayers();
|
||||
redrawLayers();
|
||||
plotElevation();
|
||||
})()
|
||||
} else {
|
||||
mission.put(tempWp);
|
||||
mission.update();
|
||||
cleanLayers();
|
||||
redrawLayers();
|
||||
plotElevation();
|
||||
}
|
||||
}
|
||||
//mission.missionDisplayDebug();
|
||||
});
|
||||
|
@ -1656,7 +1711,6 @@ TABS.mission_control.initialize = function (callback) {
|
|||
if ([MWNP.WPTYPE.SET_POI,MWNP.WPTYPE.POSHOLD_TIME,MWNP.WPTYPE.LAND].includes(selectedMarker.getAction())) {
|
||||
selectedMarker.setP1(0.0);
|
||||
selectedMarker.setP2(0.0);
|
||||
selectedMarker.setP3(0.0);
|
||||
}
|
||||
for (var j in dictOfLabelParameterPoint[selectedMarker.getAction()]) {
|
||||
if (dictOfLabelParameterPoint[selectedMarker.getAction()][j] != '') {
|
||||
|
@ -1699,7 +1753,9 @@ TABS.mission_control.initialize = function (callback) {
|
|||
|
||||
$('#pointAlt').on('change', function (event) {
|
||||
if (selectedMarker) {
|
||||
selectedMarker.setAlt(Number($('#pointAlt').val()));
|
||||
const elevationAtWP = Number($('#elevationValueAtWP').text());
|
||||
const returnAltitude = checkAltElevSanity(true, Number($('#pointAlt').val()), elevationAtWP, selectedMarker.getP3());
|
||||
selectedMarker.setAlt(returnAltitude);
|
||||
mission.updateWaypoint(selectedMarker);
|
||||
mission.update();
|
||||
redrawLayer();
|
||||
|
@ -1727,22 +1783,35 @@ TABS.mission_control.initialize = function (callback) {
|
|||
|
||||
$('#pointP3').on('change', function (event) {
|
||||
if (selectedMarker) {
|
||||
const P3Value = selectedMarker.getP3();
|
||||
selectedMarker.setP3( $('#pointP3').prop("checked") ? 1.0 : 0.0);
|
||||
if ($('#pointP3').prop("checked")) {
|
||||
if (globalSettings.mapProviderType == 'bing') {
|
||||
(async () => {
|
||||
const elevationAtWP = await selectedMarker.getElevation(globalSettings);
|
||||
$('#elevationValueAtWP').text(elevationAtWP);
|
||||
$('#elevationAtWP').fadeIn(300);
|
||||
})()
|
||||
var altitude = Number($('#pointAlt').val());
|
||||
if (P3Value != selectedMarker.getP3()) {
|
||||
if ($('#pointP3').prop("checked")) {
|
||||
if (altitude < 0) {
|
||||
altitude = settings.alt;
|
||||
}
|
||||
selectedMarker.setAlt(altitude + elevationAtWP * 100);
|
||||
} else {
|
||||
selectedMarker.setAlt(altitude - Number(elevationAtWP) * 100);
|
||||
}
|
||||
}
|
||||
const returnAltitude = checkAltElevSanity(false, selectedMarker.getAlt(), elevationAtWP, selectedMarker.getP3());
|
||||
selectedMarker.setAlt(returnAltitude);
|
||||
$('#pointAlt').val(selectedMarker.getAlt());
|
||||
altitudeMeters = app.ConvertCentimetersToMeters(selectedMarker.getAlt());
|
||||
$('#altitudeInMeters').text(` ${altitudeMeters}m`);
|
||||
|
||||
mission.updateWaypoint(selectedMarker);
|
||||
mission.update();
|
||||
redrawLayer();
|
||||
plotElevation();
|
||||
})()
|
||||
}
|
||||
else {
|
||||
$('#elevationAtWP').fadeOut(300);
|
||||
}
|
||||
mission.updateWaypoint(selectedMarker);
|
||||
mission.update();
|
||||
redrawLayer();
|
||||
plotElevation();
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -1834,6 +1903,28 @@ TABS.mission_control.initialize = function (callback) {
|
|||
closeHomePanel();
|
||||
});
|
||||
|
||||
$('#elevationEarthModel').on('change', function (event) {
|
||||
if (globalSettings.mapProviderType == 'bing') {
|
||||
(async () => {
|
||||
const elevationAtHome = await HOME.getElevation(globalSettings);
|
||||
$('#elevationValueAtHome').text(elevationAtHome+' m');
|
||||
HOME.setAlt(elevationAtHome);
|
||||
|
||||
if (selectedMarker) {
|
||||
const elevationAtWP = await selectedMarker.getElevation(globalSettings);
|
||||
$('#elevationValueAtWP').text(elevationAtWP);
|
||||
const returnAltitude = checkAltElevSanity(false, selectedMarker.getAlt(), elevationAtWP, selectedMarker.getP3());
|
||||
selectedMarker.setAlt(returnAltitude);
|
||||
mission.updateWaypoint(selectedMarker);
|
||||
}
|
||||
|
||||
mission.update();
|
||||
redrawLayer();
|
||||
plotElevation();
|
||||
})()
|
||||
}
|
||||
});
|
||||
|
||||
/////////////////////////////////////////////
|
||||
// Callback for Remove buttons
|
||||
/////////////////////////////////////////////
|
||||
|
@ -2189,6 +2280,46 @@ TABS.mission_control.initialize = function (callback) {
|
|||
}
|
||||
}
|
||||
|
||||
/* resetAltitude = true : For selected WPs only. Changes WP Altitude value back to previous value if setting below ground level.
|
||||
^ resetAltitude = false : changes WP Altitude to value required to give ground clearance = default Altitude setting */
|
||||
function checkAltElevSanity(resetAltitude, checkAltitude, elevation, P3Datum) {
|
||||
if (globalSettings.mapProviderType != 'bing') {
|
||||
return checkAltitude;
|
||||
}
|
||||
|
||||
let groundClearance = "NO HOME";
|
||||
let altitude = checkAltitude;
|
||||
if (P3Datum) {
|
||||
if (checkAltitude < 100 * elevation) {
|
||||
if (resetAltitude) {
|
||||
alert(chrome.i18n.getMessage('MissionPlannerAltitudeChangeReset'));
|
||||
altitude = selectedMarker.getAlt();
|
||||
} else {
|
||||
altitude = settings.alt + 100 * elevation;
|
||||
}
|
||||
}
|
||||
groundClearance = altitude / 100 - elevation;
|
||||
} else if (homeMarkers.length && HOME.getAlt() != "N/A") {
|
||||
let elevationAtHome = HOME.getAlt();
|
||||
if ((checkAltitude / 100 + elevationAtHome) < elevation) {
|
||||
if (resetAltitude) {
|
||||
alert(chrome.i18n.getMessage('MissionPlannerAltitudeChangeReset'));
|
||||
altitude = selectedMarker.getAlt();
|
||||
} else {
|
||||
altitude = settings.alt + 100 * (elevation - elevationAtHome);
|
||||
}
|
||||
}
|
||||
groundClearance = altitude / 100 + (elevationAtHome - elevation);
|
||||
}
|
||||
$('#pointAlt').val(altitude);
|
||||
let altitudeMeters = parseInt(altitude) / 100;
|
||||
$('#altitudeInMeters').text(` ${altitudeMeters}m`);
|
||||
document.getElementById('groundClearanceAtWP').style.color = groundClearance < (settings.alt / 100) ? "#FF0000" : "#303030";
|
||||
$('#groundClearanceValueAtWP').text(` ${groundClearance}`);
|
||||
|
||||
return altitude;
|
||||
}
|
||||
|
||||
function plotElevation() {
|
||||
if ($('#missionPlanerElevation').is(":visible")) {
|
||||
if (mission.get().length == 0) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue