diff --git a/locales/en/messages.json b/locales/en/messages.json index e83656c9..9fe18521 100755 --- a/locales/en/messages.json +++ b/locales/en/messages.json @@ -2962,6 +2962,10 @@ "gpsPositionalDop": { "message": "Positional DOP:" }, + "gpsMagneticDeclination": { + "message": "$t(configurationMagDeclination):", + "description": "Do not translate" + }, "gpsSignalStrHead": { "message": "GPS Signal Strength" }, diff --git a/src/css/main.less b/src/css/main.less index ebee8b28..bdb2ce0e 100644 --- a/src/css/main.less +++ b/src/css/main.less @@ -1512,6 +1512,31 @@ table { &.ready { background-color: var(--success-500); } + &.ideal { + // should be blue + background-color: blue; + } + &.excellent { + // should be green + background-color: var(--success-500); + } + &.good { + // should be orange + background-color: var(--warning-500); + } + &.moderate { + // should be yellow + background-color: var(--primary-500); + color: black; + } + &.fair { + // should be red + background-color: var(--error-500); + } + &.poor { + // should be gray + background-color: var(--surface-500); + } } .buildInfoBtn { position: relative; diff --git a/src/js/tabs/gps.js b/src/js/tabs/gps.js index 788c5115..c2047d43 100644 --- a/src/js/tabs/gps.js +++ b/src/js/tabs/gps.js @@ -314,6 +314,33 @@ gps.initialize = async function (callback) { } } + function getPositionalDopQuality(positionalDop) { + // See https://en.wikipedia.org/wiki/Dilution_of_precision_(navigation) + let qualityColor; + let stars; + if (positionalDop < 1) { + qualityColor = "ideal"; // blue + stars = "★★★★★"; + } else if (positionalDop < 2) { + qualityColor = "excellent"; // green + stars = "★★★★☆"; + } else if (positionalDop < 5) { + qualityColor = "good"; // orange + stars = "★★★☆☆"; + } else if (positionalDop < 10) { + qualityColor = "moderate"; // yellow + stars = "★★☆☆☆"; + } else if (positionalDop < 20) { + qualityColor = "fair"; // red + stars = "★☆☆☆☆"; + } else { + qualityColor = "poor"; // grey + stars = "☆☆☆☆☆"; + } + + return { qualityColor, stars }; + } + function update_ui() { const lat = FC.GPS_DATA.lat / 10000000; const lon = FC.GPS_DATA.lon / 10000000; @@ -343,8 +370,12 @@ gps.initialize = async function (callback) { $(".GPS_info td.distToHome").text(`${FC.GPS_DATA.distanceToHome} m`); if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_46)) { - const positionalDop = FC.GPS_DATA.positionalDop / 100; - $(".GPS_info td.positionalDop").text(`${positionalDop.toFixed(2)}`); + const positionalDop = (FC.GPS_DATA.positionalDop / 100).toFixed(2); + const { qualityColor, stars } = getPositionalDopQuality(positionalDop); + const pdopHtml = `${stars} ${positionalDop}`; + + $(".GPS_info td.positionalDop").html(pdopHtml); + if (hasMag) { $(".GPS_info td.magDeclination").text( `${FC.COMPASS_CONFIG.mag_declination.toFixed(1)} ${gpsUnitText}`, diff --git a/src/tabs/gps.html b/src/tabs/gps.html index 70905925..c89b4a60 100755 --- a/src/tabs/gps.html +++ b/src/tabs/gps.html @@ -103,7 +103,7 @@ - 0.0000 deg + @@ -118,7 +118,7 @@ - +