mirror of
https://github.com/iNavFlight/inav-configurator.git
synced 2025-07-25 01:05:12 +03:00
Code Review
Correction on indentation + Mission validation
This commit is contained in:
parent
9745aee718
commit
d3a48e0f56
8 changed files with 824 additions and 696 deletions
219
images/icons/cf_icon_MP_save2file.svg
Normal file
219
images/icons/cf_icon_MP_save2file.svg
Normal file
|
@ -0,0 +1,219 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="32"
|
||||||
|
height="32"
|
||||||
|
viewBox="0 0 8.4666667 8.4666667"
|
||||||
|
version="1.1"
|
||||||
|
id="svg8"
|
||||||
|
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
|
||||||
|
sodipodi:docname="cf_icon_MP_save2file.svg">
|
||||||
|
<defs
|
||||||
|
id="defs2">
|
||||||
|
<filter
|
||||||
|
inkscape:collect="always"
|
||||||
|
style="color-interpolation-filters:sRGB"
|
||||||
|
id="filter920"
|
||||||
|
x="-1.3837457e-05"
|
||||||
|
width="1.0000277"
|
||||||
|
y="-1.3373132e-05"
|
||||||
|
height="1.0000267">
|
||||||
|
<feGaussianBlur
|
||||||
|
inkscape:collect="always"
|
||||||
|
stdDeviation="1.3311481e-05"
|
||||||
|
id="feGaussianBlur922" />
|
||||||
|
</filter>
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="25.455844"
|
||||||
|
inkscape:cx="17.94419"
|
||||||
|
inkscape:cy="15.357511"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
inkscape:current-layer="layer2"
|
||||||
|
inkscape:document-rotation="0"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
inkscape:window-width="1368"
|
||||||
|
inkscape:window-height="850"
|
||||||
|
inkscape:window-x="-6"
|
||||||
|
inkscape:window-y="-6"
|
||||||
|
inkscape:window-maximized="1" />
|
||||||
|
<metadata
|
||||||
|
id="metadata5">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer2"
|
||||||
|
inkscape:label="Calque 2">
|
||||||
|
<rect
|
||||||
|
style="opacity:0.994175;fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:3.175;stroke-linecap:round;stroke-linejoin:round;stroke-dashoffset:100"
|
||||||
|
id="rect836"
|
||||||
|
width="8.8929396"
|
||||||
|
height="8.7165508"
|
||||||
|
x="0.029398149"
|
||||||
|
y="0.014699074" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
inkscape:label="Calque 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
style="display:inline">
|
||||||
|
<rect
|
||||||
|
style="opacity:0.994175;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:3.175;stroke-linecap:round;stroke-linejoin:round;stroke-dashoffset:100"
|
||||||
|
id="rect838"
|
||||||
|
width="3.1896987"
|
||||||
|
height="4.2627311"
|
||||||
|
x="2.8810186"
|
||||||
|
y="2.2416089"
|
||||||
|
ry="0.14699078" />
|
||||||
|
<rect
|
||||||
|
style="opacity:0.994175;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:3.175;stroke-linecap:round;stroke-linejoin:round;stroke-dashoffset:100"
|
||||||
|
id="rect840"
|
||||||
|
width="0.10289352"
|
||||||
|
height="0.1175926"
|
||||||
|
x="4.2774305"
|
||||||
|
y="4.2333331"
|
||||||
|
ry="0.051446758" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer3"
|
||||||
|
inkscape:label="coin"
|
||||||
|
style="display:inline;opacity:0.980775;filter:url(#filter920)">
|
||||||
|
<path
|
||||||
|
sodipodi:type="star"
|
||||||
|
style="opacity:0.994175;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:100;stroke-opacity:1"
|
||||||
|
id="path851"
|
||||||
|
sodipodi:sides="3"
|
||||||
|
sodipodi:cx="5.5856476"
|
||||||
|
sodipodi:cy="2.6752317"
|
||||||
|
sodipodi:r1="1.4524583"
|
||||||
|
sodipodi:r2="0.48779002"
|
||||||
|
sodipodi:arg1="2.1981044"
|
||||||
|
sodipodi:arg2="3.245302"
|
||||||
|
inkscape:flatsided="true"
|
||||||
|
inkscape:rounded="0"
|
||||||
|
inkscape:randomized="0"
|
||||||
|
d="M 4.7331018,3.8511572 4.9935391,1.3489427 7.0303018,2.8255952 Z"
|
||||||
|
inkscape:transform-center-x="-0.24768571"
|
||||||
|
transform="matrix(1.0496075,0.44790841,0.11075364,1,-0.47061262,-2.5315702)"
|
||||||
|
inkscape:transform-center-y="-0.2423188" />
|
||||||
|
<path
|
||||||
|
sodipodi:type="star"
|
||||||
|
style="opacity:0.994175;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.00160072;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.55905;stroke-opacity:1;paint-order:normal"
|
||||||
|
id="path878"
|
||||||
|
sodipodi:sides="3"
|
||||||
|
sodipodi:cx="4.531703"
|
||||||
|
sodipodi:cy="3.5546846"
|
||||||
|
sodipodi:r1="1.1501029"
|
||||||
|
sodipodi:r2="0.57505137"
|
||||||
|
sodipodi:arg1="1.5707963"
|
||||||
|
sodipodi:arg2="2.6179939"
|
||||||
|
inkscape:flatsided="true"
|
||||||
|
inkscape:rounded="0"
|
||||||
|
inkscape:randomized="0"
|
||||||
|
d="m 4.531703,4.7047875 -0.9960183,-1.7251543 1.9920366,0 z"
|
||||||
|
inkscape:transform-center-y="0.1930168"
|
||||||
|
transform="matrix(0,0.58136529,-0.67130283,-0.33565141,8.0709536,1.1862026)"
|
||||||
|
inkscape:transform-center-x="0.19301688" />
|
||||||
|
<path
|
||||||
|
sodipodi:type="star"
|
||||||
|
style="opacity:0.994175;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.00160072;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.55905;stroke-opacity:1;paint-order:normal"
|
||||||
|
id="path924"
|
||||||
|
sodipodi:sides="3"
|
||||||
|
sodipodi:cx="4.531703"
|
||||||
|
sodipodi:cy="3.5546846"
|
||||||
|
sodipodi:r1="1.1501029"
|
||||||
|
sodipodi:r2="0.57505137"
|
||||||
|
sodipodi:arg1="1.5707963"
|
||||||
|
sodipodi:arg2="2.6179939"
|
||||||
|
inkscape:flatsided="true"
|
||||||
|
inkscape:rounded="0"
|
||||||
|
inkscape:randomized="0"
|
||||||
|
d="m 4.531703,4.7047875 -0.9960183,-1.7251543 1.9920366,0 z"
|
||||||
|
inkscape:transform-center-y="0.1930168"
|
||||||
|
transform="matrix(0,0.58136529,-0.67130283,-0.33565141,8.0709536,1.1862026)"
|
||||||
|
inkscape:transform-center-x="0.19301688" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="g932"
|
||||||
|
inkscape:label="coin_decoupe"
|
||||||
|
style="display:inline;opacity:0.980775;filter:url(#filter920)">
|
||||||
|
<path
|
||||||
|
sodipodi:type="star"
|
||||||
|
style="opacity:0.994175;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:100;stroke-opacity:1"
|
||||||
|
id="path926"
|
||||||
|
sodipodi:sides="3"
|
||||||
|
sodipodi:cx="5.5856476"
|
||||||
|
sodipodi:cy="2.6752317"
|
||||||
|
sodipodi:r1="1.4524583"
|
||||||
|
sodipodi:r2="0.48779002"
|
||||||
|
sodipodi:arg1="2.1981044"
|
||||||
|
sodipodi:arg2="3.245302"
|
||||||
|
inkscape:flatsided="true"
|
||||||
|
inkscape:rounded="0"
|
||||||
|
inkscape:randomized="0"
|
||||||
|
d="M 4.7331018,3.8511572 4.9935391,1.3489427 7.0303018,2.8255952 Z"
|
||||||
|
inkscape:transform-center-x="-0.24768571"
|
||||||
|
transform="matrix(1.0496075,0.44790841,0.11075364,1,-0.47061262,-2.5315702)"
|
||||||
|
inkscape:transform-center-y="-0.2423188" />
|
||||||
|
<path
|
||||||
|
sodipodi:type="star"
|
||||||
|
style="opacity:0.994175;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.00160072;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.55905;stroke-opacity:1;paint-order:normal"
|
||||||
|
id="path928"
|
||||||
|
sodipodi:sides="3"
|
||||||
|
sodipodi:cx="4.531703"
|
||||||
|
sodipodi:cy="3.5546846"
|
||||||
|
sodipodi:r1="1.1501029"
|
||||||
|
sodipodi:r2="0.57505137"
|
||||||
|
sodipodi:arg1="1.5707963"
|
||||||
|
sodipodi:arg2="2.6179939"
|
||||||
|
inkscape:flatsided="true"
|
||||||
|
inkscape:rounded="0"
|
||||||
|
inkscape:randomized="0"
|
||||||
|
d="m 4.531703,4.7047875 -0.9960183,-1.7251543 1.9920366,0 z"
|
||||||
|
inkscape:transform-center-y="0.1930168"
|
||||||
|
transform="matrix(0,0.58136529,-0.67130283,-0.33565141,8.0709536,1.1862026)"
|
||||||
|
inkscape:transform-center-x="0.19301688" />
|
||||||
|
<path
|
||||||
|
sodipodi:type="star"
|
||||||
|
style="opacity:0.994175;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.203596;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||||
|
id="path930"
|
||||||
|
sodipodi:sides="3"
|
||||||
|
sodipodi:cx="4.531703"
|
||||||
|
sodipodi:cy="3.5546846"
|
||||||
|
sodipodi:r1="1.1501029"
|
||||||
|
sodipodi:r2="0.57505137"
|
||||||
|
sodipodi:arg1="1.5707963"
|
||||||
|
sodipodi:arg2="2.6179939"
|
||||||
|
inkscape:flatsided="true"
|
||||||
|
inkscape:rounded="0"
|
||||||
|
inkscape:randomized="0"
|
||||||
|
d="m 4.531703,4.7047875 -0.9960183,-1.7251543 1.9920366,0 z"
|
||||||
|
inkscape:transform-center-y="-0.23115762"
|
||||||
|
transform="matrix(0,-0.69624532,0.80395486,0.40197743,2.4520438,4.7798234)"
|
||||||
|
inkscape:transform-center-x="-0.23115767" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 8.2 KiB |
BIN
images/icons/save2file.png
Normal file
BIN
images/icons/save2file.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 604 B |
|
@ -14,7 +14,7 @@
|
||||||
display: block;
|
display: block;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
transition: all ease 0.2s;
|
transition: all ease 0.2s;
|
||||||
padding: 0 9px;
|
padding: 0 0 0 20px;
|
||||||
line-height: 28px;
|
line-height: 28px;
|
||||||
margin: 5px;
|
margin: 5px;
|
||||||
float: left;
|
float: left;
|
||||||
|
@ -22,11 +22,17 @@
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.tab-mission-control .btn a:hover {
|
.tab-mission-control .btn a:hover {
|
||||||
background-color: #3394b5;
|
background-color: #3394b5;
|
||||||
transition: all ease 0.2s;
|
transition: all ease 0.2s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.tab-mission-control .ic_save {
|
||||||
|
background-image: url(../images/icons/cf_icon_mission_white.svg);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
.tab-mission-control .btn a:active {
|
.tab-mission-control .btn a:active {
|
||||||
background-color: #37a8db;
|
background-color: #37a8db;
|
||||||
transition: all ease 0.0s;
|
transition: all ease 0.0s;
|
||||||
|
@ -199,3 +205,4 @@
|
||||||
.tab-mission-control .missionTable tr:nth-child(even) th {
|
.tab-mission-control .missionTable tr:nth-child(even) th {
|
||||||
background-color: #ebe7e7;
|
background-color: #ebe7e7;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,13 +26,6 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!--<div id="missionPlanerTemplate" class="gui_box grey" style="display: none">
|
|
||||||
<div class="gui_box_titlebar">
|
|
||||||
<div class="spacer_box_title i18n-replaced" data-i18n="missionTemplateHead">Mission Template</div>
|
|
||||||
</div>
|
|
||||||
<div class="spacer">
|
|
||||||
</div>
|
|
||||||
</div>-->
|
|
||||||
<div id="missionPlanerTotalInfo" class="gui_box grey">
|
<div id="missionPlanerTotalInfo" class="gui_box grey">
|
||||||
<div class="gui_box_titlebar">
|
<div class="gui_box_titlebar">
|
||||||
<div class="spacer_box_title i18n-replaced" data-i18n="missionTotalInformationHead">Total information</div>
|
<div class="spacer_box_title i18n-replaced" data-i18n="missionTotalInformationHead">Total information</div>
|
||||||
|
@ -51,20 +44,10 @@
|
||||||
<div id="missionValid" style="display: inline-block"></div>
|
<div id="missionValid" style="display: inline-block"></div>
|
||||||
</div>
|
</div>
|
||||||
<br>
|
<br>
|
||||||
<!--<div style="display: flex;">
|
|
||||||
<input type="checkbox" style="width: 18px; margin-left: 5px;" id="rthEndMission">
|
|
||||||
<label for="rthEndMission" style="padding: 2px;">RTH at the end of the mission</label>
|
|
||||||
</div>
|
|
||||||
<div id="rthSettings" style="display: none">
|
|
||||||
<div style="display: flex">
|
|
||||||
<input type="checkbox" id="rthLanding" style="width: 18px; margin-left: 5px;">
|
|
||||||
<label for="rthLanding" style="padding: 2px">Landing</label>
|
|
||||||
</div>
|
|
||||||
</div>-->
|
|
||||||
<hr>
|
<hr>
|
||||||
<div class="btn save_btn">
|
<div class="btn save_btn">
|
||||||
<a id="loadFileMissionButton" class="save" href="#" data-i18n="loadFileMissionButton">Load file mission</a>
|
<a id="loadFileMissionButton" class="tabicon ic_save2file" href="#" data-i18n="loadFileMissionButton">Load file mission</a>
|
||||||
<a id="saveFileMissionButton" class="save" href="#" data-i18n="saveFileMissionButton">Save file mission</a>
|
<a id="saveFileMissionButton" class="tabicon ic_save2file" href="#" data-i18n="saveFileMissionButton">Save file mission</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="btn save_btn">
|
<div class="btn save_btn">
|
||||||
<a id="loadMissionButton" class="save" href="#" data-i18n="loadMissionButton">Load mission from FC</a>
|
<a id="loadMissionButton" class="save" href="#" data-i18n="loadMissionButton">Load mission from FC</a>
|
||||||
|
|
|
@ -76,13 +76,6 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
loadHtml();
|
loadHtml();
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateTotalInfo() {
|
|
||||||
if (CONFIGURATOR.connectionValid) {
|
|
||||||
$('#availablePoints').text(MISSION_PLANER.countBusyPoints + '/' + MISSION_PLANER.maxWaypoints);
|
|
||||||
$('#missionValid').html(MISSION_PLANER.isValidMission ? chrome.i18n.getMessage('armingCheckPass') : chrome.i18n.getMessage('armingCheckFail'));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function loadHtml() {
|
function loadHtml() {
|
||||||
GUI.load("./tabs/mission_control.html", process_html);
|
GUI.load("./tabs/mission_control.html", process_html);
|
||||||
}
|
}
|
||||||
|
@ -335,6 +328,9 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
var actionPointForSend = 0;
|
var actionPointForSend = 0;
|
||||||
var settings = { speed: 0, alt: 5000};
|
var settings = { speed: 0, alt: 5000};
|
||||||
|
|
||||||
|
/////////////////////////////////////////////
|
||||||
|
// Reinit Form
|
||||||
|
/////////////////////////////////////////////
|
||||||
// Function to clear/reinit Jquery variable
|
// Function to clear/reinit Jquery variable
|
||||||
function clearEditForm() {
|
function clearEditForm() {
|
||||||
$('#pointLat').val('');
|
$('#pointLat').val('');
|
||||||
|
@ -352,6 +348,9 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
$('#MPeditPoint').fadeOut(300);
|
$('#MPeditPoint').fadeOut(300);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////
|
||||||
|
// Manage Settings
|
||||||
|
/////////////////////////////////////////////
|
||||||
function loadSettings() {
|
function loadSettings() {
|
||||||
chrome.storage.local.get('missionPlanerSettings', function (result) {
|
chrome.storage.local.get('missionPlanerSettings', function (result) {
|
||||||
if (result.missionPlanerSettings) {
|
if (result.missionPlanerSettings) {
|
||||||
|
@ -370,6 +369,17 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
$('#MPdefaultPointSpeed').val(settings.speed);
|
$('#MPdefaultPointSpeed').val(settings.speed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function closeSettingsPanel() {
|
||||||
|
$('#missionPlanerSettings').hide();
|
||||||
|
$('#missionPlanerTotalInfo').fadeIn(300);
|
||||||
|
if (selectedMarker !== null) {
|
||||||
|
$('#MPeditPoint').fadeIn(300);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////
|
||||||
|
// Manage Plotting functions
|
||||||
|
/////////////////////////////////////////////
|
||||||
// Function to repaint lines between markers
|
// Function to repaint lines between markers
|
||||||
function repaint() {
|
function repaint() {
|
||||||
var oldPos;
|
var oldPos;
|
||||||
|
@ -417,10 +427,8 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
}
|
}
|
||||||
// If one is SET_HEAD, draw labelled line in-between with heading value
|
// If one is SET_HEAD, draw labelled line in-between with heading value
|
||||||
else if (typeof oldPos !== 'undefined' && activatePoi != true && activateHead == true) {
|
else if (typeof oldPos !== 'undefined' && activatePoi != true && activateHead == true) {
|
||||||
console.log(oldHeading);
|
|
||||||
paintLine(oldPos, geometry.getCoordinates(), '#1497f1', 0, lineText=String(oldHeading)+"°");
|
paintLine(oldPos, geometry.getCoordinates(), '#1497f1', 0, lineText=String(oldHeading)+"°");
|
||||||
}
|
}
|
||||||
|
|
||||||
// If classic WPs is defined with a JUMP options, draw pink dashed line in-between
|
// If classic WPs is defined with a JUMP options, draw pink dashed line in-between
|
||||||
if (options.key == "JUMP") {
|
if (options.key == "JUMP") {
|
||||||
paintLine(geometry.getCoordinates(), markers[options.targetWP-1].getSource().getFeatures()[0].getGeometry().getCoordinates(), '#e935d6', 5, "Repeat x"+String(options.numRepeat));
|
paintLine(geometry.getCoordinates(), markers[options.targetWP-1].getSource().getFeatures()[0].getGeometry().getCoordinates(), '#e935d6', 5, "Repeat x"+String(options.numRepeat));
|
||||||
|
@ -447,7 +455,7 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// function modified to tale into account optional arguement such color, linedash and line label
|
// function modified to take into account optional argument such color, linedash and line label
|
||||||
function paintLine(pos1, pos2, color='#1497f1', lineDash=0, lineText="") {
|
function paintLine(pos1, pos2, color='#1497f1', lineDash=0, lineText="") {
|
||||||
var line = new ol.geom.LineString([pos1, pos2]);
|
var line = new ol.geom.LineString([pos1, pos2]);
|
||||||
|
|
||||||
|
@ -553,6 +561,9 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
return vectorLayer;
|
return vectorLayer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////
|
||||||
|
// Manage Map construction
|
||||||
|
/////////////////////////////////////////////
|
||||||
function initMap() {
|
function initMap() {
|
||||||
var app = {};
|
var app = {};
|
||||||
|
|
||||||
|
@ -633,41 +644,6 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
};
|
};
|
||||||
ol.inherits(app.PlannerSettingsControl, ol.control.Control);
|
ol.inherits(app.PlannerSettingsControl, ol.control.Control);
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @constructor
|
|
||||||
* @extends {ol.control.Control}
|
|
||||||
* @param {Object=} opt_options Control options.
|
|
||||||
*/
|
|
||||||
/*app.PlannerTemplateControl = function (opt_options) {
|
|
||||||
var options = opt_options || {};
|
|
||||||
var button = document.createElement('button');
|
|
||||||
|
|
||||||
button.innerHTML = ' ';
|
|
||||||
button.style = 'background: url(\'../images/CF_template_white.svg\') no-repeat 1px -1px;background-color: rgba(0,60,136,.5);';
|
|
||||||
|
|
||||||
var handleShowTemplate = function () {
|
|
||||||
$('#MPeditPoint, #missionPlanerTotalInfo', '#missionPlanerSettings').hide();
|
|
||||||
$('#missionPlanerTemplate').fadeIn(300);
|
|
||||||
};
|
|
||||||
|
|
||||||
button.addEventListener('click', handleShowTemplate, false);
|
|
||||||
button.addEventListener('touchstart', handleShowTemplate, false);
|
|
||||||
|
|
||||||
var element = document.createElement('div');
|
|
||||||
element.className = 'mission-control-template ol-unselectable ol-control';
|
|
||||||
element.appendChild(button);
|
|
||||||
element.title = 'MP Template';
|
|
||||||
|
|
||||||
ol.control.Control.call(this, {
|
|
||||||
element: element,
|
|
||||||
target: options.target
|
|
||||||
});
|
|
||||||
|
|
||||||
};
|
|
||||||
ol.inherits(app.PlannerTemplateControl, ol.control.Control);
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {ol.MapBrowserEvent} evt Map browser event.
|
* @param {ol.MapBrowserEvent} evt Map browser event.
|
||||||
* @return {boolean} `true` to start the drag sequence.
|
* @return {boolean} `true` to start the drag sequence.
|
||||||
|
@ -829,12 +805,9 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
if (selectedFeature)
|
if (selectedFeature) {
|
||||||
{
|
for (var i in markers) {
|
||||||
for (var i in markers)
|
if (markers[i] == tempMarker) {
|
||||||
{
|
|
||||||
if (markers[i] == tempMarker)
|
|
||||||
{
|
|
||||||
selectedMarker = tempMarker;
|
selectedMarker = tempMarker;
|
||||||
|
|
||||||
var geometry = selectedFeature.getGeometry();
|
var geometry = selectedFeature.getGeometry();
|
||||||
|
@ -856,7 +829,6 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
$('[name=Options]').filter('[value='+selectedMarker.options['key']+']').prop('checked', true);
|
$('[name=Options]').filter('[value='+selectedMarker.options['key']+']').prop('checked', true);
|
||||||
// Manage RTH, JUMP, SET_HEAD options for WP
|
// Manage RTH, JUMP, SET_HEAD options for WP
|
||||||
if (selectedMarker.options.key == "RTH") {
|
if (selectedMarker.options.key == "RTH") {
|
||||||
console.log(selectedMarker.options.landAfter);
|
|
||||||
$('#Options_LandRTH').prop('checked', selectedMarker.options.landAfter);
|
$('#Options_LandRTH').prop('checked', selectedMarker.options.landAfter);
|
||||||
}
|
}
|
||||||
else if (selectedMarker.options.key == "JUMP") {
|
else if (selectedMarker.options.key == "JUMP") {
|
||||||
|
@ -867,10 +839,8 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
$('#Options_HeadingHead').val(selectedMarker.options.heading);
|
$('#Options_HeadingHead').val(selectedMarker.options.heading);
|
||||||
}
|
}
|
||||||
// Selection box update depending on choice of type of waypoint
|
// Selection box update depending on choice of type of waypoint
|
||||||
for (var j in dictOfLabelParameterPoint[selectedMarker.action])
|
for (var j in dictOfLabelParameterPoint[selectedMarker.action]) {
|
||||||
{
|
if (dictOfLabelParameterPoint[selectedMarker.action][j] != '') {
|
||||||
if (dictOfLabelParameterPoint[selectedMarker.action][j] != '')
|
|
||||||
{
|
|
||||||
$('#pointP'+String(j).slice(-1)+'class').fadeIn(300);
|
$('#pointP'+String(j).slice(-1)+'class').fadeIn(300);
|
||||||
$('label[for=pointP'+String(j).slice(-1)+']').html(dictOfLabelParameterPoint[selectedMarker.action][j]);
|
$('label[for=pointP'+String(j).slice(-1)+']').html(dictOfLabelParameterPoint[selectedMarker.action][j]);
|
||||||
}
|
}
|
||||||
|
@ -883,7 +853,8 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
$('#MPeditPoint').fadeIn(300);
|
$('#MPeditPoint').fadeIn(300);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
map.addLayer(addMarker(evt.coordinate, settings.alt, MWNP.WPTYPE.WAYPOINT, settings.speed));
|
map.addLayer(addMarker(evt.coordinate, settings.alt, MWNP.WPTYPE.WAYPOINT, settings.speed));
|
||||||
repaint();
|
repaint();
|
||||||
}
|
}
|
||||||
|
@ -947,24 +918,29 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
geometry.setCoordinates(ol.proj.fromLonLat([parseFloat($('#pointLon').val()), parseFloat($('#pointLat').val())]));
|
geometry.setCoordinates(ol.proj.fromLonLat([parseFloat($('#pointLon').val()), parseFloat($('#pointLat').val())]));
|
||||||
t.alt = $('#pointAlt').val();
|
t.alt = $('#pointAlt').val();
|
||||||
t.action = $('#pointType').val();
|
t.action = $('#pointType').val();
|
||||||
console.log(typeof t.action);
|
// if action is Set_POI, PH_UNLIM, LAND, set parameter_i to 0
|
||||||
if (t.action == '5' || t.action == '2' || t.action == '8') {
|
if (t.action == '5' || t.action == '2' || t.action == '8') {
|
||||||
t.parameter1 = 0;
|
t.parameter1 = 0;
|
||||||
t.parameter2 = 0;
|
t.parameter2 = 0;
|
||||||
t.parameter3 = 0;
|
t.parameter3 = 0;
|
||||||
}
|
}
|
||||||
|
// else for other kind of waypoints, set parameter_i to pointP_i value
|
||||||
else {
|
else {
|
||||||
console.log("$('#pointP1').val() : ",$('#pointP1').val());
|
console.log("$('#pointP1').val() : ",$('#pointP1').val());
|
||||||
t.parameter1 = $('#pointP1').val();
|
t.parameter1 = $('#pointP1').val();
|
||||||
t.parameter2 = $('#pointP2').val();
|
t.parameter2 = $('#pointP2').val();
|
||||||
t.parameter3 = $('#pointP3').val();
|
t.parameter3 = $('#pointP3').val();
|
||||||
}
|
}
|
||||||
|
// Manage Options
|
||||||
|
// if RTH options selected, store GUI value in t.options
|
||||||
if ($('input[name=Options]:checked').val() == "RTH") {
|
if ($('input[name=Options]:checked').val() == "RTH") {
|
||||||
t.options = {key: $('input[name=Options]:checked').val(),
|
t.options = {key: $('input[name=Options]:checked').val(),
|
||||||
landAfter: $('#Options_LandRTH').prop('checked')
|
landAfter: $('#Options_LandRTH').prop('checked')
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
// if JUMP options selected, store GUI value in t.options
|
||||||
else if ($('input[name=Options]:checked').val() == "JUMP") {
|
else if ($('input[name=Options]:checked').val() == "JUMP") {
|
||||||
|
// check if users input values verify the condition i an integer btw [0,99] and within length of Markers
|
||||||
if (!Array.from({length: markers.length}, (v, i) => i+1).includes(Number($('#Options_TargetJUMP').val())) || (Number($('#Options_NumberJUMP').val())<0 || Number($('#Options_NumberJUMP').val())>99)) {
|
if (!Array.from({length: markers.length}, (v, i) => i+1).includes(Number($('#Options_TargetJUMP').val())) || (Number($('#Options_NumberJUMP').val())<0 || Number($('#Options_NumberJUMP').val())>99)) {
|
||||||
alert(chrome.i18n.getMessage('MissionPlannerJumpSettingsCheck'))
|
alert(chrome.i18n.getMessage('MissionPlannerJumpSettingsCheck'))
|
||||||
t.options = {key: 'None'}
|
t.options = {key: 'None'}
|
||||||
|
@ -976,7 +952,9 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// if SET_HEAD options selected, store GUI value in t.options
|
||||||
else if ($('input[name=Options]:checked').val() == "SET_HEAD") {
|
else if ($('input[name=Options]:checked').val() == "SET_HEAD") {
|
||||||
|
// Check if Heading is btw [0, 360°] or = -1
|
||||||
if ($('#Options_HeadingHead').val()>360 || ($('#Options_HeadingHead').val()<0 && $('#Options_HeadingHead').val() !=-1)) {
|
if ($('#Options_HeadingHead').val()>360 || ($('#Options_HeadingHead').val()<0 && $('#Options_HeadingHead').val() !=-1)) {
|
||||||
alert(chrome.i18n.getMessage('MissionPlannerHeadSettingsCheck'))
|
alert(chrome.i18n.getMessage('MissionPlannerHeadSettingsCheck'))
|
||||||
t.options = {key: 'None'}
|
t.options = {key: 'None'}
|
||||||
|
@ -992,9 +970,7 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
selectedMarker.getSource().getFeatures()[0].setStyle(getPointIcon(selectedMarker.action, false, selectedMarker.number));
|
selectedMarker.getSource().getFeatures()[0].setStyle(getPointIcon(selectedMarker.action, false, selectedMarker.number));
|
||||||
console.log("selectedMarker", selectedMarker);
|
|
||||||
selectedMarker = null;
|
selectedMarker = null;
|
||||||
clearEditForm();
|
clearEditForm();
|
||||||
repaint();
|
repaint();
|
||||||
|
@ -1011,7 +987,6 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#saveFileMissionButton').on('click', function () {
|
$('#saveFileMissionButton').on('click', function () {
|
||||||
//if (!markers.length) return;
|
|
||||||
nwdialog.setContext(document);
|
nwdialog.setContext(document);
|
||||||
nwdialog.saveFileDialog('', '.mission', function(result) {
|
nwdialog.saveFileDialog('', '.mission', function(result) {
|
||||||
saveMissionFile(result);
|
saveMissionFile(result);
|
||||||
|
@ -1023,7 +998,7 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
removeAllPoints();
|
removeAllPoints();
|
||||||
$(this).addClass('disabled');
|
$(this).addClass('disabled');
|
||||||
GUI.log('Start get point');
|
GUI.log('Start get point');
|
||||||
|
// Reinit some internal parameters
|
||||||
pointForSend = 0;
|
pointForSend = 0;
|
||||||
actionPointForSend = 0;
|
actionPointForSend = 0;
|
||||||
nonMarkerPoint = [];
|
nonMarkerPoint = [];
|
||||||
|
@ -1036,7 +1011,7 @@ 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');
|
||||||
|
// Reinit some internal parameters
|
||||||
pointForSend = 0;
|
pointForSend = 0;
|
||||||
actionPointForSend = 0;
|
actionPointForSend = 0;
|
||||||
nonMarkerPoint = [];
|
nonMarkerPoint = [];
|
||||||
|
@ -1058,15 +1033,6 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
MSP.send_message(MSPCodes.MSP_WP_MISSION_SAVE, [0], false);
|
MSP.send_message(MSPCodes.MSP_WP_MISSION_SAVE, [0], false);
|
||||||
});
|
});
|
||||||
|
|
||||||
// RTH missions commented as integrated into WP options direclty
|
|
||||||
/*$('#rthEndMission').on('change', function () {
|
|
||||||
if ($(this).is(':checked')) {
|
|
||||||
$('#rthSettings').fadeIn(300);
|
|
||||||
} else {
|
|
||||||
$('#rthSettings').fadeOut(300);
|
|
||||||
}
|
|
||||||
});*/
|
|
||||||
|
|
||||||
$('#saveSettings').on('click', function () {
|
$('#saveSettings').on('click', function () {
|
||||||
settings = { speed: $('#MPdefaultPointSpeed').val(), alt: $('#MPdefaultPointAlt').val() };
|
settings = { speed: $('#MPdefaultPointSpeed').val(), alt: $('#MPdefaultPointAlt').val() };
|
||||||
saveSettings();
|
saveSettings();
|
||||||
|
@ -1082,10 +1048,8 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
// Add function to update parameter i field in the selected Edit WP Box
|
// Add function to update parameter i field in the selected Edit WP Box
|
||||||
$('#pointType').on('change', function () {
|
$('#pointType').on('change', function () {
|
||||||
selectedMarker.action = $('#pointType').val();
|
selectedMarker.action = $('#pointType').val();
|
||||||
for (var j in dictOfLabelParameterPoint[selectedMarker.action])
|
for (var j in dictOfLabelParameterPoint[selectedMarker.action]) {
|
||||||
{
|
if (dictOfLabelParameterPoint[selectedMarker.action][j] != '') {
|
||||||
if (dictOfLabelParameterPoint[selectedMarker.action][j] != '')
|
|
||||||
{
|
|
||||||
$('#pointP'+String(j).slice(-1)+'class').fadeIn(300);
|
$('#pointP'+String(j).slice(-1)+'class').fadeIn(300);
|
||||||
$('label[for=pointP'+String(j).slice(-1)+']').html(dictOfLabelParameterPoint[selectedMarker.action][j]);
|
$('label[for=pointP'+String(j).slice(-1)+']').html(dictOfLabelParameterPoint[selectedMarker.action][j]);
|
||||||
}
|
}
|
||||||
|
@ -1096,18 +1060,13 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
}
|
}
|
||||||
else {$('#pointOptionclass').fadeOut(300);}
|
else {$('#pointOptionclass').fadeOut(300);}
|
||||||
});
|
});
|
||||||
|
|
||||||
updateTotalInfo();
|
updateTotalInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
function closeSettingsPanel() {
|
|
||||||
$('#missionPlanerSettings').hide();
|
|
||||||
$('#missionPlanerTotalInfo').fadeIn(300);
|
|
||||||
if (selectedMarker !== null) {
|
|
||||||
$('#MPeditPoint').fadeIn(300);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////
|
||||||
|
// Manage Buttons toolbox
|
||||||
|
/////////////////////////////////////////////
|
||||||
function removeAllPoints() {
|
function removeAllPoints() {
|
||||||
for (var i in markers) {
|
for (var i in markers) {
|
||||||
map.removeLayer(markers[i]);
|
map.removeLayer(markers[i]);
|
||||||
|
@ -1115,10 +1074,6 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
markers = [];
|
markers = [];
|
||||||
clearEditForm();
|
clearEditForm();
|
||||||
updateTotalInfo();
|
updateTotalInfo();
|
||||||
// RTH section commented as RTH options is integrated into WP box
|
|
||||||
/*$('#rthEndMission').prop('checked', false);
|
|
||||||
$('#rthSettings').fadeOut(300);
|
|
||||||
$('#rthLanding').prop('checked', false);*/
|
|
||||||
repaint();
|
repaint();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1213,11 +1168,11 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
|
|
||||||
// draw actual mission
|
// draw actual mission
|
||||||
removeAllPoints();
|
removeAllPoints();
|
||||||
|
// Create nonMarkerPointListRead list to store index of non marker point (i.e RTH, SET_HEAD, JUMP) => useful for JUMP part
|
||||||
var nonMarkerPointListRead =[]
|
var nonMarkerPointListRead =[]
|
||||||
for (var i = 0; i < mission.points.length; i++) {
|
for (var i = 0; i < mission.points.length; i++) {
|
||||||
if ([MWNP.WPTYPE.JUMP,MWNP.WPTYPE.SET_HEAD,MWNP.WPTYPE.RTH].includes(mission.points[i].action)) {nonMarkerPointListRead.push(mission.points[i].index);};
|
if ([MWNP.WPTYPE.JUMP,MWNP.WPTYPE.SET_HEAD,MWNP.WPTYPE.RTH].includes(mission.points[i].action)) {nonMarkerPointListRead.push(mission.points[i].index);};
|
||||||
}
|
}
|
||||||
console.log("nonMarkerPointListRead : ",nonMarkerPointListRead);
|
|
||||||
// Updated code to take into account WP options (JUMP, SET_HEAD, RTH)
|
// Updated code to take into account WP options (JUMP, SET_HEAD, RTH)
|
||||||
for (var i = 0; i < mission.points.length; i++) {
|
for (var i = 0; i < mission.points.length; i++) {
|
||||||
if ([MWNP.WPTYPE.WAYPOINT,MWNP.WPTYPE.PH_UNLIM,MWNP.WPTYPE.PH_TIME,MWNP.WPTYPE.LAND, MWNP.WPTYPE.SET_POI].includes(mission.points[i].action)) {
|
if ([MWNP.WPTYPE.WAYPOINT,MWNP.WPTYPE.PH_UNLIM,MWNP.WPTYPE.PH_TIME,MWNP.WPTYPE.LAND, MWNP.WPTYPE.SET_POI].includes(mission.points[i].action)) {
|
||||||
|
@ -1291,6 +1246,7 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
for (var i = 0; i < markers.length; i++) {
|
for (var i = 0; i < markers.length; i++) {
|
||||||
var geometry = markers[i].getSource().getFeatures()[0].getGeometry();
|
var geometry = markers[i].getSource().getFeatures()[0].getGeometry();
|
||||||
var coordinate = ol.proj.toLonLat(geometry.getCoordinates());
|
var coordinate = ol.proj.toLonLat(geometry.getCoordinates());
|
||||||
|
// if marker is Set_POI, PH_UNLIM, LAND
|
||||||
if (markers[i].action == '5' || markers[i].action == '2' || markers[i].action == '8' ) {
|
if (markers[i].action == '5' || markers[i].action == '2' || markers[i].action == '8' ) {
|
||||||
var point = { $: {
|
var point = { $: {
|
||||||
'no': (j),
|
'no': (j),
|
||||||
|
@ -1305,6 +1261,7 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
data.missionitem.push(point);
|
data.missionitem.push(point);
|
||||||
j++;
|
j++;
|
||||||
}
|
}
|
||||||
|
// else marker is not Set_POI, PH_UNLIM, LAND
|
||||||
else {
|
else {
|
||||||
var point = { $: {
|
var point = { $: {
|
||||||
'no': (j),
|
'no': (j),
|
||||||
|
@ -1319,10 +1276,10 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
data.missionitem.push(point);
|
data.missionitem.push(point);
|
||||||
j++;
|
j++;
|
||||||
}
|
}
|
||||||
|
// Manage Options for markers
|
||||||
|
// If marker has options key = JUMP, provide JUMP data (Waypoint target for Jump and number of repeat) to Parameter1 and Parameter2
|
||||||
if (markers[i].options.key == "JUMP") {
|
if (markers[i].options.key == "JUMP") {
|
||||||
nonMarkerPoint.push(j);
|
nonMarkerPoint.push(j);
|
||||||
/* console.log("nonMarkerPoint : ", nonMarkerPoint);
|
|
||||||
console.log("getNumberOfNonMarkerForJump : ",getNumberOfNonMarkerForJump2(nonMarkerPoint, Number(markers[i].options.targetWP))); */
|
|
||||||
point = { $: {
|
point = { $: {
|
||||||
'no': (j),
|
'no': (j),
|
||||||
'action': 'JUMP',
|
'action': 'JUMP',
|
||||||
|
@ -1336,6 +1293,7 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
data.missionitem.push(point);
|
data.missionitem.push(point);
|
||||||
j++;
|
j++;
|
||||||
}
|
}
|
||||||
|
// If marker has options key = SET_HEAD, provide SET_HEAD heading data to Parameter1
|
||||||
else if (markers[i].options.key == "SET_HEAD") {
|
else if (markers[i].options.key == "SET_HEAD") {
|
||||||
point = { $: {
|
point = { $: {
|
||||||
'no': (j),
|
'no': (j),
|
||||||
|
@ -1351,6 +1309,7 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
nonMarkerPoint.push(j);
|
nonMarkerPoint.push(j);
|
||||||
j++;
|
j++;
|
||||||
}
|
}
|
||||||
|
// If marker has options key = RTH, provide RTH data (whether landing is required) to Parameter1
|
||||||
else if (markers[i].options.key == "RTH") {
|
else if (markers[i].options.key == "RTH") {
|
||||||
actionPointForSend++;
|
actionPointForSend++;
|
||||||
point = { $: {
|
point = { $: {
|
||||||
|
@ -1369,11 +1328,6 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// add last RTH point - Section commented as RTH is directly integrated as a WP options
|
|
||||||
/*if ($('#rthEndMission').is(':checked')) {
|
|
||||||
data.missionitem.push({ $: { 'no': (markers.length + 1), 'action': 'RTH', 'lon': 0, 'lat': 0, 'alt': (settings.alt / 100), 'parameter1': ($('#rthLanding').is(':checked') ? 1 : 0) } });
|
|
||||||
}*/
|
|
||||||
|
|
||||||
var builder = new window.xml2js.Builder({ 'rootName': 'mission', 'renderOpts': { 'pretty': true, 'indent': '\t', 'newline': '\n' } });
|
var builder = new window.xml2js.Builder({ 'rootName': 'mission', 'renderOpts': { 'pretty': true, 'indent': '\t', 'newline': '\n' } });
|
||||||
var xml = builder.buildObject(data);
|
var xml = builder.buildObject(data);
|
||||||
fs.writeFile(filename, xml, (err) => {
|
fs.writeFile(filename, xml, (err) => {
|
||||||
|
@ -1384,26 +1338,12 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
GUI.log('File saved');
|
GUI.log('File saved');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
// New function to get number of Non Marker point such as JUMP, SET_HEAD and RTH
|
|
||||||
function getNumberOfNonMarkerForJump(nonMarkerPointList, numTargetMarker) {
|
|
||||||
for (i = 0; i < nonMarkerPointList.length; i++) {
|
|
||||||
if (numTargetMarker<=nonMarkerPointList[i+1] && numTargetMarker>nonMarkerPointList[i]) {
|
|
||||||
return i+1;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// New function to get number of Non Marker point such as JUMP, SET_HEAD and RTH
|
// New: function to get number of Non Marker points such as JUMP, SET_HEAD and RTH
|
||||||
function getNumberOfNonMarkerForJump2(nonMarkerPointList, numTargetMarker) {
|
function getNumberOfNonMarkerForJump2(nonMarkerPointList, numTargetMarker) {
|
||||||
for (i = 1; i < nonMarkerPointList.length; i++) {
|
for (i = 1; i < nonMarkerPointList.length; i++) {
|
||||||
console.log("i : ", i);
|
|
||||||
console.log("nonMarkerPointList[i-1] : ",nonMarkerPointList[i-1]);
|
|
||||||
console.log("numTargetMarker : ", numTargetMarker);
|
|
||||||
if (numTargetMarker>=nonMarkerPointList[i-1]) {
|
if (numTargetMarker>=nonMarkerPointList[i-1]) {
|
||||||
numTargetMarker++
|
numTargetMarker++;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return numTargetMarker;
|
return numTargetMarker;
|
||||||
|
@ -1411,17 +1351,12 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// New function to get number of Non Marker point such as JUMP, SET_HEAD and RTH
|
// New: Reversed function to get number of Non Marker points such as JUMP, SET_HEAD and RTH
|
||||||
function getNumberOfNonMarkerForJumpReversed(nonMarkerPointList, numTargetMarker) {
|
function getNumberOfNonMarkerForJumpReversed(nonMarkerPointList, numTargetMarker) {
|
||||||
var numTargetMarkerOut = 0;
|
var numTargetMarkerOut = 0;
|
||||||
for (i = 1; i < nonMarkerPointList.length; i++) {
|
for (i = 1; i < nonMarkerPointList.length; i++) {
|
||||||
// console.log("i : ", i);
|
|
||||||
// console.log("nonMarkerPointList[i] : ",nonMarkerPointList[i-1]);
|
|
||||||
// console.log("numTargetMarker : ", numTargetMarker);
|
|
||||||
// console.log("numTargetMarkerOut : ", numTargetMarkerOut);
|
|
||||||
// console.log(numTargetMarker>=nonMarkerPointList[i-1]);
|
|
||||||
if (numTargetMarker>=nonMarkerPointList[i-1]) {
|
if (numTargetMarker>=nonMarkerPointList[i-1]) {
|
||||||
numTargetMarkerOut++
|
numTargetMarkerOut++;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return numTargetMarker-numTargetMarkerOut;
|
return numTargetMarker-numTargetMarkerOut;
|
||||||
|
@ -1452,11 +1387,7 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
endGetPoint();
|
endGetPoint();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
/* console.log(MISSION_PLANER.bufferPoint);
|
// Populate a dictionary pointFromBuffer which stores all the point values from buffer to be post-treated then (Needed for JUMP option at least)
|
||||||
console.log("countBusyPoints : "+MISSION_PLANER.countBusyPoints);
|
|
||||||
console.log("POINT : "+pointForSend);
|
|
||||||
console.log("Mission : "+MISSION_PLANER.bufferPoint.number); */
|
|
||||||
|
|
||||||
if (pointForSend > 0) {
|
if (pointForSend > 0) {
|
||||||
pointFromBuffer[MISSION_PLANER.bufferPoint.number] = {
|
pointFromBuffer[MISSION_PLANER.bufferPoint.number] = {
|
||||||
number : MISSION_PLANER.bufferPoint.number,
|
number : MISSION_PLANER.bufferPoint.number,
|
||||||
|
@ -1470,13 +1401,10 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
};
|
};
|
||||||
if ([MWNP.WPTYPE.JUMP,MWNP.WPTYPE.SET_HEAD,MWNP.WPTYPE.RTH].includes(MISSION_PLANER.bufferPoint.action)) {nonMarkerPointListRead.push(MISSION_PLANER.bufferPoint.number);};
|
if ([MWNP.WPTYPE.JUMP,MWNP.WPTYPE.SET_HEAD,MWNP.WPTYPE.RTH].includes(MISSION_PLANER.bufferPoint.action)) {nonMarkerPointListRead.push(MISSION_PLANER.bufferPoint.number);};
|
||||||
}
|
}
|
||||||
/* console.log(pointFromBuffer);
|
|
||||||
console.log(nonMarkerPointListRead); */
|
// Once all points have been scanned and pointFromBuffer populated, then scan pointFromBuffer to generate the Map Layers Markers
|
||||||
if (pointForSend >= MISSION_PLANER.countBusyPoints) {
|
if (pointForSend >= MISSION_PLANER.countBusyPoints) {
|
||||||
Object.keys(pointFromBuffer).forEach(function(key) {
|
Object.keys(pointFromBuffer).forEach(function(key) {
|
||||||
// console.log(pointFromBuffer[key]);
|
|
||||||
// console.log("Key : "+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 ([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) {
|
if ((Number(key)+1) <= MISSION_PLANER.countBusyPoints) {
|
||||||
var coord = ol.proj.fromLonLat([pointFromBuffer[key].lon, pointFromBuffer[key].lat]);
|
var coord = ol.proj.fromLonLat([pointFromBuffer[key].lon, pointFromBuffer[key].lat]);
|
||||||
|
@ -1486,7 +1414,6 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
else if (pointFromBuffer[Number(key)+1].action == MWNP.WPTYPE.JUMP) {
|
else if (pointFromBuffer[Number(key)+1].action == MWNP.WPTYPE.JUMP) {
|
||||||
/* console.log("getNumberOfNonMarkerForJumpReversed : ",getNumberOfNonMarkerForJumpReversed(nonMarkerPointListRead, pointFromBuffer[Number(key)+1].p1)); */
|
|
||||||
var options = {key: 'JUMP',
|
var options = {key: 'JUMP',
|
||||||
targetWP: getNumberOfNonMarkerForJumpReversed(nonMarkerPointListRead, pointFromBuffer[Number(key)+1].p1),
|
targetWP: getNumberOfNonMarkerForJumpReversed(nonMarkerPointListRead, pointFromBuffer[Number(key)+1].p1),
|
||||||
numRepeat: pointFromBuffer[Number(key)+1].p2
|
numRepeat: pointFromBuffer[Number(key)+1].p2
|
||||||
|
@ -1527,12 +1454,13 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function sendNextPoint() {
|
function sendNextPoint() {
|
||||||
//var isRTH = $('#rthEndMission').is(':checked');
|
if (pointForSend >= markers.length) {
|
||||||
console.log("Point : "+ (pointForSend+actionPointForSend));
|
endSendPoint();
|
||||||
|
return;
|
||||||
if ((pointForSend) < markers.length) {
|
}
|
||||||
var geometry = markers[pointForSend].getSource().getFeatures()[0].getGeometry();
|
var geometry = markers[pointForSend].getSource().getFeatures()[0].getGeometry();
|
||||||
var coordinate = ol.proj.toLonLat(geometry.getCoordinates());
|
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 (isOptions == false) {
|
||||||
if (markers[pointForSend].action == '5' || markers[pointForSend].action == '2' || markers[pointForSend].action == '8' ) {
|
if (markers[pointForSend].action == '5' || markers[pointForSend].action == '2' || markers[pointForSend].action == '8' ) {
|
||||||
MISSION_PLANER.bufferPoint.number = pointForSend + actionPointForSend + 1;
|
MISSION_PLANER.bufferPoint.number = pointForSend + actionPointForSend + 1;
|
||||||
|
@ -1562,16 +1490,19 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
pointForSend++;
|
pointForSend++;
|
||||||
}
|
}
|
||||||
oldMarkers = markers[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);
|
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) {
|
else if (isOptions == true) {
|
||||||
if ((pointForSend) < markers.length) {
|
|
||||||
if (oldMarkers.options.key == "JUMP") {
|
if (oldMarkers.options.key == "JUMP") {
|
||||||
actionPointForSend++;
|
actionPointForSend++;
|
||||||
nonMarkerPoint.push(pointForSend + actionPointForSend+1);
|
nonMarkerPoint.push(pointForSend + actionPointForSend+1);
|
||||||
console.log("nonMarkerPoint : ", nonMarkerPoint);
|
|
||||||
console.log("getNumberOfNonMarkerForJump : ",getNumberOfNonMarkerForJump2(nonMarkerPoint, Number(oldMarkers.options.targetWP)));
|
|
||||||
|
|
||||||
MISSION_PLANER.bufferPoint.number = pointForSend + actionPointForSend + 1;
|
MISSION_PLANER.bufferPoint.number = pointForSend + actionPointForSend + 1;
|
||||||
MISSION_PLANER.bufferPoint.action = String(MWNP.WPTYPE[oldMarkers.options.key]);
|
MISSION_PLANER.bufferPoint.action = String(MWNP.WPTYPE[oldMarkers.options.key]);
|
||||||
MISSION_PLANER.bufferPoint.lon = 0;
|
MISSION_PLANER.bufferPoint.lon = 0;
|
||||||
|
@ -1584,8 +1515,6 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
else if (oldMarkers.options.key == "SET_HEAD") {
|
else if (oldMarkers.options.key == "SET_HEAD") {
|
||||||
actionPointForSend++;
|
actionPointForSend++;
|
||||||
nonMarkerPoint.push(pointForSend + actionPointForSend+1);
|
nonMarkerPoint.push(pointForSend + actionPointForSend+1);
|
||||||
console.log("nonMarkerPoint : ", nonMarkerPoint);
|
|
||||||
|
|
||||||
MISSION_PLANER.bufferPoint.number = pointForSend + actionPointForSend + 1;
|
MISSION_PLANER.bufferPoint.number = pointForSend + actionPointForSend + 1;
|
||||||
MISSION_PLANER.bufferPoint.action = String(MWNP.WPTYPE[oldMarkers.options.key]);
|
MISSION_PLANER.bufferPoint.action = String(MWNP.WPTYPE[oldMarkers.options.key]);
|
||||||
MISSION_PLANER.bufferPoint.lon = 0;
|
MISSION_PLANER.bufferPoint.lon = 0;
|
||||||
|
@ -1598,8 +1527,6 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
else if (oldMarkers.options.key == "RTH") {
|
else if (oldMarkers.options.key == "RTH") {
|
||||||
actionPointForSend++;
|
actionPointForSend++;
|
||||||
nonMarkerPoint.push(pointForSend + actionPointForSend+1);
|
nonMarkerPoint.push(pointForSend + actionPointForSend+1);
|
||||||
console.log("nonMarkerPoint : ", nonMarkerPoint);
|
|
||||||
|
|
||||||
MISSION_PLANER.bufferPoint.number = pointForSend + actionPointForSend + 1;
|
MISSION_PLANER.bufferPoint.number = pointForSend + actionPointForSend + 1;
|
||||||
MISSION_PLANER.bufferPoint.action = String(MWNP.WPTYPE[oldMarkers.options.key]);
|
MISSION_PLANER.bufferPoint.action = String(MWNP.WPTYPE[oldMarkers.options.key]);
|
||||||
MISSION_PLANER.bufferPoint.lon = 0;
|
MISSION_PLANER.bufferPoint.lon = 0;
|
||||||
|
@ -1611,28 +1538,13 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
}
|
}
|
||||||
isOptions = false;
|
isOptions = false;
|
||||||
pointForSend++;
|
pointForSend++;
|
||||||
MSP.send_message(MSPCodes.MSP_SET_WP, mspHelper.crunch(MSPCodes.MSP_SET_WP), false, sendNextPoint);
|
if (pointForSend >= markers.length) {
|
||||||
}
|
MISSION_PLANER.bufferPoint.endMission = 0xA5;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/*if (isRTH) {
|
MISSION_PLANER.bufferPoint.endMission = 0;
|
||||||
MISSION_PLANER.bufferPoint.number = pointForSend + 1;
|
}
|
||||||
MISSION_PLANER.bufferPoint.action = 4;
|
MSP.send_message(MSPCodes.MSP_SET_WP, mspHelper.crunch(MSPCodes.MSP_SET_WP), false, sendNextPoint);
|
||||||
MISSION_PLANER.bufferPoint.lon = 0;
|
|
||||||
MISSION_PLANER.bufferPoint.lat = 0;
|
|
||||||
MISSION_PLANER.bufferPoint.alt = 0;
|
|
||||||
MISSION_PLANER.bufferPoint.endMission = 0xA5;
|
|
||||||
MISSION_PLANER.bufferPoint.p1 = $('#rthLanding').is(':checked') ? 1 : 0;
|
|
||||||
MSP.send_message(MSPCodes.MSP_SET_WP, mspHelper.crunch(MSPCodes.MSP_SET_WP), false, endSendPoint);
|
|
||||||
} else {
|
|
||||||
endSendPoint();
|
|
||||||
}*/
|
|
||||||
MISSION_PLANER.bufferPoint.endMission = 0xA5;
|
|
||||||
console.log("EndSendPoint");
|
|
||||||
endSendPoint();
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1644,6 +1556,13 @@ TABS.mission_control.initialize = function (callback) {
|
||||||
$('#saveMissionButton').removeClass('disabled');
|
$('#saveMissionButton').removeClass('disabled');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function updateTotalInfo() {
|
||||||
|
if (CONFIGURATOR.connectionValid) {
|
||||||
|
$('#availablePoints').text(MISSION_PLANER.countBusyPoints + '/' + MISSION_PLANER.maxWaypoints);
|
||||||
|
$('#missionValid').html(MISSION_PLANER.isValidMission ? chrome.i18n.getMessage('armingCheckPass') : chrome.i18n.getMessage('armingCheckFail'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue