Skip to content

v2.3.9 - Fix GNSS Coordinate Precision (2026-02-24)

What Changed?

This release fixes a precision loss in GNSS coordinate getters. Command::get_gnss_latitude() and get_gnss_longitude() now return double instead of float, matching the double precision of the underlying gnss_data_t struct.


What's New

Main Feature: Fix GNSS Coordinate Return Type float → double

What it does:

Changes the return type of get_gnss_latitude() and get_gnss_longitude() in the Command class from float to double. All callers in gnss.cpp and status.cpp are updated accordingly.

Why it matters:

  • gnss_data_t stores coordinates as double for sub-meter precision
  • Returning float silently truncated precision to ~1m at the getter boundary
  • double preserves the full ~0.1mm precision of the underlying data throughout the call chain

Installation

Quick Start

# Get the release
git checkout v2.3.9

# Build
task v2:build

# Upload
task v2:upload

# Check it works
task monitor

What's Different from the Last Version?

🐛 Fixed

  • include/v2_command.h: get_gnss_latitude() / get_gnss_longitude() return type floatdouble
  • src/v2_command.cpp: implementation return type floatdouble
  • src/command/gnss.cpp: local variables float latitude/longitudedouble (3 locations)
  • src/command/status.cpp: local variables float latitude/longitudedouble

Is It Safe to Upgrade?

Backward Compatible: Yes

  • JSON output values are unchanged in practice (GPS module precision is ~2.5m CEP)
  • No change in serial output format or field names

Tests Passed

  • ✅ Builds without errors

Release Details

  • Date: 2026-02-24
  • Version: v2.3.9
  • Files Changed: 4 (include/v2_command.h, src/v2_command.cpp, src/command/gnss.cpp, src/command/status.cpp)

Next Steps

Continued code quality improvements (see REFACTORING_ROADMAP.md):

  • Fix EventQueue item size mismatch (P2)
  • Remove impossible range check in set_poll_count() (P2)
  • Fix @file docstrings to match actual filenames (P2)