Move GPS configuration to GPS tab (#3326)
parent
1906b3a82c
commit
309bd43128
|
@ -1410,7 +1410,7 @@
|
||||||
"message": "<strong>Note:</strong> Make sure your FC is able to operate at these speeds! Check CPU and cycletime stability. Changing this may require PID re-tuning. TIP: Disable Accelerometer and other sensors to gain more performance."
|
"message": "<strong>Note:</strong> Make sure your FC is able to operate at these speeds! Check CPU and cycletime stability. Changing this may require PID re-tuning. TIP: Disable Accelerometer and other sensors to gain more performance."
|
||||||
},
|
},
|
||||||
"configurationGPS": {
|
"configurationGPS": {
|
||||||
"message": "GPS"
|
"message": "GPS Configuration"
|
||||||
},
|
},
|
||||||
"configurationGPSProtocol": {
|
"configurationGPSProtocol": {
|
||||||
"message": "Protocol"
|
"message": "Protocol"
|
||||||
|
@ -1443,9 +1443,6 @@
|
||||||
"message": "When enabled, only the first arm after the battery is connected will be used as home point. If not enabled, every time the quad is armed, the home point will be updated.",
|
"message": "When enabled, only the first arm after the battery is connected will be used as home point. If not enabled, every time the quad is armed, the home point will be updated.",
|
||||||
"description": "Help text for the option to set the Home Point with the first arm only, not with each arm in the GPS Configuration"
|
"description": "Help text for the option to set the Home Point with the first arm only, not with each arm in the GPS Configuration"
|
||||||
},
|
},
|
||||||
"configurationGPSHelp": {
|
|
||||||
"message": "<strong>Note:</strong> Remember to configure a Serial Port (via Ports tab) when using GPS feature."
|
|
||||||
},
|
|
||||||
"configurationSerialRX": {
|
"configurationSerialRX": {
|
||||||
"message": "Serial Receiver Provider"
|
"message": "Serial Receiver Provider"
|
||||||
},
|
},
|
||||||
|
|
|
@ -111,40 +111,6 @@
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.gps {
|
|
||||||
.line {
|
|
||||||
clear: left;
|
|
||||||
}
|
|
||||||
select {
|
|
||||||
float: left;
|
|
||||||
width: 100px;
|
|
||||||
height: 20px;
|
|
||||||
margin: 0 10px 5px 0;
|
|
||||||
border: 1px solid var(--subtleAccent);
|
|
||||||
}
|
|
||||||
.select {
|
|
||||||
>div {
|
|
||||||
&:first-child {
|
|
||||||
float: left;
|
|
||||||
height: 20px;
|
|
||||||
margin-right: 15px;
|
|
||||||
margin-left: 3px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
span {
|
|
||||||
line-height: 20px;
|
|
||||||
}
|
|
||||||
.gui_box {
|
|
||||||
float: left;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
}
|
|
||||||
td {
|
|
||||||
&:nth-child(2) {
|
|
||||||
width: 38px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.freelabel {
|
.freelabel {
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
@ -340,11 +306,6 @@
|
||||||
float: left;
|
float: left;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
.gpsSettings {
|
|
||||||
.note {
|
|
||||||
margin-top: 10px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@media only screen and (max-width: 1055px) {
|
@media only screen and (max-width: 1055px) {
|
||||||
.tab-configuration {
|
.tab-configuration {
|
||||||
|
|
|
@ -40,6 +40,80 @@
|
||||||
.gps_map {
|
.gps_map {
|
||||||
height: 460px;
|
height: 460px;
|
||||||
}
|
}
|
||||||
|
.gps_config {
|
||||||
|
font-size: 11px;
|
||||||
|
.line {
|
||||||
|
clear: left;
|
||||||
|
}
|
||||||
|
select {
|
||||||
|
float: left;
|
||||||
|
width: 100px;
|
||||||
|
height: 20px;
|
||||||
|
margin: 0 10px 5px 0;
|
||||||
|
border: 1px solid var(--subtleAccent);
|
||||||
|
}
|
||||||
|
.select {
|
||||||
|
>div {
|
||||||
|
&:first-child {
|
||||||
|
float: left;
|
||||||
|
height: 20px;
|
||||||
|
margin-right: 15px;
|
||||||
|
margin-left: 3px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
span {
|
||||||
|
line-height: 20px;
|
||||||
|
}
|
||||||
|
.gui_box {
|
||||||
|
float: left;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
td {
|
||||||
|
&:nth-child(2) {
|
||||||
|
width: 38px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dl.features {
|
||||||
|
dt {
|
||||||
|
float: left;
|
||||||
|
width: 10px;
|
||||||
|
height: 18px;
|
||||||
|
line-height: 18px;
|
||||||
|
input {
|
||||||
|
margin-top: 2px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dd {
|
||||||
|
margin: 0 0 0 20px;
|
||||||
|
height: 18px;
|
||||||
|
line-height: 18px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.freelabel {
|
||||||
|
margin-left: 10px;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.spacer_box {
|
||||||
|
padding-bottom: 10px;
|
||||||
|
float: left;
|
||||||
|
width: calc(100% - 20px);
|
||||||
|
}
|
||||||
|
.select {
|
||||||
|
margin-bottom: 5px;
|
||||||
|
clear: left;
|
||||||
|
padding-bottom: 5px;
|
||||||
|
border-bottom: 1px solid var(--subtleAccent);
|
||||||
|
width: 100%;
|
||||||
|
float: left;
|
||||||
|
&:last-child {
|
||||||
|
border-bottom: none;
|
||||||
|
padding-bottom: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#connect {
|
#connect {
|
||||||
display: none;
|
display: none;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
|
|
@ -37,7 +37,7 @@ const Features = function (config) {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
self._features = features;
|
self._features = features.sort((a, b) => a.name.localeCompare(b.name, window.navigator.language, { ignorePunctuation: true }));
|
||||||
self._featureMask = 0;
|
self._featureMask = 0;
|
||||||
|
|
||||||
self._analyticsChanges = {};
|
self._analyticsChanges = {};
|
||||||
|
|
|
@ -33,7 +33,6 @@ configuration.initialize = function (callback) {
|
||||||
.then(() => MSP.promise(MSPCodes.MSP_FEATURE_CONFIG))
|
.then(() => MSP.promise(MSPCodes.MSP_FEATURE_CONFIG))
|
||||||
.then(() => MSP.promise(MSPCodes.MSP_BEEPER_CONFIG))
|
.then(() => MSP.promise(MSPCodes.MSP_BEEPER_CONFIG))
|
||||||
.then(() => MSP.promise(MSPCodes.MSP_BOARD_ALIGNMENT_CONFIG))
|
.then(() => MSP.promise(MSPCodes.MSP_BOARD_ALIGNMENT_CONFIG))
|
||||||
.then(() => MSP.promise(MSPCodes.MSP_GPS_CONFIG))
|
|
||||||
.then(() => MSP.promise(MSPCodes.MSP_ACC_TRIM))
|
.then(() => MSP.promise(MSPCodes.MSP_ACC_TRIM))
|
||||||
.then(() => MSP.promise(MSPCodes.MSP_ARMING_CONFIG))
|
.then(() => MSP.promise(MSPCodes.MSP_ARMING_CONFIG))
|
||||||
.then(() => MSP.promise(MSPCodes.MSP_RC_DEADBAND))
|
.then(() => MSP.promise(MSPCodes.MSP_RC_DEADBAND))
|
||||||
|
@ -336,99 +335,6 @@ configuration.initialize = function (callback) {
|
||||||
$('input[name="fpvCamAngleDegrees"]').val(FC.RX_CONFIG.fpvCamAngleDegrees);
|
$('input[name="fpvCamAngleDegrees"]').val(FC.RX_CONFIG.fpvCamAngleDegrees);
|
||||||
$('input[name="fpvCamAngleDegrees"]').attr("max", 90);
|
$('input[name="fpvCamAngleDegrees"]').attr("max", 90);
|
||||||
|
|
||||||
// generate GPS
|
|
||||||
const gpsProtocols = [
|
|
||||||
'NMEA',
|
|
||||||
'UBLOX',
|
|
||||||
'MSP',
|
|
||||||
];
|
|
||||||
|
|
||||||
const gpsBaudRates = [
|
|
||||||
'115200',
|
|
||||||
'57600',
|
|
||||||
'38400',
|
|
||||||
'19200',
|
|
||||||
'9600',
|
|
||||||
];
|
|
||||||
|
|
||||||
const gpsSbas = [
|
|
||||||
i18n.getMessage('gpsSbasAutoDetect'),
|
|
||||||
i18n.getMessage('gpsSbasEuropeanEGNOS'),
|
|
||||||
i18n.getMessage('gpsSbasNorthAmericanWAAS'),
|
|
||||||
i18n.getMessage('gpsSbasJapaneseMSAS'),
|
|
||||||
i18n.getMessage('gpsSbasIndianGAGAN'),
|
|
||||||
];
|
|
||||||
if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_43)) {
|
|
||||||
gpsSbas.push(i18n.getMessage('gpsSbasNone'));
|
|
||||||
}
|
|
||||||
|
|
||||||
const gpsProtocolElement = $('select.gps_protocol');
|
|
||||||
const gpsAutoBaudElement = $('input[name="gps_auto_baud"]');
|
|
||||||
const gpsAutoBaudGroup = $('.gps_auto_baud');
|
|
||||||
const gpsAutoConfigElement = $('input[name="gps_auto_config"]');
|
|
||||||
const gpsAutoConfigGroup = $('.gps_auto_config');
|
|
||||||
const gpsUbloxGalileoElement = $('input[name="gps_ublox_galileo"]');
|
|
||||||
const gpsUbloxGalileoGroup = $('.gps_ublox_galileo');
|
|
||||||
const gpsUbloxSbasElement = $('select.gps_ubx_sbas');
|
|
||||||
const gpsUbloxSbasGroup = $('.gps_ubx_sbas');
|
|
||||||
const gpsHomeOnceElement = $('input[name="gps_home_once"]');
|
|
||||||
const gpsBaudrateElement = $('select.gps_baudrate');
|
|
||||||
|
|
||||||
|
|
||||||
for (let protocolIndex = 0; protocolIndex < gpsProtocols.length; protocolIndex++) {
|
|
||||||
gpsProtocolElement.append(`<option value="${protocolIndex}">${gpsProtocols[protocolIndex]}</option>`);
|
|
||||||
}
|
|
||||||
|
|
||||||
gpsProtocolElement.change(function () {
|
|
||||||
FC.GPS_CONFIG.provider = parseInt($(this).val());
|
|
||||||
|
|
||||||
// Call this to enable or disable auto config elements depending on the protocol
|
|
||||||
gpsAutoConfigElement.change();
|
|
||||||
|
|
||||||
}).val(FC.GPS_CONFIG.provider).change();
|
|
||||||
|
|
||||||
gpsAutoBaudElement.prop('checked', FC.GPS_CONFIG.auto_baud === 1);
|
|
||||||
|
|
||||||
gpsAutoConfigElement.change(function () {
|
|
||||||
const checked = $(this).is(":checked");
|
|
||||||
|
|
||||||
const ubloxSelected = FC.GPS_CONFIG.provider === gpsProtocols.indexOf('UBLOX');
|
|
||||||
|
|
||||||
const enableGalileoVisible = checked && ubloxSelected && semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_43);
|
|
||||||
gpsUbloxGalileoGroup.toggle(enableGalileoVisible);
|
|
||||||
|
|
||||||
const enableSbasVisible = checked && ubloxSelected;
|
|
||||||
gpsUbloxSbasGroup.toggle(enableSbasVisible);
|
|
||||||
|
|
||||||
}).prop('checked', FC.GPS_CONFIG.auto_config === 1).change();
|
|
||||||
|
|
||||||
gpsAutoBaudGroup.show();
|
|
||||||
gpsAutoConfigGroup.show();
|
|
||||||
|
|
||||||
gpsUbloxGalileoElement.change(function() {
|
|
||||||
FC.GPS_CONFIG.ublox_use_galileo = $(this).is(':checked') ? 1 : 0;
|
|
||||||
}).prop('checked', FC.GPS_CONFIG.ublox_use_galileo > 0).change();
|
|
||||||
|
|
||||||
for (let sbasIndex = 0; sbasIndex < gpsSbas.length; sbasIndex++) {
|
|
||||||
gpsUbloxSbasElement.append(`<option value="${sbasIndex}">${gpsSbas[sbasIndex]}</option>`);
|
|
||||||
}
|
|
||||||
|
|
||||||
gpsUbloxSbasElement.change(function () {
|
|
||||||
FC.GPS_CONFIG.ublox_sbas = parseInt($(this).val());
|
|
||||||
}).val(FC.GPS_CONFIG.ublox_sbas);
|
|
||||||
|
|
||||||
$('.gps_home_once').toggle(semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_43));
|
|
||||||
gpsHomeOnceElement.change(function() {
|
|
||||||
FC.GPS_CONFIG.home_point_once = $(this).is(':checked') ? 1 : 0;
|
|
||||||
}).prop('checked', FC.GPS_CONFIG.home_point_once > 0).change();
|
|
||||||
|
|
||||||
for (let baudRateIndex = 0; baudRateIndex < gpsBaudRates.length; baudRateIndex++) {
|
|
||||||
gpsBaudrateElement.append(`<option value="${gpsBaudRates[baudRateIndex]}">${gpsBaudRates[baudRateIndex]}</option>`);
|
|
||||||
}
|
|
||||||
|
|
||||||
gpsBaudrateElement.prop("disabled", true);
|
|
||||||
gpsBaudrateElement.parent().hide();
|
|
||||||
|
|
||||||
// fill board alignment
|
// fill board alignment
|
||||||
$('input[name="board_align_roll"]').val(FC.BOARD_ALIGNMENT_CONFIG.roll);
|
$('input[name="board_align_roll"]').val(FC.BOARD_ALIGNMENT_CONFIG.roll);
|
||||||
$('input[name="board_align_pitch"]').val(FC.BOARD_ALIGNMENT_CONFIG.pitch);
|
$('input[name="board_align_pitch"]').val(FC.BOARD_ALIGNMENT_CONFIG.pitch);
|
||||||
|
@ -514,12 +420,10 @@ configuration.initialize = function (callback) {
|
||||||
self.analyticsChanges = {};
|
self.analyticsChanges = {};
|
||||||
|
|
||||||
// fill some data
|
// fill some data
|
||||||
FC.GPS_CONFIG.auto_baud = $('input[name="gps_auto_baud"]').is(':checked') ? 1 : 0;
|
|
||||||
FC.GPS_CONFIG.auto_config = $('input[name="gps_auto_config"]').is(':checked') ? 1 : 0;
|
|
||||||
|
|
||||||
FC.SENSOR_CONFIG.acc_hardware = $('input[id="accHardwareSwitch"]').is(':checked') ? 0 : 1;
|
FC.SENSOR_CONFIG.acc_hardware = $('input[id="accHardwareSwitch"]').is(':checked') ? 0 : 1;
|
||||||
FC.SENSOR_CONFIG.baro_hardware = $('input[id="baroHardwareSwitch"]').is(':checked') ? 0 : 1;
|
FC.SENSOR_CONFIG.baro_hardware = $('input[id="baroHardwareSwitch"]').is(':checked') ? 0 : 1;
|
||||||
FC.SENSOR_CONFIG.mag_hardware = $('input[id="magHardwareSwitch"]').is(':checked') ? 0 : 1;
|
FC.SENSOR_CONFIG.mag_hardware = $('input[id="magHardwareSwitch"]').is(':checked') ? 0 : 1;
|
||||||
|
|
||||||
if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_45)) {
|
if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_45)) {
|
||||||
FC.CONFIG.craftName = $('input[name="craftName"]').val().trim();
|
FC.CONFIG.craftName = $('input[name="craftName"]').val().trim();
|
||||||
FC.CONFIG.pilotName = $('input[name="pilotName"]').val().trim();
|
FC.CONFIG.pilotName = $('input[name="pilotName"]').val().trim();
|
||||||
|
@ -537,7 +441,6 @@ configuration.initialize = function (callback) {
|
||||||
.then(() => MSP.promise(MSPCodes.MSP_SET_FEATURE_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_FEATURE_CONFIG)))
|
.then(() => MSP.promise(MSPCodes.MSP_SET_FEATURE_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_FEATURE_CONFIG)))
|
||||||
.then(() => MSP.promise(MSPCodes.MSP_SET_BEEPER_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_BEEPER_CONFIG)))
|
.then(() => MSP.promise(MSPCodes.MSP_SET_BEEPER_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_BEEPER_CONFIG)))
|
||||||
.then(() => MSP.promise(MSPCodes.MSP_SET_BOARD_ALIGNMENT_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_BOARD_ALIGNMENT_CONFIG)))
|
.then(() => MSP.promise(MSPCodes.MSP_SET_BOARD_ALIGNMENT_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_BOARD_ALIGNMENT_CONFIG)))
|
||||||
.then(() => MSP.promise(MSPCodes.MSP_SET_GPS_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_GPS_CONFIG)))
|
|
||||||
.then(() => MSP.promise(MSPCodes.MSP_SET_RC_DEADBAND, mspHelper.crunch(MSPCodes.MSP_SET_RC_DEADBAND)))
|
.then(() => MSP.promise(MSPCodes.MSP_SET_RC_DEADBAND, mspHelper.crunch(MSPCodes.MSP_SET_RC_DEADBAND)))
|
||||||
.then(() => MSP.promise(MSPCodes.MSP_SET_SENSOR_ALIGNMENT, mspHelper.crunch(MSPCodes.MSP_SET_SENSOR_ALIGNMENT)))
|
.then(() => MSP.promise(MSPCodes.MSP_SET_SENSOR_ALIGNMENT, mspHelper.crunch(MSPCodes.MSP_SET_SENSOR_ALIGNMENT)))
|
||||||
.then(() => MSP.promise(MSPCodes.MSP_SET_ADVANCED_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_ADVANCED_CONFIG)))
|
.then(() => MSP.promise(MSPCodes.MSP_SET_ADVANCED_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_ADVANCED_CONFIG)))
|
||||||
|
|
|
@ -1,23 +1,32 @@
|
||||||
import { i18n } from "../localization";
|
import { i18n } from "../localization";
|
||||||
|
import semver from 'semver';
|
||||||
|
import { API_VERSION_1_43 } from '../data_storage';
|
||||||
import GUI, { TABS } from '../gui';
|
import GUI, { TABS } from '../gui';
|
||||||
import { have_sensor } from "../sensor_helpers";
|
|
||||||
import FC from '../fc';
|
import FC from '../fc';
|
||||||
import MSP from "../msp";
|
import MSP from "../msp";
|
||||||
import MSPCodes from "../msp/MSPCodes";
|
import MSPCodes from "../msp/MSPCodes";
|
||||||
|
import { gui_log } from '../gui_log';
|
||||||
|
import { have_sensor } from "../sensor_helpers";
|
||||||
|
import { mspHelper } from '../msp/MSPHelper';
|
||||||
|
import { reinitializeConnection } from '../serial_backend';
|
||||||
|
import { updateTabList } from '../utils/updateTabList';
|
||||||
|
|
||||||
const gps = {};
|
const gps = {};
|
||||||
gps.initialize = function (callback) {
|
|
||||||
|
|
||||||
if (GUI.active_tab !== 'gps') {
|
gps.initialize = async function (callback) {
|
||||||
GUI.active_tab = 'gps';
|
|
||||||
}
|
GUI.active_tab = 'gps';
|
||||||
|
|
||||||
|
await MSP.promise(MSPCodes.MSP_FEATURE_CONFIG);
|
||||||
|
await MSP.promise(MSPCodes.MSP_GPS_CONFIG);
|
||||||
|
await MSP.promise(MSPCodes.MSP_STATUS);
|
||||||
|
|
||||||
|
load_html();
|
||||||
|
|
||||||
function load_html() {
|
function load_html() {
|
||||||
$('#content').load("./tabs/gps.html", process_html);
|
$('#content').load("./tabs/gps.html", process_html);
|
||||||
}
|
}
|
||||||
|
|
||||||
MSP.send_message(MSPCodes.MSP_STATUS, false, false, load_html);
|
|
||||||
|
|
||||||
function set_online(){
|
function set_online(){
|
||||||
$('#connect').hide();
|
$('#connect').hide();
|
||||||
$('#waiting').show();
|
$('#waiting').show();
|
||||||
|
@ -49,6 +58,122 @@ gps.initialize = function (callback) {
|
||||||
// To not flicker the divs while the fix is unstable
|
// To not flicker the divs while the fix is unstable
|
||||||
let gpsWasFixed = false;
|
let gpsWasFixed = false;
|
||||||
|
|
||||||
|
// GPS Configuration
|
||||||
|
const features_e = $('.tab-gps .features');
|
||||||
|
|
||||||
|
FC.FEATURE_CONFIG.features.generateElements(features_e);
|
||||||
|
|
||||||
|
const checkUpdateGpsControls = () => $('.gpsSettings').toggle(FC.FEATURE_CONFIG.features.isEnabled('GPS'));
|
||||||
|
|
||||||
|
$('input.feature', features_e).on('change', function () {
|
||||||
|
const element = $(this);
|
||||||
|
|
||||||
|
FC.FEATURE_CONFIG.features.updateData(element);
|
||||||
|
updateTabList(FC.FEATURE_CONFIG.features);
|
||||||
|
|
||||||
|
if (element.attr('name') === 'GPS') {
|
||||||
|
checkUpdateGpsControls();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
checkUpdateGpsControls();
|
||||||
|
|
||||||
|
// generate GPS
|
||||||
|
const gpsProtocols = [
|
||||||
|
'NMEA',
|
||||||
|
'UBLOX',
|
||||||
|
'MSP',
|
||||||
|
];
|
||||||
|
|
||||||
|
const gpsBaudRates = [
|
||||||
|
'115200',
|
||||||
|
'57600',
|
||||||
|
'38400',
|
||||||
|
'19200',
|
||||||
|
'9600',
|
||||||
|
];
|
||||||
|
|
||||||
|
const gpsSbas = [
|
||||||
|
i18n.getMessage('gpsSbasAutoDetect'),
|
||||||
|
i18n.getMessage('gpsSbasEuropeanEGNOS'),
|
||||||
|
i18n.getMessage('gpsSbasNorthAmericanWAAS'),
|
||||||
|
i18n.getMessage('gpsSbasJapaneseMSAS'),
|
||||||
|
i18n.getMessage('gpsSbasIndianGAGAN'),
|
||||||
|
];
|
||||||
|
|
||||||
|
if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_43)) {
|
||||||
|
gpsSbas.push(i18n.getMessage('gpsSbasNone'));
|
||||||
|
}
|
||||||
|
|
||||||
|
const gpsProtocolElement = $('select.gps_protocol');
|
||||||
|
const gpsAutoBaudElement = $('input[name="gps_auto_baud"]');
|
||||||
|
const gpsAutoBaudGroup = $('.gps_auto_baud');
|
||||||
|
const gpsAutoConfigElement = $('input[name="gps_auto_config"]');
|
||||||
|
const gpsAutoConfigGroup = $('.gps_auto_config');
|
||||||
|
const gpsUbloxGalileoElement = $('input[name="gps_ublox_galileo"]');
|
||||||
|
const gpsUbloxGalileoGroup = $('.gps_ublox_galileo');
|
||||||
|
const gpsUbloxSbasElement = $('select.gps_ubx_sbas');
|
||||||
|
const gpsUbloxSbasGroup = $('.gps_ubx_sbas');
|
||||||
|
const gpsHomeOnceElement = $('input[name="gps_home_once"]');
|
||||||
|
const gpsBaudrateElement = $('select.gps_baudrate');
|
||||||
|
|
||||||
|
for (let protocolIndex = 0; protocolIndex < gpsProtocols.length; protocolIndex++) {
|
||||||
|
gpsProtocolElement.append(`<option value="${protocolIndex}">${gpsProtocols[protocolIndex]}</option>`);
|
||||||
|
}
|
||||||
|
|
||||||
|
gpsProtocolElement.change(function () {
|
||||||
|
FC.GPS_CONFIG.provider = parseInt($(this).val());
|
||||||
|
|
||||||
|
// Call this to enable or disable auto config elements depending on the protocol
|
||||||
|
gpsAutoConfigElement.change();
|
||||||
|
|
||||||
|
}).val(FC.GPS_CONFIG.provider).change();
|
||||||
|
|
||||||
|
gpsAutoBaudElement.prop('checked', FC.GPS_CONFIG.auto_baud === 1);
|
||||||
|
|
||||||
|
gpsAutoConfigElement.on('change', function () {
|
||||||
|
const checked = $(this).is(":checked");
|
||||||
|
|
||||||
|
const ubloxSelected = FC.GPS_CONFIG.provider === gpsProtocols.indexOf('UBLOX');
|
||||||
|
const mspSelected = FC.GPS_CONFIG.provider === gpsProtocols.indexOf('MSP');
|
||||||
|
|
||||||
|
const enableGalileoVisible = checked && ubloxSelected && semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_43);
|
||||||
|
gpsUbloxGalileoGroup.toggle(enableGalileoVisible);
|
||||||
|
|
||||||
|
const enableSbasVisible = checked && ubloxSelected;
|
||||||
|
gpsUbloxSbasGroup.toggle(enableSbasVisible);
|
||||||
|
|
||||||
|
gpsAutoBaudGroup.toggle(ubloxSelected || mspSelected);
|
||||||
|
gpsAutoConfigGroup.toggle(ubloxSelected || mspSelected);
|
||||||
|
|
||||||
|
}).prop('checked', FC.GPS_CONFIG.auto_config === 1).trigger('change');
|
||||||
|
|
||||||
|
gpsUbloxGalileoElement.change(function() {
|
||||||
|
FC.GPS_CONFIG.ublox_use_galileo = $(this).is(':checked') ? 1 : 0;
|
||||||
|
}).prop('checked', FC.GPS_CONFIG.ublox_use_galileo > 0).change();
|
||||||
|
|
||||||
|
for (let sbasIndex = 0; sbasIndex < gpsSbas.length; sbasIndex++) {
|
||||||
|
gpsUbloxSbasElement.append(`<option value="${sbasIndex}">${gpsSbas[sbasIndex]}</option>`);
|
||||||
|
}
|
||||||
|
|
||||||
|
gpsUbloxSbasElement.change(function () {
|
||||||
|
FC.GPS_CONFIG.ublox_sbas = parseInt($(this).val());
|
||||||
|
}).val(FC.GPS_CONFIG.ublox_sbas);
|
||||||
|
|
||||||
|
$('.gps_home_once').toggle(semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_43));
|
||||||
|
gpsHomeOnceElement.change(function() {
|
||||||
|
FC.GPS_CONFIG.home_point_once = $(this).is(':checked') ? 1 : 0;
|
||||||
|
}).prop('checked', FC.GPS_CONFIG.home_point_once > 0).change();
|
||||||
|
|
||||||
|
for (const baudRate of gpsBaudRates) {
|
||||||
|
gpsBaudrateElement.append(`<option value="${baudRate}">${baudRate}</option>`);
|
||||||
|
}
|
||||||
|
|
||||||
|
gpsBaudrateElement.prop("disabled", true);
|
||||||
|
gpsBaudrateElement.parent().hide();
|
||||||
|
|
||||||
|
// End GPS Configuration
|
||||||
|
|
||||||
function update_ui() {
|
function update_ui() {
|
||||||
const lat = FC.GPS_DATA.lat / 10000000;
|
const lat = FC.GPS_DATA.lat / 10000000;
|
||||||
const lon = FC.GPS_DATA.lon / 10000000;
|
const lon = FC.GPS_DATA.lon / 10000000;
|
||||||
|
@ -80,6 +205,7 @@ gps.initialize = function (callback) {
|
||||||
<td style="width: 53%;" i18n="gpsSignalStatusQly">${i18n.getMessage('gpsSignalStatusQly')}</td>
|
<td style="width: 53%;" i18n="gpsSignalStatusQly">${i18n.getMessage('gpsSignalStatusQly')}</td>
|
||||||
</tr>
|
</tr>
|
||||||
`);
|
`);
|
||||||
|
|
||||||
if (FC.GPS_DATA.chn.length <= 16) {
|
if (FC.GPS_DATA.chn.length <= 16) {
|
||||||
// Legacy code path: old BF firmware or old ublox module
|
// Legacy code path: old BF firmware or old ublox module
|
||||||
for (let i = 0; i < FC.GPS_DATA.chn.length; i++) {
|
for (let i = 0; i < FC.GPS_DATA.chn.length; i++) {
|
||||||
|
@ -155,11 +281,9 @@ gps.initialize = function (callback) {
|
||||||
message.action = 'nofix';
|
message.action = 'nofix';
|
||||||
frame.contentWindow.postMessage(message, '*');
|
frame.contentWindow.postMessage(message, '*');
|
||||||
}
|
}
|
||||||
}else{
|
} else {
|
||||||
gpsWasFixed = false;
|
gpsWasFixed = false;
|
||||||
$('#connect').show();
|
set_offline();
|
||||||
$('#waiting').hide();
|
|
||||||
$('#loadmap').hide();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -216,9 +340,31 @@ gps.initialize = function (callback) {
|
||||||
frame.contentWindow.postMessage(message, '*');
|
frame.contentWindow.postMessage(message, '*');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$('a.save').on('click', function() {
|
||||||
|
// fill some data
|
||||||
|
FC.GPS_CONFIG.auto_baud = $('input[name="gps_auto_baud"]').is(':checked') ? 1 : 0;
|
||||||
|
FC.GPS_CONFIG.auto_config = $('input[name="gps_auto_config"]').is(':checked') ? 1 : 0;
|
||||||
|
|
||||||
|
async function saveConfiguration() {
|
||||||
|
await MSP.promise(MSPCodes.MSP_SET_FEATURE_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_FEATURE_CONFIG));
|
||||||
|
await MSP.promise(MSPCodes.MSP_SET_GPS_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_GPS_CONFIG));
|
||||||
|
await MSP.promise(MSPCodes.MSP_EEPROM_WRITE);
|
||||||
|
reboot();
|
||||||
|
}
|
||||||
|
|
||||||
|
function reboot() {
|
||||||
|
gui_log(i18n.getMessage('configurationEepromSaved'));
|
||||||
|
|
||||||
|
GUI.tab_switch_cleanup(function() {
|
||||||
|
MSP.send_message(MSPCodes.MSP_SET_REBOOT, false, false, reinitializeConnection);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
saveConfiguration();
|
||||||
|
});
|
||||||
|
|
||||||
GUI.content_ready(callback);
|
GUI.content_ready(callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
gps.cleanup = function (callback) {
|
gps.cleanup = function (callback) {
|
||||||
|
|
|
@ -135,7 +135,7 @@
|
||||||
<th i18n="configurationFeatureName"></th>
|
<th i18n="configurationFeatureName"></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody class="features other" id="noline">
|
<tbody class="features gps other" id="noline">
|
||||||
<!-- table generated here -->
|
<!-- table generated here -->
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
@ -143,82 +143,6 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- END OTHER FUTURES-->
|
<!-- END OTHER FUTURES-->
|
||||||
|
|
||||||
<!-- GPS -->
|
|
||||||
<div class="gps">
|
|
||||||
<div class="gui_box grey gps">
|
|
||||||
<div class="gui_box_titlebar">
|
|
||||||
<div class="spacer_box_title" i18n="configurationGPS"></div>
|
|
||||||
</div>
|
|
||||||
<div class="spacer_box">
|
|
||||||
<table class="featuresMultiple">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th i18n="configurationFeatureEnabled"></th>
|
|
||||||
<th i18n="configurationFeatureDescription"></th>
|
|
||||||
<th i18n="configurationFeatureName"></th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody class="features gps">
|
|
||||||
<!-- table generated here -->
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<div class="gpsSettings">
|
|
||||||
<div style="float:left; width:100%;">
|
|
||||||
<div class="note">
|
|
||||||
<p i18n="configurationGPSHelp"></p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="select line">
|
|
||||||
<select class="gps_protocol">
|
|
||||||
<!-- list generated here -->
|
|
||||||
</select>
|
|
||||||
<span i18n="configurationGPSProtocol"></span>
|
|
||||||
</div>
|
|
||||||
<div class="select line">
|
|
||||||
<select class="gps_baudrate">
|
|
||||||
<!-- list generated here -->
|
|
||||||
</select>
|
|
||||||
<span i18n="configurationGPSBaudrate"></span>
|
|
||||||
</div>
|
|
||||||
<div class="select gps_auto_baud">
|
|
||||||
<div>
|
|
||||||
<input type="checkbox" name="gps_auto_baud" class="toggle" />
|
|
||||||
</div>
|
|
||||||
<span class="freelabel" i18n="configurationGPSAutoBaud"></span>
|
|
||||||
</div>
|
|
||||||
<div class="select gps_auto_config">
|
|
||||||
<div>
|
|
||||||
<input type="checkbox" name="gps_auto_config" class="toggle" />
|
|
||||||
</div>
|
|
||||||
<span class="freelabel" i18n="configurationGPSAutoConfig"></span>
|
|
||||||
</div>
|
|
||||||
<div class="select gps_ublox_galileo">
|
|
||||||
<div>
|
|
||||||
<input type="checkbox" name="gps_ublox_galileo" class="toggle" />
|
|
||||||
</div>
|
|
||||||
<span class="freelabel" i18n="configurationGPSGalileo"></span>
|
|
||||||
<div class="helpicon cf_tip" i18n_title="configurationGPSGalileoHelp"></div>
|
|
||||||
</div>
|
|
||||||
<div class="select gps_home_once">
|
|
||||||
<div>
|
|
||||||
<input type="checkbox" name="gps_home_once" class="toggle" />
|
|
||||||
</div>
|
|
||||||
<span class="freelabel" i18n="configurationGPSHomeOnce"></span>
|
|
||||||
<div class="helpicon cf_tip" i18n_title="configurationGPSHomeOnceHelp"></div>
|
|
||||||
</div>
|
|
||||||
<div class="select line gps_ubx_sbas">
|
|
||||||
<select class="gps_ubx_sbas">
|
|
||||||
<!-- list generated here -->
|
|
||||||
</select>
|
|
||||||
<span i18n="configurationGPSubxSbas"></span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<!-- END GPS-->
|
|
||||||
</div> <!-- END grid-col col6 -->
|
</div> <!-- END grid-col col6 -->
|
||||||
|
|
||||||
<div class="grid-col col6">
|
<div class="grid-col col6">
|
||||||
|
@ -416,10 +340,12 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="content_toolbar">
|
<div class="content_toolbar">
|
||||||
<div class="btn save_btn">
|
<div class="btn save_btn">
|
||||||
<a class="save" href="#" i18n="configurationButtonSave"></a>
|
<a class="save" href="#" i18n="configurationButtonSave"></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,13 +1,83 @@
|
||||||
<div class="tab-gps">
|
<div class="tab-gps toolbar_fixed_bottom">
|
||||||
<div class="content_wrapper">
|
<div class="content_wrapper">
|
||||||
<div class="tab_title" i18n="tabGPS">GPS</div>
|
<div class="tab_title" i18n="tabGPS">GPS</div>
|
||||||
<div class="cf_doc_version_bt">
|
<div class="cf_doc_version_bt">
|
||||||
<a id="button-documentation" href="" target="_blank" rel="noopener noreferrer"></a>
|
<a id="button-documentation" href="" target="_blank" rel="noopener noreferrer"></a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="grid-row">
|
<div class="grid-row">
|
||||||
<div class="grid-col col5">
|
<div class="grid-col col5">
|
||||||
|
|
||||||
|
<div class="gui_box grey gps">
|
||||||
|
<div class="gui_box_titlebar">
|
||||||
|
<div class="spacer_box_title" i18n="configurationGPS"></div>
|
||||||
|
</div>
|
||||||
|
<div class="spacer_box">
|
||||||
|
<div class="gps_config">
|
||||||
|
<div style="float:left; width:100%;">
|
||||||
|
<div class="select line">
|
||||||
|
<select class="gps_protocol">
|
||||||
|
<!-- list generated here -->
|
||||||
|
</select>
|
||||||
|
<span i18n="configurationGPSProtocol"></span>
|
||||||
|
</div>
|
||||||
|
<div class="select line">
|
||||||
|
<select class="gps_baudrate">
|
||||||
|
<!-- list generated here -->
|
||||||
|
</select>
|
||||||
|
<span i18n="configurationGPSBaudrate"></span>
|
||||||
|
</div>
|
||||||
|
<div class="select gps_auto_baud">
|
||||||
|
<div>
|
||||||
|
<input type="checkbox" name="gps_auto_baud" class="toggle" />
|
||||||
|
</div>
|
||||||
|
<span class="freelabel" i18n="configurationGPSAutoBaud"></span>
|
||||||
|
</div>
|
||||||
|
<div class="select gps_auto_config">
|
||||||
|
<div>
|
||||||
|
<input type="checkbox" name="gps_auto_config" class="toggle" />
|
||||||
|
</div>
|
||||||
|
<span class="freelabel" i18n="configurationGPSAutoConfig"></span>
|
||||||
|
</div>
|
||||||
|
<div class="select gps_ublox_galileo">
|
||||||
|
<div>
|
||||||
|
<input type="checkbox" name="gps_ublox_galileo" class="toggle" />
|
||||||
|
</div>
|
||||||
|
<span class="freelabel" i18n="configurationGPSGalileo"></span>
|
||||||
|
<div class="helpicon cf_tip" i18n_title="configurationGPSGalileoHelp"></div>
|
||||||
|
</div>
|
||||||
|
<div class="select gps_home_once">
|
||||||
|
<div>
|
||||||
|
<input type="checkbox" name="gps_home_once" class="toggle" />
|
||||||
|
</div>
|
||||||
|
<span class="freelabel" i18n="configurationGPSHomeOnce"></span>
|
||||||
|
<div class="helpicon cf_tip" i18n_title="configurationGPSHomeOnceHelp"></div>
|
||||||
|
</div>
|
||||||
|
<div class="select line gps_ubx_sbas">
|
||||||
|
<select class="gps_ubx_sbas">
|
||||||
|
<!-- list generated here -->
|
||||||
|
</select>
|
||||||
|
<span i18n="configurationGPSubxSbas"></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="gui_box grey">
|
||||||
|
<div class="gui_box_titlebar">
|
||||||
|
<div class="spacer_box_title" i18n="gpsSignalStrHead"></div>
|
||||||
|
</div>
|
||||||
|
<div class="spacer_box GPS_signal_strength">
|
||||||
|
<table class="cf_table">
|
||||||
|
<!-- Contents generated in gps.js -->
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="grid-col col7">
|
||||||
|
|
||||||
<div class="gui_box grey">
|
<div class="gui_box grey">
|
||||||
<div class="gui_box_titlebar">
|
<div class="gui_box_titlebar">
|
||||||
<div class="spacer_box_title" i18n="gpsHead"></div>
|
<div class="spacer_box_title" i18n="gpsHead"></div>
|
||||||
|
@ -46,18 +116,6 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="gui_box grey">
|
|
||||||
<div class="gui_box_titlebar">
|
|
||||||
<div class="spacer_box_title" i18n="gpsSignalStrHead"></div>
|
|
||||||
</div>
|
|
||||||
<div class="spacer_box GPS_signal_strength">
|
|
||||||
<table class="cf_table">
|
|
||||||
<!-- Contents generated in gps.js -->
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="grid-col col7">
|
|
||||||
<div class="gui_box grey gps_map">
|
<div class="gui_box grey gps_map">
|
||||||
<div class="gui_box_titlebar" style="margin-bottom: 0px;">
|
<div class="gui_box_titlebar" style="margin-bottom: 0px;">
|
||||||
<div class="spacer_box_title" i18n="gpsMapHead"></div>
|
<div class="spacer_box_title" i18n="gpsMapHead"></div>
|
||||||
|
@ -65,9 +123,8 @@
|
||||||
<div id="connect" i18n="gpsMapMessage1">
|
<div id="connect" i18n="gpsMapMessage1">
|
||||||
<div class="default_btn" style="width:50px; margin-left:auto; margin-right:auto; float:none;"><a id="check">retry</a></div>
|
<div class="default_btn" style="width:50px; margin-left:auto; margin-right:auto; float:none;"><a id="check">retry</a></div>
|
||||||
</div>
|
</div>
|
||||||
<div id="waiting" >
|
<div id="waiting">
|
||||||
<div class="info" i18n="gpsMapMessage2">
|
<div class="info" i18n="gpsMapMessage2"></div>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div id="loadmap">
|
<div id="loadmap">
|
||||||
<webview id="map" class="map" src="tabs/map.html" partition="persist:map"></webview>
|
<webview id="map" class="map" src="tabs/map.html" partition="persist:map"></webview>
|
||||||
|
@ -76,9 +133,14 @@
|
||||||
<a href="#" id="zoom_out">–</a>
|
<a href="#" id="zoom_out">–</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="content_toolbar">
|
||||||
|
<div class="btn save_btn">
|
||||||
|
<a class="save" href="#" i18n="configurationButtonSave"></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
Loading…
Reference in New Issue