Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Mission Control: Bug fixes related to P3 field #1722

Merged
merged 7 commits into from
Feb 15, 2023
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion js/waypointCollection.js
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,8 @@ let WaypointCollection = function () {
}
altPoint2measure.push(self.getWaypoint(nStart).getAlt());
namePoint2measure.push(self.getWaypoint(nStart).getLayerNumber()+1);
refPoint2measure.push(self.getWaypoint(nStart).getP3());
let useAbsoluteAlt = (self.getWaypoint(nStart).getP3() & (1 << 0));
refPoint2measure.push(useAbsoluteAlt);
nStart++;
}
else if (self.getWaypoint(nStart).getAction() == MWNP.WPTYPE.JUMP) {
Expand Down
73 changes: 42 additions & 31 deletions tabs/mission_control.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,14 @@ MWNP.WPTYPE = {
LAND: 8
};

MWNP.P3 = {
ALT_TYPE: 0, // Altitude (alt) : Relative (to home altitude) (0) or Absolute (AMSL) (1).
USER_ACTION_1: 1, // WP Action 1
USER_ACTION_2: 2, // WP Action 2
USER_ACTION_3: 3, // WP Action 3
USER_ACTION_4: 4, // WP Action 4
}

// Reverse WayPoint type dictionary
function swap(dict) {
let rev_dict = {};
Expand Down Expand Up @@ -1809,13 +1817,23 @@ TABS.mission_control.initialize = function (callback) {

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

let P3Value = selectedMarker.getP3();
initParam3 = 0; // Reset init bits for P3 before setting up checkboxes

changeSwitchery($('#pointP3Alt'), TABS.mission_control.isBitSet(P3Value, MWNP.P3.ALT_TYPE));
changeSwitchery($('#pointP3UserAction1'), TABS.mission_control.isBitSet(P3Value, MWNP.P3.USER_ACTION_1));
changeSwitchery($('#pointP3UserAction2'), TABS.mission_control.isBitSet(P3Value, MWNP.P3.USER_ACTION_2));
changeSwitchery($('#pointP3UserAction3'), TABS.mission_control.isBitSet(P3Value, MWNP.P3.USER_ACTION_3));
changeSwitchery($('#pointP3UserAction4'), TABS.mission_control.isBitSet(P3Value, MWNP.P3.USER_ACTION_4));
initParam3 = 31; // Set all bits for above P3 params to true, after setting checkboxes

var altitudeMeters = app.ConvertCentimetersToMeters(selectedMarker.getAlt());

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());
const returnAltitude = checkAltElevSanity(false, selectedMarker.getAlt(), elevationAtWP, P3Value);
selectedMarker.setAlt(returnAltitude);
plotElevation();
})()
Expand All @@ -1832,15 +1850,6 @@ TABS.mission_control.initialize = function (callback) {
$('#pointP1').val(selectedMarker.getP1());
$('#pointP2').val(selectedMarker.getP2());

let P3Value = selectedMarker.getP3();
initParam3 = 0; // Reset init bits for P3 before setting up checkboxes

changeSwitchery($('#pointP3Alt'), TABS.mission_control.isBitSet(P3Value, 0));
changeSwitchery($('#pointP3UserAction1'), TABS.mission_control.isBitSet(P3Value, 1));
changeSwitchery($('#pointP3UserAction2'), TABS.mission_control.isBitSet(P3Value, 2));
changeSwitchery($('#pointP3UserAction3'), TABS.mission_control.isBitSet(P3Value, 3));
changeSwitchery($('#pointP3UserAction4'), TABS.mission_control.isBitSet(P3Value, 4));
initParam3 = 31; // Set all bits for above P3 params to true, after setting checkboxes

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

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

mission.put(tempWp);
mission.update(singleMissionActive());
Expand Down Expand Up @@ -2110,19 +2119,17 @@ TABS.mission_control.initialize = function (callback) {
P3Value = selectedMarker.getP3();

if (disableMarkerEdit) {
changeSwitchery($('#pointP3Alt'), TABS.mission_control.isBitSet(P3Value, 0));
changeSwitchery($('#pointP3Alt'), TABS.mission_control.isBitSet(P3Value, MWNP.P3.ALT_TYPE));
}

P3Value = TABS.mission_control.setBit(P3Value, 0, $('#pointP3Alt').prop("checked"));
selectedMarker.setP3(P3Value);

P3Value = TABS.mission_control.setBit(P3Value, 0, $('#pointP3Alt').prop("checked"));
selectedMarker.setP3(P3Value);
P3Value = TABS.mission_control.setBit(P3Value, MWNP.P3.ALT_TYPE, $('#pointP3Alt').prop("checked"));
MrD-RC marked this conversation as resolved.
Show resolved Hide resolved
(async () => {
const elevationAtWP = await selectedMarker.getElevation(globalSettings);
$('#elevationValueAtWP').text(elevationAtWP);
var altitude = Number($('#pointAlt').val());
if (P3Value != selectedMarker.getP3()) {
selectedMarker.setP3(P3Value);

if ($('#pointP3Alt').prop("checked")) {
if (altitude < 0) {
altitude = settings.alt;
Expand All @@ -2149,10 +2156,10 @@ TABS.mission_control.initialize = function (callback) {
$('#pointP3UserAction1').on('change', function(event){
if (selectedMarker) {
if (disableMarkerEdit) {
changeSwitchery($('#pointP3UserAction1'), TABS.mission_control.isBitSet(selectedMarker.getP3(), 1));
changeSwitchery($('#pointP3UserAction1'), TABS.mission_control.isBitSet(selectedMarker.getP3(), MWNP.P3.USER_ACTION_1));
}

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

mission.updateWaypoint(selectedMarker);
Expand All @@ -2164,10 +2171,10 @@ TABS.mission_control.initialize = function (callback) {
$('#pointP3UserAction2').on('change', function(event){
if (selectedMarker) {
if (disableMarkerEdit) {
changeSwitchery($('#pointP3UserAction2'), TABS.mission_control.isBitSet(selectedMarker.getP3(), 2));
changeSwitchery($('#pointP3UserAction2'), TABS.mission_control.isBitSet(selectedMarker.getP3(), MWNP.P3.USER_ACTION_2));
}

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

mission.updateWaypoint(selectedMarker);
Expand All @@ -2179,10 +2186,10 @@ TABS.mission_control.initialize = function (callback) {
$('#pointP3UserAction3').on('change', function(event){
if (selectedMarker) {
if (disableMarkerEdit) {
changeSwitchery($('#pointP3UserAction3'), TABS.mission_control.isBitSet(selectedMarker.getP3(), 3));
changeSwitchery($('#pointP3UserAction3'), TABS.mission_control.isBitSet(selectedMarker.getP3(), MWNP.P3.USER_ACTION_3));
}

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

mission.updateWaypoint(selectedMarker);
Expand All @@ -2194,10 +2201,10 @@ TABS.mission_control.initialize = function (callback) {
$('#pointP3UserAction4').on('change', function(event){
if (selectedMarker) {
if (disableMarkerEdit) {
changeSwitchery($('#pointP3UserAction4'), TABS.mission_control.isBitSet(selectedMarker.getP3(), 4));
changeSwitchery($('#pointP3UserAction4'), TABS.mission_control.isBitSet(selectedMarker.getP3(), MWNP.P3.USER_ACTION_4));
}

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

mission.updateWaypoint(selectedMarker);
Expand Down Expand Up @@ -2410,7 +2417,7 @@ TABS.mission_control.initialize = function (callback) {

if (markers.length && !confirm(chrome.i18n.getMessage('confirm_delete_all_points'))) return;
nwdialog.setContext(document);
nwdialog.openFileDialog(function(result) {
nwdialog.openFileDialog('.mission', function(result) {
loadMissionFile(result);
})
});
Expand Down Expand Up @@ -2805,11 +2812,14 @@ 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) {
^ resetAltitude = false : changes WP Altitude to value required to give ground clearance = default Altitude setting
^ AbsAltCheck : check value for whether or not to use absolute altitude. This can be the P3 bitset or excplicitly set to true or false */
function checkAltElevSanity(resetAltitude, checkAltitude, elevation, AbsAltCheck) {
let groundClearance = "NO HOME";
let altitude = checkAltitude;
if (P3Datum) {
AbsAltCheck = (typeof AbsAltCheck == "boolean") ? AbsAltCheck : TABS.mission_control.isBitSet(AbsAltCheck, MWNP.P3.ALT_TYPE);

if (AbsAltCheck) {
if (checkAltitude < 100 * elevation) {
if (resetAltitude) {
alert(chrome.i18n.getMessage('MissionPlannerAltitudeChangeReset'));
Expand Down Expand Up @@ -2942,7 +2952,8 @@ TABS.mission_control.isBitSet = function(bits, testBit) {

TABS.mission_control.setBit = function(bits, bit, value) {
if ((initParam3 & (1 << bit)) != 0) {
MrD-RC marked this conversation as resolved.
Show resolved Hide resolved
bits &= ~(0 << bit);
value = value ? 1 : 0;
bits &= ~(1 << bit);
bits |= (value << bit);
}
return bits;
Expand Down