From e89291a6af401562a7a596600b769b24cca15dc1 Mon Sep 17 00:00:00 2001 From: AdaSzi115026 <81822538+AdaSzi@users.noreply.github.com> Date: Fri, 6 Nov 2026 00:47:33 +0100 Subject: [PATCH 1/3] Add GPS Viewer A GNSS receiver status app: fix, satellites in view and used, signal strength, sky plot, position, speed and time. Can record the receiver's NMEA output to the SD card. --- Apps/GpsViewer/CHANGELOG.md | 33 + Apps/GpsViewer/CMakeLists.txt | 13 + Apps/GpsViewer/LICENSE | 674 ++++++++++++++++ Apps/GpsViewer/README.md | 141 ++++ Apps/GpsViewer/THIRD_PARTY.md | 6 + Apps/GpsViewer/docs/night.png | Bin 0 -> 6342 bytes Apps/GpsViewer/docs/position.png | Bin 0 -> 6476 bytes Apps/GpsViewer/docs/signal.png | Bin 0 -> 5037 bytes Apps/GpsViewer/docs/sky.png | Bin 0 -> 22206 bytes Apps/GpsViewer/docs/status.png | Bin 0 -> 5697 bytes Apps/GpsViewer/main/CMakeLists.txt | 7 + Apps/GpsViewer/main/Source/app/AppContext.h | 74 ++ Apps/GpsViewer/main/Source/app/Main.cpp | 168 ++++ .../GpsViewer/main/Source/app/MessageCard.cpp | 135 ++++ .../GpsViewer/main/Source/app/PositionTab.cpp | 247 ++++++ Apps/GpsViewer/main/Source/app/Recorder.cpp | 89 +++ Apps/GpsViewer/main/Source/app/Recorder.h | 33 + Apps/GpsViewer/main/Source/app/SignalTab.cpp | 337 ++++++++ Apps/GpsViewer/main/Source/app/SkyTab.cpp | 238 ++++++ Apps/GpsViewer/main/Source/app/Sources.cpp | 220 ++++++ Apps/GpsViewer/main/Source/app/Sources.h | 56 ++ Apps/GpsViewer/main/Source/app/StatusTab.cpp | 205 +++++ Apps/GpsViewer/main/Source/app/Tabs.h | 170 ++++ Apps/GpsViewer/main/Source/app/Theme.cpp | 94 +++ Apps/GpsViewer/main/Source/app/Ui.cpp | 738 ++++++++++++++++++ Apps/GpsViewer/main/Source/app/Ui.h | 21 + Apps/GpsViewer/main/Source/app/Widgets.cpp | 405 ++++++++++ Apps/GpsViewer/main/Source/app/Widgets.h | 55 ++ Apps/GpsViewer/main/Source/core/Format.cpp | 163 ++++ Apps/GpsViewer/main/Source/core/Format.h | 37 + Apps/GpsViewer/main/Source/core/GnssModel.cpp | 210 +++++ Apps/GpsViewer/main/Source/core/GnssModel.h | 100 +++ Apps/GpsViewer/main/Source/core/GnssTypes.cpp | 77 ++ Apps/GpsViewer/main/Source/core/GnssTypes.h | 57 ++ .../GpsViewer/main/Source/core/NmeaWriter.cpp | 204 +++++ Apps/GpsViewer/main/Source/core/NmeaWriter.h | 15 + .../main/Source/core/SatelliteDb.cpp | 254 ++++++ Apps/GpsViewer/main/Source/core/SatelliteDb.h | 68 ++ Apps/GpsViewer/main/Source/core/Settings.cpp | 141 ++++ Apps/GpsViewer/main/Source/core/Settings.h | 22 + Apps/GpsViewer/main/Source/core/SunTimes.cpp | 83 ++ Apps/GpsViewer/main/Source/core/SunTimes.h | 25 + .../main/Source/third_party/minmea/COPYING | 13 + .../Source/third_party/minmea/LICENSE.MIT | 9 + .../Source/third_party/minmea/LICENSE.grants | 7 + .../main/Source/third_party/minmea/minmea.c | 679 ++++++++++++++++ .../main/Source/third_party/minmea/minmea.h | 295 +++++++ Apps/GpsViewer/manifest.properties | 11 + 48 files changed, 6629 insertions(+) create mode 100644 Apps/GpsViewer/CHANGELOG.md create mode 100644 Apps/GpsViewer/CMakeLists.txt create mode 100644 Apps/GpsViewer/LICENSE create mode 100644 Apps/GpsViewer/README.md create mode 100644 Apps/GpsViewer/THIRD_PARTY.md create mode 100644 Apps/GpsViewer/docs/night.png create mode 100644 Apps/GpsViewer/docs/position.png create mode 100644 Apps/GpsViewer/docs/signal.png create mode 100644 Apps/GpsViewer/docs/sky.png create mode 100644 Apps/GpsViewer/docs/status.png create mode 100644 Apps/GpsViewer/main/CMakeLists.txt create mode 100644 Apps/GpsViewer/main/Source/app/AppContext.h create mode 100644 Apps/GpsViewer/main/Source/app/Main.cpp create mode 100644 Apps/GpsViewer/main/Source/app/MessageCard.cpp create mode 100644 Apps/GpsViewer/main/Source/app/PositionTab.cpp create mode 100644 Apps/GpsViewer/main/Source/app/Recorder.cpp create mode 100644 Apps/GpsViewer/main/Source/app/Recorder.h create mode 100644 Apps/GpsViewer/main/Source/app/SignalTab.cpp create mode 100644 Apps/GpsViewer/main/Source/app/SkyTab.cpp create mode 100644 Apps/GpsViewer/main/Source/app/Sources.cpp create mode 100644 Apps/GpsViewer/main/Source/app/Sources.h create mode 100644 Apps/GpsViewer/main/Source/app/StatusTab.cpp create mode 100644 Apps/GpsViewer/main/Source/app/Tabs.h create mode 100644 Apps/GpsViewer/main/Source/app/Theme.cpp create mode 100644 Apps/GpsViewer/main/Source/app/Ui.cpp create mode 100644 Apps/GpsViewer/main/Source/app/Ui.h create mode 100644 Apps/GpsViewer/main/Source/app/Widgets.cpp create mode 100644 Apps/GpsViewer/main/Source/app/Widgets.h create mode 100644 Apps/GpsViewer/main/Source/core/Format.cpp create mode 100644 Apps/GpsViewer/main/Source/core/Format.h create mode 100644 Apps/GpsViewer/main/Source/core/GnssModel.cpp create mode 100644 Apps/GpsViewer/main/Source/core/GnssModel.h create mode 100644 Apps/GpsViewer/main/Source/core/GnssTypes.cpp create mode 100644 Apps/GpsViewer/main/Source/core/GnssTypes.h create mode 100644 Apps/GpsViewer/main/Source/core/NmeaWriter.cpp create mode 100644 Apps/GpsViewer/main/Source/core/NmeaWriter.h create mode 100644 Apps/GpsViewer/main/Source/core/SatelliteDb.cpp create mode 100644 Apps/GpsViewer/main/Source/core/SatelliteDb.h create mode 100644 Apps/GpsViewer/main/Source/core/Settings.cpp create mode 100644 Apps/GpsViewer/main/Source/core/Settings.h create mode 100644 Apps/GpsViewer/main/Source/core/SunTimes.cpp create mode 100644 Apps/GpsViewer/main/Source/core/SunTimes.h create mode 100644 Apps/GpsViewer/main/Source/third_party/minmea/COPYING create mode 100644 Apps/GpsViewer/main/Source/third_party/minmea/LICENSE.MIT create mode 100644 Apps/GpsViewer/main/Source/third_party/minmea/LICENSE.grants create mode 100644 Apps/GpsViewer/main/Source/third_party/minmea/minmea.c create mode 100644 Apps/GpsViewer/main/Source/third_party/minmea/minmea.h create mode 100644 Apps/GpsViewer/manifest.properties diff --git a/Apps/GpsViewer/CHANGELOG.md b/Apps/GpsViewer/CHANGELOG.md new file mode 100644 index 0000000..c362a3f --- /dev/null +++ b/Apps/GpsViewer/CHANGELOG.md @@ -0,0 +1,33 @@ +# Changelog + +## 0.1.0 + +First release: a GNSS status viewer with four tabs, a sky plot, settings and NMEA recording. + +**Screen** +- Tactility toolbar with close button, title, fix state and menu button. Tabs Position, Sky, Signal, Status. +- Flat layout with dividers, in the Tactility theme's colours. Night mode in reds on black. +- Position: coordinates, altitude, course; speed with maximum and average; sunrise and sunset (NOAA algorithm, + offline); UTC and local time. +- Sky: polar plot, north up, rings at 0, 30 and 60 degrees elevation. Shape and colour per system, filled when + used. Legend with used / in view per system. +- Signal: SNR bar per satellite, grouped by system, coloured by strength, outlined when not used. Scrolls + sideways. +- Status: fix type, estimated accuracy (HDOP x 5 m), HDOP / VDOP / PDOP with a quality word, satellites used and + in view, time to first fix, receiver model. +- A message with "Open settings" when there is no receiver or location is off. + +**Data** +- Subscribes to Tactility's location service and reads the first started GPS receiver. +- Satellites are told apart by the NMEA talker ID when the firmware gives it. Without it, by ID ranges only. + +**Recording** +- Saves the receiver's RMC, GGA, GSA and GSV sentences to `logs/gps--