Skip to content

Commit feba353

Browse files
authored
Merge pull request #1722 from iNavFlight/MrD_Fix-alt-type-in-mission-planner
Mission Control: Bug fixes related to P3 field
2 parents c352efd + 4ede134 commit feba353

2 files changed

Lines changed: 41 additions & 37 deletions

File tree

js/waypointCollection.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -360,7 +360,8 @@ let WaypointCollection = function () {
360360
}
361361
altPoint2measure.push(self.getWaypoint(nStart).getAlt());
362362
namePoint2measure.push(self.getWaypoint(nStart).getLayerNumber()+1);
363-
refPoint2measure.push(self.getWaypoint(nStart).getP3());
363+
let useAbsoluteAlt = (self.getWaypoint(nStart).getP3() & (1 << 0));
364+
refPoint2measure.push(useAbsoluteAlt);
364365
nStart++;
365366
}
366367
else if (self.getWaypoint(nStart).getAction() == MWNP.WPTYPE.JUMP) {

tabs/mission_control.js

Lines changed: 39 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,14 @@ MWNP.WPTYPE = {
2222
LAND: 8
2323
};
2424

25+
MWNP.P3 = {
26+
ALT_TYPE: 0, // Altitude (alt) : Relative (to home altitude) (0) or Absolute (AMSL) (1).
27+
USER_ACTION_1: 1, // WP Action 1
28+
USER_ACTION_2: 2, // WP Action 2
29+
USER_ACTION_3: 3, // WP Action 3
30+
USER_ACTION_4: 4, // WP Action 4
31+
}
32+
2533
// Reverse WayPoint type dictionary
2634
function swap(dict) {
2735
let rev_dict = {};
@@ -46,7 +54,6 @@ var dictOfLabelParameterPoint = {
4654
};
4755

4856
var waypointOptions = ['JUMP','SET_HEAD','RTH'];
49-
var initParam3 = 0;
5057

5158
////////////////////////////////////
5259
//
@@ -1809,13 +1816,21 @@ TABS.mission_control.initialize = function (callback) {
18091816

18101817
selectedFeature.setStyle(getWaypointIcon(selectedMarker, true));
18111818

1819+
let P3Value = selectedMarker.getP3();
1820+
1821+
changeSwitchery($('#pointP3Alt'), TABS.mission_control.isBitSet(P3Value, MWNP.P3.ALT_TYPE));
1822+
changeSwitchery($('#pointP3UserAction1'), TABS.mission_control.isBitSet(P3Value, MWNP.P3.USER_ACTION_1));
1823+
changeSwitchery($('#pointP3UserAction2'), TABS.mission_control.isBitSet(P3Value, MWNP.P3.USER_ACTION_2));
1824+
changeSwitchery($('#pointP3UserAction3'), TABS.mission_control.isBitSet(P3Value, MWNP.P3.USER_ACTION_3));
1825+
changeSwitchery($('#pointP3UserAction4'), TABS.mission_control.isBitSet(P3Value, MWNP.P3.USER_ACTION_4));
1826+
18121827
var altitudeMeters = app.ConvertCentimetersToMeters(selectedMarker.getAlt());
18131828

18141829
if (tempSelectedMarkerIndex == null || tempSelectedMarkerIndex != selectedMarker.getLayerNumber()) {
18151830
(async () => {
18161831
const elevationAtWP = await selectedMarker.getElevation(globalSettings);
18171832
$('#elevationValueAtWP').text(elevationAtWP);
1818-
const returnAltitude = checkAltElevSanity(false, selectedMarker.getAlt(), elevationAtWP, selectedMarker.getP3());
1833+
const returnAltitude = checkAltElevSanity(false, selectedMarker.getAlt(), elevationAtWP, P3Value);
18191834
selectedMarker.setAlt(returnAltitude);
18201835
plotElevation();
18211836
})()
@@ -1832,15 +1847,6 @@ TABS.mission_control.initialize = function (callback) {
18321847
$('#pointP1').val(selectedMarker.getP1());
18331848
$('#pointP2').val(selectedMarker.getP2());
18341849

1835-
let P3Value = selectedMarker.getP3();
1836-
initParam3 = 0; // Reset init bits for P3 before setting up checkboxes
1837-
1838-
changeSwitchery($('#pointP3Alt'), TABS.mission_control.isBitSet(P3Value, 0));
1839-
changeSwitchery($('#pointP3UserAction1'), TABS.mission_control.isBitSet(P3Value, 1));
1840-
changeSwitchery($('#pointP3UserAction2'), TABS.mission_control.isBitSet(P3Value, 2));
1841-
changeSwitchery($('#pointP3UserAction3'), TABS.mission_control.isBitSet(P3Value, 3));
1842-
changeSwitchery($('#pointP3UserAction4'), TABS.mission_control.isBitSet(P3Value, 4));
1843-
initParam3 = 31; // Set all bits for above P3 params to true, after setting checkboxes
18441850

18451851
// Selection box update depending on choice of type of waypoint
18461852
for (var j in dictOfLabelParameterPoint[selectedMarker.getAction()]) {
@@ -1862,7 +1868,7 @@ TABS.mission_control.initialize = function (callback) {
18621868
if (homeMarkers.length && HOME.getAlt() != "N/A") {
18631869
(async () => {
18641870
const elevationAtWP = await tempWp.getElevation(globalSettings);
1865-
tempWp.setAlt(checkAltElevSanity(false, settings.alt, elevationAtWP, 0));
1871+
tempWp.setAlt(checkAltElevSanity(false, settings.alt, elevationAtWP, false));
18661872

18671873
mission.insertWaypoint(tempWp, tempMarker.number);
18681874
mission.update(singleMissionActive());
@@ -1897,7 +1903,7 @@ TABS.mission_control.initialize = function (callback) {
18971903
if (homeMarkers.length && HOME.getAlt() != "N/A") {
18981904
(async () => {
18991905
const elevationAtWP = await tempWp.getElevation(globalSettings);
1900-
tempWp.setAlt(checkAltElevSanity(false, settings.alt, elevationAtWP, 0));
1906+
tempWp.setAlt(checkAltElevSanity(false, settings.alt, elevationAtWP, false));
19011907

19021908
mission.put(tempWp);
19031909
mission.update(singleMissionActive());
@@ -2110,19 +2116,17 @@ TABS.mission_control.initialize = function (callback) {
21102116
P3Value = selectedMarker.getP3();
21112117

21122118
if (disableMarkerEdit) {
2113-
changeSwitchery($('#pointP3Alt'), TABS.mission_control.isBitSet(P3Value, 0));
2119+
changeSwitchery($('#pointP3Alt'), TABS.mission_control.isBitSet(P3Value, MWNP.P3.ALT_TYPE));
21142120
}
21152121

2116-
P3Value = TABS.mission_control.setBit(P3Value, 0, $('#pointP3Alt').prop("checked"));
2117-
selectedMarker.setP3(P3Value);
2118-
2119-
P3Value = TABS.mission_control.setBit(P3Value, 0, $('#pointP3Alt').prop("checked"));
2120-
selectedMarker.setP3(P3Value);
2122+
P3Value = TABS.mission_control.setBit(P3Value, MWNP.P3.ALT_TYPE, $('#pointP3Alt').prop("checked"));
21212123
(async () => {
21222124
const elevationAtWP = await selectedMarker.getElevation(globalSettings);
21232125
$('#elevationValueAtWP').text(elevationAtWP);
21242126
var altitude = Number($('#pointAlt').val());
21252127
if (P3Value != selectedMarker.getP3()) {
2128+
selectedMarker.setP3(P3Value);
2129+
21262130
if ($('#pointP3Alt').prop("checked")) {
21272131
if (altitude < 0) {
21282132
altitude = settings.alt;
@@ -2149,10 +2153,10 @@ TABS.mission_control.initialize = function (callback) {
21492153
$('#pointP3UserAction1').on('change', function(event){
21502154
if (selectedMarker) {
21512155
if (disableMarkerEdit) {
2152-
changeSwitchery($('#pointP3UserAction1'), TABS.mission_control.isBitSet(selectedMarker.getP3(), 1));
2156+
changeSwitchery($('#pointP3UserAction1'), TABS.mission_control.isBitSet(selectedMarker.getP3(), MWNP.P3.USER_ACTION_1));
21532157
}
21542158

2155-
P3Value = TABS.mission_control.setBit(selectedMarker.getP3(), 1, $('#pointP3UserAction1').prop("checked"));
2159+
P3Value = TABS.mission_control.setBit(selectedMarker.getP3(), MWNP.P3.USER_ACTION_1, $('#pointP3UserAction1').prop("checked"));
21562160
selectedMarker.setP3(P3Value);
21572161

21582162
mission.updateWaypoint(selectedMarker);
@@ -2164,10 +2168,10 @@ TABS.mission_control.initialize = function (callback) {
21642168
$('#pointP3UserAction2').on('change', function(event){
21652169
if (selectedMarker) {
21662170
if (disableMarkerEdit) {
2167-
changeSwitchery($('#pointP3UserAction2'), TABS.mission_control.isBitSet(selectedMarker.getP3(), 2));
2171+
changeSwitchery($('#pointP3UserAction2'), TABS.mission_control.isBitSet(selectedMarker.getP3(), MWNP.P3.USER_ACTION_2));
21682172
}
21692173

2170-
P3Value = TABS.mission_control.setBit(selectedMarker.getP3(), 2, $('#pointP3UserAction2').prop("checked"));
2174+
P3Value = TABS.mission_control.setBit(selectedMarker.getP3(), MWNP.P3.USER_ACTION_2, $('#pointP3UserAction2').prop("checked"));
21712175
selectedMarker.setP3(P3Value);
21722176

21732177
mission.updateWaypoint(selectedMarker);
@@ -2179,10 +2183,10 @@ TABS.mission_control.initialize = function (callback) {
21792183
$('#pointP3UserAction3').on('change', function(event){
21802184
if (selectedMarker) {
21812185
if (disableMarkerEdit) {
2182-
changeSwitchery($('#pointP3UserAction3'), TABS.mission_control.isBitSet(selectedMarker.getP3(), 3));
2186+
changeSwitchery($('#pointP3UserAction3'), TABS.mission_control.isBitSet(selectedMarker.getP3(), MWNP.P3.USER_ACTION_3));
21832187
}
21842188

2185-
P3Value = TABS.mission_control.setBit(selectedMarker.getP3(), 3, $('#pointP3UserAction3').prop("checked"));
2189+
P3Value = TABS.mission_control.setBit(selectedMarker.getP3(), MWNP.P3.USER_ACTION_3, $('#pointP3UserAction3').prop("checked"));
21862190
selectedMarker.setP3(P3Value);
21872191

21882192
mission.updateWaypoint(selectedMarker);
@@ -2194,10 +2198,10 @@ TABS.mission_control.initialize = function (callback) {
21942198
$('#pointP3UserAction4').on('change', function(event){
21952199
if (selectedMarker) {
21962200
if (disableMarkerEdit) {
2197-
changeSwitchery($('#pointP3UserAction4'), TABS.mission_control.isBitSet(selectedMarker.getP3(), 4));
2201+
changeSwitchery($('#pointP3UserAction4'), TABS.mission_control.isBitSet(selectedMarker.getP3(), MWNP.P3.USER_ACTION_4));
21982202
}
21992203

2200-
P3Value = TABS.mission_control.setBit(selectedMarker.getP3(), 4, $('#pointP3UserAction4').prop("checked"));
2204+
P3Value = TABS.mission_control.setBit(selectedMarker.getP3(), MWNP.P3.USER_ACTION_4, $('#pointP3UserAction4').prop("checked"));
22012205
selectedMarker.setP3(P3Value);
22022206

22032207
mission.updateWaypoint(selectedMarker);
@@ -2410,7 +2414,7 @@ TABS.mission_control.initialize = function (callback) {
24102414

24112415
if (markers.length && !confirm(chrome.i18n.getMessage('confirm_delete_all_points'))) return;
24122416
nwdialog.setContext(document);
2413-
nwdialog.openFileDialog(function(result) {
2417+
nwdialog.openFileDialog('.mission', function(result) {
24142418
loadMissionFile(result);
24152419
})
24162420
});
@@ -2805,11 +2809,14 @@ TABS.mission_control.initialize = function (callback) {
28052809
}
28062810

28072811
/* resetAltitude = true : For selected WPs only. Changes WP Altitude value back to previous value if setting below ground level.
2808-
^ resetAltitude = false : changes WP Altitude to value required to give ground clearance = default Altitude setting */
2809-
function checkAltElevSanity(resetAltitude, checkAltitude, elevation, P3Datum) {
2812+
^ resetAltitude = false : changes WP Altitude to value required to give ground clearance = default Altitude setting
2813+
^ AbsAltCheck : check value for whether or not to use absolute altitude. This can be the P3 bitset or excplicitly set to true or false */
2814+
function checkAltElevSanity(resetAltitude, checkAltitude, elevation, AbsAltCheck) {
28102815
let groundClearance = "NO HOME";
28112816
let altitude = checkAltitude;
2812-
if (P3Datum) {
2817+
AbsAltCheck = (typeof AbsAltCheck == "boolean") ? AbsAltCheck : TABS.mission_control.isBitSet(AbsAltCheck, MWNP.P3.ALT_TYPE);
2818+
2819+
if (AbsAltCheck) {
28132820
if (checkAltitude < 100 * elevation) {
28142821
if (resetAltitude) {
28152822
alert(chrome.i18n.getMessage('MissionPlannerAltitudeChangeReset'));
@@ -2941,11 +2948,7 @@ TABS.mission_control.isBitSet = function(bits, testBit) {
29412948
}
29422949

29432950
TABS.mission_control.setBit = function(bits, bit, value) {
2944-
if ((initParam3 & (1 << bit)) != 0) {
2945-
bits &= ~(0 << bit);
2946-
bits |= (value << bit);
2947-
}
2948-
return bits;
2951+
return value ? bits |= (1 << bit) : bits &= ~(1 << bit);
29492952
}
29502953

29512954
// window.addEventListener("error", handleError, true);

0 commit comments

Comments
 (0)