diff --git a/locales/en/messages.json b/locales/en/messages.json index d0482008..4ae8a225 100644 --- a/locales/en/messages.json +++ b/locales/en/messages.json @@ -1455,7 +1455,7 @@ "description": "Option to use Galileo in the GPS configuration" }, "configurationGPSGalileoHelp": { - "message": "When enabled, this removes the QZSS system (Japanese) and replaces it for the Galileo system (European).", + "message": "When enabled, the GPS module will also track the Galileo satellite system, usually resulting in more locked satellites. On Betaflight 4.2.x or earlier, it also disables the QZSS augmentation system.", "description": "Help text for the option to use Galileo in the GPS configuration" }, "configurationGPSHomeOnce": { @@ -2432,11 +2432,47 @@ "gpsSignalStr": { "message": "Signal Strength" }, + "gpsSignalGnssId": { + "message": "Gnss ID" + }, "gpsSignalSatId": { "message": "Sat ID" }, - "gpsSignalQty": { - "message": "Qty" + "gpsSignalStatusQly": { + "message": "Status / Quality" + }, + "gnssQualityNoSignal": { + "message": "no signal" + }, + "gnssQualitySearching": { + "message": "searching" + }, + "gnssQualityAcquired": { + "message": "acquired" + }, + "gnssQualityUnusable": { + "message": "unusable" + }, + "gnssQualityLocked": { + "message": "locked" + }, + "gnssQualityFullyLocked": { + "message": "fully locked" + }, + "gnssUsedUnused": { + "message": "unused" + }, + "gnssUsedUsed": { + "message": "used" + }, + "gnssHealthyUnknown": { + "message": "unknown" + }, + "gnssHealthyHealthy": { + "message": "healthy" + }, + "gnssHealthyUnhealthy": { + "message": "unhealthy" }, "motorsVoltage": { diff --git a/src/css/tabs/gps.css b/src/css/tabs/gps.css index 563f2504..5c9bbccd 100644 --- a/src/css/tabs/gps.css +++ b/src/css/tabs/gps.css @@ -1,3 +1,16 @@ +.tab-gps .GPS_signal_strength table td:nth-child(2) { + text-align: center; +} + +.tab-gps .GPS_signal_strength table td:nth-child(3) { + text-align: center; +} + +.tab-gps .GPS_signal_strength table td:nth-child(4) { + text-align: left; + padding-left: 10px; +} + .tab-gps progress { width: 100%; border-radius: 3px; diff --git a/src/js/tabs/gps.js b/src/js/tabs/gps.js index bf5c970d..ca5df286 100644 --- a/src/js/tabs/gps.js +++ b/src/js/tabs/gps.js @@ -48,6 +48,11 @@ TABS.gps.initialize = function (callback) { const lat = FC.GPS_DATA.lat / 10000000; const lon = FC.GPS_DATA.lon / 10000000; const url = `https://maps.google.com/?q=${lat},${lon}`; + const gnssArray = ['GPS', 'SBAS', 'Galileo', 'BeiDou', 'IMES', 'QZSS', 'Glonass']; + const qualityArray = ['gnssQualityNoSignal', 'gnssQualitySearching', 'gnssQualityAcquired', 'gnssQualityUnusable', 'gnssQualityLocked', + 'gnssQualityFullyLocked', 'gnssQualityFullyLocked', 'gnssQualityFullyLocked']; + const usedArray = ['gnssUsedUnused', 'gnssUsedUsed']; + const healthyArray = ['gnssHealthyUnknown', 'gnssHealthyHealthy', 'gnssHealthyUnhealthy', 'gnssHealthyUnknown']; let alt = FC.GPS_DATA.alt; if (semver.lt(FC.CONFIG.apiVersion, API_VERSION_1_39)) { alt = alt / 10; @@ -64,12 +69,55 @@ TABS.gps.initialize = function (callback) { // Update GPS Signal Strengths const eSsTable = $('div.GPS_signal_strength table tr:not(.titles)'); - for (let i = 0; i < FC.GPS_DATA.chn.length; i++) { - const row = eSsTable.eq(i); + if (FC.GPS_DATA.chn.length <= 16) { + // Legacy code path: old BF firmware or old ublox module + for (let i = 0; i < FC.GPS_DATA.chn.length; i++) { + const row = eSsTable.eq(i); - $('td', row).eq(0).text(FC.GPS_DATA.svid[i]); - $('td', row).eq(1).text(FC.GPS_DATA.quality[i]); - $('td', row).eq(2).find('progress').val(FC.GPS_DATA.cno[i]); + $('td', row).eq(0).text('-'); + $('td', row).eq(1).text(FC.GPS_DATA.svid[i]); + $('td', row).eq(2).find('progress').val(FC.GPS_DATA.cno[i]); + $('td', row).eq(3).text(FC.GPS_DATA.quality[i]); + } + // Cleanup the rest of the table + for (let i = FC.GPS_DATA.chn.length; i < 32; i++) { + const row = eSsTable.eq(i); + + $('td', row).eq(0).text('-'); + $('td', row).eq(1).text('-'); + $('td', row).eq(2).find('progress').val(0); + $('td', row).eq(3).text(' '); + } + } else { + // M8N/M9N on newer firmware + + const maxUIChannels = 32; //the list in html can only show 32 channels but future firmware could send more + let channels = Math.min(maxUIChannels, FC.GPS_DATA.chn.length); + + for (let i = 0; i < channels; i++) { + const row = eSsTable.eq(i); + + if (FC.GPS_DATA.chn[i] <= 6) { + $('td', row).eq(0).text(gnssArray[FC.GPS_DATA.chn[i]]); + } else { + $('td', row).eq(0).text('-'); + } + + if (FC.GPS_DATA.chn[i] >= 7) { + $('td', row).eq(1).text('-'); + $('td', row).eq(2).find('progress').val(0); + $('td', row).eq(3).text(' '); + } else { + $('td', row).eq(1).text(FC.GPS_DATA.svid[i]); + $('td', row).eq(2).find('progress').val(FC.GPS_DATA.cno[i]); + + const quality = i18n.getMessage(qualityArray[FC.GPS_DATA.quality[i] & 0x7]); + const used = i18n.getMessage(usedArray[(FC.GPS_DATA.quality[i] & 0x8) >> 3]); + const healthy = i18n.getMessage(healthyArray[(FC.GPS_DATA.quality[i] & 0x30) >> 4]); + + $('td', row).eq(3).text(`${quality} | ${used} | ${healthy}`); + } + } } const message = { diff --git a/src/tabs/gps.html b/src/tabs/gps.html index 90392e76..5ce8937a 100644 --- a/src/tabs/gps.html +++ b/src/tabs/gps.html @@ -7,7 +7,7 @@