1
0
Fork 0
mirror of https://github.com/iNavFlight/inav-configurator.git synced 2025-07-15 04:15:28 +03:00

Bug fixes, added active mission setting,

This commit is contained in:
breadoven 2021-10-26 23:21:43 +01:00
parent 7f45ec5d68
commit cc05ab4f44
5 changed files with 103 additions and 57 deletions

View file

@ -3488,6 +3488,9 @@
"missionSafehomeHead": {
"message": "Safe Home manager"
},
"missionMultiMissionHead": {
"message": "Multi Missions"
},
"missionTemplateHead": {
"message": "Mission template"
},
@ -3512,6 +3515,9 @@
"confirm_overwrite_multimission_file_load_option": {
"message": "This will over write current multi mission.\nContinue?"
},
"multimission_active_index_saved_eeprom": {
"message": "Mission active index saved"
},
"no_waypoints_to_load": {
"message": "No waypoints to load !"
},

View file

@ -3213,9 +3213,9 @@ var mspHelper = (function (gui) {
});
};
self.setSetting = function (name, value) {
self.setSetting = function (name, value, callback) {
this.encodeSetting(name, value).then(function (data) {
return MSP.promise(MSPCodes.MSPV2_SET_SETTING, data);
return MSP.promise(MSPCodes.MSPV2_SET_SETTING, data).then(callback);
});
};

View file

@ -149,7 +149,7 @@ let WaypointCollection = function () {
data = tmpData;
};
self.update = function (bMWPfile=false, bReverse=false) {
self.update = function (singleMission = true, bMWPfile=false, bReverse=false) {
let oldWPNumber = 0;
let optionIdx = 0;
let idx = 0;
@ -180,7 +180,8 @@ let WaypointCollection = function () {
optionIdx = 0;
idx++;
}
if (!(bMWPfile && bReverse)) {
if (singleMission) {
if (element.getNumber() == self.get().length - 1) {
element.setEndMission(0xA5);
}

View file

@ -91,7 +91,7 @@
<div id="missionPlannerMultiMission" class="gui_box grey" style="display: none">
<div class="gui_box_titlebar">
<div class="spacer_box_title i18n-replaced" data-i18n="missionSafehomeHead">Multi Mission Manager</div>
<div class="spacer_box_title i18n-replaced" data-i18n="missionMultiMissionHead">Multi Missions</div>
<div class="btnMenu btnMenuIcon save_btn">
<div id="showHideMultimissionButton">
<a class="ic_hide" href="#" title="Hide"></a>
@ -100,24 +100,34 @@
</div>
</div>
<div class="spacer" id="multimissionContent">
<div style="display: inline-block">
<label>Missions Info: </label>
<div class="btn btnTable btnTableIcon save_btn">
<div>
<span>Missions Info:</span>
<span id="multimissionInfo">None</span>
</div>
<div style="margin-top: 5px">
<span>Active Mission:</span>
<span id="activeNissionIndex">1</span>
<a class="ic_save disabled" id="setActiveMissionButton" href="#" title="Set Active"></a>
</div>
<hr>
<div class="btn btnTable btnTableIcon save_btn" style="display: inline-block">
<label for="multimissionOptionList">Mission Number </label>
<select name="Number" id="multimissionOptionList">
<div style="display: inline-block">
<label for="multimissionOptionList">Mission No.</label>
<select name="Number" id="multimissionOptionList" style="width: 50px">
<option value="0">ALL</option>
</select>
<a class="ic_save disabled" id="updateMultimissionButton" href="#" title="Update All" style="float: right"></a>
<div style="float: right">
<span>Update All</span>
<a class="ic_save disabled" id="updateMultimissionButton" href="#" title="Update All"></a>
</div>
<div class="btn btnTable btnTableIcon save_btn" style="padding-top: 4px; float: left">
<div style="margin-bottom: 5px; margin-top: 5px">
<label for="addMultimissionButton">Add New Mission</label>
<a class="ic_add disabled" id="addMultimissionButton" href="#" title="Add"></a>
</div>
</div>
</div>
</div>
</div>
<div id="missionPlanerHome" class="gui_box grey" style="display: none">
<div class="gui_box_titlebar">

View file

@ -767,11 +767,12 @@ TABS.mission_control.initialize = function (callback) {
$('#multimissionOptionList').append($('<option>', {value: i, text: i}));
}
updateMultimissionState();
$('#activeNissionIndex').text(1);
}
function updateMultimissionState() {
if (!mission.isEmpty() || multimissionCount) {
if (multimissionCount < maxMultimissionCount) {
if ((!multimissionCount || (multimissionCount && !mission.isEmpty())) && multimissionCount < maxMultimissionCount) {
$("#addMultimissionButton").removeClass('disabled');
} else {
$("#addMultimissionButton").addClass('disabled');
@ -781,26 +782,38 @@ TABS.mission_control.initialize = function (callback) {
if (multimissionAllWPLoaded()) {
$('#missionDistance').text('N/A');
totalmultimissionWPs = mission.get().length;
$("#updateMultimissionButton").addClass('disabled');
$("#editMission").show();
$("#updateMultimissionButton").addClass('disabled');
$("#setActiveMissionButton").addClass('disabled');
} else {
totalmultimissionWPs = multimission.get().length + mission.get().length;
$("#updateMultimissionButton").removeClass('disabled');
$("#setActiveMissionButton").removeClass('disabled');
}
$('#multimissionInfo').text(multimissionCount + ' missions (' + totalmultimissionWPs + '/' + mission.getMaxWaypoints() + ' WPs)');
document.getElementById('multimissionInfo').style.color = totalmultimissionWPs > mission.getMaxWaypoints() ? "#FF0000" : "#303030";
} else {
$('#multimissionInfo').text('No multi missions loaded');
$('#cancelMultimission').trigger('click');
$('#multimissionInfo').text('No multi missions loaded');
$("#updateMultimissionButton").addClass('disabled');
$("#setActiveMissionButton").addClass('disabled');
}
} else {
$("#addMultimissionButton").addClass('disabled');
$("#setActiveMissionButton").addClass('disabled');
}
}
function isSingleMission() {
return !multimissionCount || !multimissionAllWPLoaded();
}
function multimissionAllWPLoaded() {
return multimissionCount && Number($('#multimissionOptionList').val()) == 0;
}
function updateAllMultimission(missionDelete = false) {
// flag if new MM mission empty at update
// flag if new MM mission empty on update
let missionIsEmptyOnUpdate = mission.isEmpty() ? true : false;
/* copy active single mission into MM on update so MM contains all missions.
@ -818,12 +831,12 @@ TABS.mission_control.initialize = function (callback) {
element.setNumber(i);
i++;
});
multimission.update();
multimission.update(false);
// multimission.missionDisplayDebug();
mission.reinit();
mission.copy(multimission);
mission.update();
mission.update(false);
// mission.missionDisplayDebug();
/* Remove empty missions on update.
@ -866,7 +879,7 @@ TABS.mission_control.initialize = function (callback) {
mission.reinit();
tempMissionData = multimission.get().slice(startWPCount, endWPCount + 1); // copy selected single mission from MM
let i = 0;
tempMissionData.forEach(function (element) { // write copied mission to active map mission
tempMissionData.forEach(function (element) { // write mission copy to active map mission
mission.put(element);
mission.get()[i].setNumber(i);
i++;
@ -950,10 +963,6 @@ TABS.mission_control.initialize = function (callback) {
return false;
}
function multimissionAllWPLoaded() {
return multimissionCount && Number($('#multimissionOptionList').val()) == 0;
}
/* disable mission/WP edit when all missions displayed on map, true = edit disabled */
function setMultimissionEditControl(enabled = true) {
disableMarkerEdit = enabled;
@ -1857,13 +1866,13 @@ TABS.mission_control.initialize = function (callback) {
tempWp.setAlt(checkAltElevSanity(false, settings.alt, elevationAtWP, 0));
mission.insertWaypoint(tempWp, tempMarker.number);
mission.update();
mission.update(isSingleMission());
refreshLayers();
plotElevation();
})()
} else {
mission.insertWaypoint(tempWp, tempMarker.number);
mission.update();
mission.update(isSingleMission());
refreshLayers();
plotElevation();
}
@ -1892,13 +1901,13 @@ TABS.mission_control.initialize = function (callback) {
tempWp.setAlt(checkAltElevSanity(false, settings.alt, elevationAtWP, 0));
mission.put(tempWp);
mission.update();
mission.update(isSingleMission());
refreshLayers();
plotElevation();
})()
} else {
mission.put(tempWp);
mission.update();
mission.update(isSingleMission());
refreshLayers();
plotElevation();
}
@ -2038,7 +2047,7 @@ TABS.mission_control.initialize = function (callback) {
else {$('#pointP'+String(j).slice(-1)+'class').fadeOut(300);}
}
mission.updateWaypoint(selectedMarker);
mission.update();
mission.update(isSingleMission());
redrawLayer();
}
});
@ -2047,7 +2056,7 @@ TABS.mission_control.initialize = function (callback) {
if (selectedMarker) {
selectedMarker.setLat(Math.round(Number($('#pointLat').val()) * 10000000));
mission.updateWaypoint(selectedMarker);
mission.update();
mission.update(isSingleMission());
refreshLayers();
selectedFeature = markers[selectedMarker.getLayerNumber()].getSource().getFeatures()[0];
selectedFeature.setStyle(getWaypointIcon(selectedMarker, true));
@ -2059,7 +2068,7 @@ TABS.mission_control.initialize = function (callback) {
if (selectedMarker) {
selectedMarker.setLon(Math.round(Number($('#pointLon').val()) * 10000000));
mission.updateWaypoint(selectedMarker);
mission.update();
mission.update(isSingleMission());
refreshLayers();
selectedFeature = markers[selectedMarker.getLayerNumber()].getSource().getFeatures()[0];
selectedFeature.setStyle(getWaypointIcon(selectedMarker, true));
@ -2073,7 +2082,7 @@ TABS.mission_control.initialize = function (callback) {
const returnAltitude = checkAltElevSanity(true, Number($('#pointAlt').val()), elevationAtWP, selectedMarker.getP3());
selectedMarker.setAlt(returnAltitude);
mission.updateWaypoint(selectedMarker);
mission.update();
mission.update(isSingleMission());
redrawLayer();
plotElevation();
}
@ -2083,7 +2092,7 @@ TABS.mission_control.initialize = function (callback) {
if (selectedMarker) {
selectedMarker.setP1(Number($('#pointP1').val()));
mission.updateWaypoint(selectedMarker);
mission.update();
mission.update(isSingleMission());
redrawLayer();
}
});
@ -2092,7 +2101,7 @@ TABS.mission_control.initialize = function (callback) {
if (selectedMarker) {
selectedMarker.setP2(Number($('#pointP2').val()));
mission.updateWaypoint(selectedMarker);
mission.update();
mission.update(isSingleMission());
redrawLayer();
}
});
@ -2126,7 +2135,7 @@ TABS.mission_control.initialize = function (callback) {
$('#altitudeInMeters').text(` ${altitudeMeters}m`);
mission.updateWaypoint(selectedMarker);
mission.update();
mission.update(isSingleMission());
redrawLayer();
plotElevation();
})()
@ -2241,7 +2250,6 @@ TABS.mission_control.initialize = function (callback) {
mission.updateWaypoint(selectedMarker);
}
mission.update();
redrawLayer();
plotElevation();
})()
@ -2255,23 +2263,28 @@ TABS.mission_control.initialize = function (callback) {
if (multimissionAllWPLoaded()) {
updateAllMultimission();
$("#updateMultimissionButton").addClass('disabled');
setMultimissionEditControl(multimissionCount ? true : false);
updateMultimissionState();
return;
} else {
// only update all missions when a single mission is loaded on map
var missions = 0;
// updateAllMultimission when a single mission is loaded on map
// or new mission is empty.
if (mission.isEmpty()) {
updateAllMultimission();
setMultimissionEditControl(true);
return;
}
let missions = 0;
mission.get().forEach(function (element) {
missions += element.getEndMission() == 0xA5 ? 1 : 0;
});
if (missions == 1) updateAllMultimission();
$("#updateMultimissionButton").removeClass('disabled');
setMultimissionEditControl(false);
}
editMultimission();
updateMultimissionState();
});
$('#addMultimissionButton').on('click', function () {
@ -2286,6 +2299,10 @@ TABS.mission_control.initialize = function (callback) {
$('#missionPlannerMultiMission').fadeOut(300);
});
$('#setActiveMissionButton').on('click', function () {
$('#activeNissionIndex').text(Number($('#multimissionOptionList').val()));
});
/////////////////////////////////////////////
// Callback for Remove buttons
/////////////////////////////////////////////
@ -2309,11 +2326,11 @@ TABS.mission_control.initialize = function (callback) {
if (confirm(chrome.i18n.getMessage('confirm_delete_point_with_options'))) {
mission.getAttachedFromWaypoint(selectedMarker).forEach(function (element) {
mission.dropWaypoint(element);
mission.update();
mission.update(isSingleMission());
});
mission.dropWaypoint(selectedMarker);
selectedMarker = null;
mission.update();
mission.update(isSingleMission());
clearEditForm();
refreshLayers();
plotElevation();
@ -2322,7 +2339,7 @@ TABS.mission_control.initialize = function (callback) {
else {
mission.dropWaypoint(selectedMarker);
selectedMarker = null;
mission.update();
mission.update(isSingleMission());
clearEditForm();
refreshLayers();
plotElevation();
@ -2413,7 +2430,6 @@ TABS.mission_control.initialize = function (callback) {
}
/////////////////////////////////////////////
//
// Load/Save MWP File Toolbox
@ -2517,14 +2533,14 @@ TABS.mission_control.initialize = function (callback) {
}
}
}
// update Attached Waypoints (i.e non Map Markers)
mission.update(true);
if (missionEndFlagCount > 1) {
if (multimissionCount && !confirm(chrome.i18n.getMessage('confirm_multimission_file_load'))) {
mission.flush();
return;
} else {
// update Attached Waypoints (i.e non Map Markers)
mission.update(false, true);
multimissionCount = missionEndFlagCount;
multimission.reinit();
multimission.copy(mission);
@ -2532,6 +2548,10 @@ TABS.mission_control.initialize = function (callback) {
$('#missionPlannerMultiMission').fadeIn(300);
setMultimissionEditControl(true);
}
} else {
// update Attached Waypoints (i.e non Map Markers)
mission.update(true, true);
setMultimissionEditControl(false);
}
updateMultimissionState();
@ -2633,8 +2653,9 @@ TABS.mission_control.initialize = function (callback) {
}
mission.reinit();
mission.copy(MISSION_PLANER);
mission.update(true);
mission.update(false, true);
setMultimissionEditControl(false);
multimissionCount = 0;
let missionEndFlagCount = 0;
mission.get().forEach(function (element) {
@ -2662,13 +2683,13 @@ TABS.mission_control.initialize = function (callback) {
function sendWaypointsToFC(saveEeprom) {
MISSION_PLANER.reinit();
MISSION_PLANER.copy(mission);
MISSION_PLANER.update(true, true);
MISSION_PLANER.update(false, true, true);
mspHelper.saveWaypoints(function() {
GUI.log('End send point');
if (saveEeprom) {
$('#saveEepromMissionButton').removeClass('disabled');
GUI.log(chrome.i18n.getMessage('eeprom_saved_ok'));
MSP.send_message(MSPCodes.MSP_WP_MISSION_SAVE, [0], false);
MSP.send_message(MSPCodes.MSP_WP_MISSION_SAVE, [0], false, setMissionIndex);
} else {
$('#saveMissionButton').removeClass('disabled');
}
@ -2678,10 +2699,18 @@ TABS.mission_control.initialize = function (callback) {
updateTotalInfo();
mission.reinit();
mission.copy(MISSION_PLANER);
mission.update(true);
mission.update(false, true);
refreshLayers();
$('#MPeditPoint').fadeOut(300);
});
function setMissionIndex() {
let activeIndex = multimissionAllWPLoaded() ? $('#activeNissionIndex').text() : 1;
mspHelper.setSetting("nav_wp_multi_mission_index", activeIndex, function () {
MSP.send_message(MSPCodes.MSP_EEPROM_WRITE, false, false, function () {
GUI.log(chrome.i18n.getMessage('multimission_active_index_saved_eeprom'));
});
});
}
}
function updateTotalInfo() {