diff --git a/index.html b/index.html
index e6442d74..e3f9cc4d 100644
--- a/index.html
+++ b/index.html
@@ -2830,6 +2830,39 @@
Advanced User Settings
+
diff --git a/js/flightlog_fields_presenter.js b/js/flightlog_fields_presenter.js
index dcc4cd81..332650a0 100644
--- a/js/flightlog_fields_presenter.js
+++ b/js/flightlog_fields_presenter.js
@@ -851,6 +851,24 @@ function FlightLogFieldPresenter() {
return enumNames[value];
};
+ /**
+ * Function to translate altitudes from the default meters
+ * to the user selected measurement unit.
+ * @param altitude String: Altitude in meters.
+ * @param altitudeUnits Integer: 1 for meters, 2 for feet.
+ *
+ * @returns String: readable meters in selected unit.
+ */
+
+ FlightLogFieldPresenter.decodeCorrectAltitude = function(altitude, altitudeUnits) {
+ switch (altitudeUnits) {
+ case 1: // Keep it in meters.
+ return (altitude).toFixed(2) + " m";
+ case 2: // Translate it into feet.
+ return (altitude * 3.28).toFixed(2) + " ft";
+ }
+ };
+
/**
* Attempt to decode the given raw logged value into something more human readable, or return an empty string if
* no better representation is available.
@@ -967,7 +985,7 @@ function FlightLogFieldPresenter() {
return (value / Math.PI * 180).toFixed(1) + "°";
case 'baroAlt':
- return (value / 100).toFixed(1) + " m";
+ return FlightLogFieldPresenter.decodeCorrectAltitude((value/100), userSettings.altitudeUnits);
case 'flightModeFlags':
return FlightLogFieldPresenter.presentFlags(value, FLIGHT_LOG_FLIGHT_MODE_NAME);
@@ -991,9 +1009,16 @@ function FlightLogFieldPresenter() {
case 'GPS_coord[1]':
return `${(value/10000000).toFixed(5)}`;
case 'GPS_altitude':
- return `${(value/10).toFixed(2)} m`;
+ return FlightLogFieldPresenter.decodeCorrectAltitude((value/10), userSettings.altitudeUnits);
case 'GPS_speed':
- return `${(value/100).toFixed(2)} m/s`;
+ switch (userSettings.speedUnits) {
+ case 1:
+ return `${(value/100).toFixed(2)} m/s`;
+ case 2:
+ return `${((value/100) * 3.6).toFixed(2)} kph`;
+ case 3:
+ return `${((value/100) * 2.2369).toFixed(2)} mph`;
+ }
case 'GPS_ground_course':
return `${(value/10).toFixed(1)} °`;
diff --git a/js/user_settings_dialog.js b/js/user_settings_dialog.js
index 9f3aea00..28f978b4 100644
--- a/js/user_settings_dialog.js
+++ b/js/user_settings_dialog.js
@@ -44,6 +44,8 @@ function UserSettingsDialog(dialog, onLoad, onSave) {
stickTrails : false, // Show stick trails?
stickInvertYaw : false, // Invert yaw in stick display?
legendUnits : true, // Show units on legend?
+ speedUnits : 1, // Default speed mode = m/s
+ altitudeUnits : 1, // Default altitude mode = meters
gapless : false,
drawCraft : "3D",
hasCraft : true,
@@ -314,6 +316,14 @@ function UserSettingsDialog(dialog, onLoad, onSave) {
currentSettings.legendUnits = $(this).is(":checked");
});
+ $('input[type=radio][name=speed-mode]').change(function() {
+ currentSettings.speedUnits = parseInt($(this).val());
+ });
+
+ $('input[type=radio][name=altitude-mode]').change(function() {
+ currentSettings.altitudeUnits = parseInt($(this).val());
+ });
+
// Load Custom Logo
function readURL(input) {
if (input.files && input.files[0]) {
@@ -390,7 +400,6 @@ function UserSettingsDialog(dialog, onLoad, onSave) {
$(".legend-units").prop('checked', currentSettings.legendUnits);
}
-
mixerListSelection(currentSettings.mixerConfiguration); // select current mixer configuration
stickModeSelection(currentSettings.stickMode);
@@ -398,6 +407,9 @@ function UserSettingsDialog(dialog, onLoad, onSave) {
$('select.mixerList').val(currentSettings.mixerConfiguration);
$('input:radio[name="stick-mode"]').filter('[value="' + currentSettings.stickMode + '"]').attr('checked', true);
+ $('input:radio[name="speed-mode"]').filter('[value="' + currentSettings.speedUnits + '"]').attr('checked', true);
+ $('input:radio[name="altitude-mode"]').filter('[value="' + currentSettings.altitudeUnits + '"]').attr('checked', true);
+
$('.stick-mode-group input[name="stick-top"]').val(parseInt(currentSettings.sticks.top));
$('.stick-mode-group input[name="stick-left"]').val(parseInt(currentSettings.sticks.left));
$('.stick-mode-group input[name="stick-size"]').val(parseInt(currentSettings.sticks.size));