Commit Graph
54 Commits
Author SHA1 Message Date
ladyadaandLimor Fried 0a7b9caef4 Expose exact received positions through the GPS API
Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-16 12:45:09 -04:00
ladyadaandLimor Fried 1f5936353d Connect the GNSS receiver base to shared NMEA framing
Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-16 11:49:16 -04:00
ladyadaandLimor Fried e11c729ae1 Use shared GNSS position results in the GPS decoder
Keep SD logger CI coverage on Uno and Mega.

Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-16 11:28:26 -04:00
ladyadaandLimor Fried 79e508fda5 Decode exact GNSS positions into independent sentence results
Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-16 10:55:57 -04:00
ladyadaandLimor Fried 46f0ff40a1 Preserve GNSS coordinate precision when formatting decimal degrees
Format retained coordinate components with integer long division so AVR logging can retain submillimeter detail without a floating-point type override. Add bounded-output and precision regressions.

Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-16 10:11:28 -04:00
ladyadaandLimor Fried e1d068c899 Report fresh GNSS fixes independently of GGA quality
Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-15 22:30:00 -04:00
ladyadaandLimor Fried 5da4759bd3 Run GPS regressions in all four build configurations
Cover basic and extended GPS builds with float and double, and include the previously tested Nano and HILBERT reception fixtures.

Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-15 22:17:44 -04:00
ladyadaandLimor Fried 910ded451a Keep validated navigation parsing within AVR logger flash limits
Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-15 21:57:40 -04:00
ladyadaandLimor Fried 1eab555a50 Validate navigation fields before updating GPS data
Share bounded UTC time, date, and standard navigation validation in Adafruit_GNSS. Reject malformed populated GGA, RMC, GLL, and GSA fields before changing stored values or freshness timestamps, while preserving empty-field behavior and the high-precision coordinate path.

Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-15 20:58:12 -04:00
ladyadaandLimor Fried 02fb9326be Test submillimeter coordinates and both floating-point modes
Run sketch regressions with consistent float and double definitions across library and test translation units. Verify that exact GNSS components and double GPS results retain position changes smaller than the legacy E7 resolution, and record the precision requirement for future receiver APIs and logging.

Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-15 20:40:52 -04:00
ladyadaandLimor Fried b916372940 Decode GNSS coordinates exactly before converting to floating point
Share bounded coordinate decoding between the GNSS core and GPS parser. Preserve exact signed E7 results, validate coordinate and hemisphere fields together, and retain the precision available in floating-point convenience fields.

Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-15 20:30:56 -04:00
ladyadaandLimor Fried 8512459c27 Bring shared validation onto merged receive refactor
Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-15 20:23:31 -04:00
ladyadaandLimor Fried e25192cf17 Reuse NMEA validation in GPS sentence checks
Use the shared validator before source and sentence recognition, reject NULL input safely, and require an exact sentence name instead of a recognized prefix. Cover recognition diagnostics, malformed payloads, checksum trailers, and zero-field messages.

Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-15 19:59:24 -04:00
ladyadaandLimor Fried 0d2f5b430e Fix receive member comment alignment
Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-15 19:57:07 -04:00
ladyadaandLimor Fried e1996d8b49 Reset GPS receive state without changing buffer roles
Clear the embedded framer during common_init() and initialize lastline only once so repeated initialization preserves the actual completed buffer. Cover initial, odd, and even buffer swaps, discarded partial input, cleared timestamps, and resumed reception.

Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-15 19:00:09 -04:00
ladyadaandLimor Fried ee7522e7b5 Use the shared NMEA framer for GPS reception
Preserve complete raw lines for the existing receive API, discard oversized input, and keep sentence timestamps independent per receiver. Add receive-path regressions for recovery, command replies, pause/resume, and two receivers.

Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-15 17:26:39 -04:00
ladyadaandLimor Fried f3d2b4f0b3 Keep Doxygen validation as a local pre-commit check
Remove the custom checker and extra CI step; keep the missing return documentation fix.

Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-15 17:20:47 -04:00
ladyadaandLimor Fried fd0fd87951 Check documentation with the CI Doxygen version
Document the deleted assignment return and add a local check using the
same Doxygen 1.8.13 binary, configuration, and warning policy as CI.
Run it before regression tests to expose documentation failures early.

Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-15 17:01:10 -04:00
ladyadaandLimor Fried 776f44942e Document deleted NMEA copy operations for CI
Name and document the disabled copy parameters so the CI Doxygen check can validate both declarations.

Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-15 16:37:14 -04:00
ladyadaandLimor Fried 092677dfee Add bounded NMEA byte framing
Assemble lines in caller-owned buffers with overflow recovery, stable views of the last complete line, and independent per-receiver timestamps. Add an automatically discovered host regression for boundaries and interleaved receivers.

Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-15 15:49:13 -04:00
ladyadaandLimor Fried fdaa8279b8 Run every regression test in CI
Discover the C++ tests and Arduino regression sketches automatically. Run the sketches against the actual library with host serial output and timing, including marine extensions, and propagate failures and timeouts to CI.

Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-15 15:41:15 -04:00
ladyadaandLimor Fried 5ffa2dfd34 Run NMEA host regressions in CI
Add an independent Ubuntu job for all three hardware-independent NMEA tests, with fatal address and undefined-behavior sanitizer checks.

Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-15 15:34:09 -04:00
ladyadaandLimor Fried 90c20730f5 Add exact decimals and NMEA command construction
Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-15 15:28:35 -04:00
ladyadaandLimor Fried f15627e39c Clarify how to mark a NMEA field cursor exhausted
Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-15 15:10:40 -04:00
ladyadaandLimor Fried 01aa7a655d Add bounded NMEA field iteration
Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-15 14:27:29 -04:00
ladyadaandLimor Fried 4ac934719e Add bounded NMEA sentence validation
Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-15 14:10:17 -04:00
ladyadaandLimor Fried e2b86fdf73 Propose the reusable NMEA core API
Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-15 14:01:30 -04:00
ladyadaandLimor Fried a0921cadee Bump version to 1.8.0
Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-15 13:44:15 -04:00
ladyadaandLimor Fried 9ee8f63f26 Use explicit byte copies for NMEA string fields
Replace length-derived strncpy calls with memcpy and explicit termination. Ensure parseStr also terminates fields that end without a delimiter, and extend the bounds regression to cover truncation, empty fields, and one-byte destinations.

Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-15 13:06:12 -04:00
ladyadaandLimor Fried 67b781c292 Accept additional marine NMEA source identifiers
Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-15 13:04:45 -04:00
ladyadaandLimor Fried 9e037659d7 Use Adafruit SdFat for GPS shield logging
Create up to 10,000 distinct long filenames with exclusive creation, drain startup GPS command replies before writing, and update CI and installation guidance for the Adafruit fork.

Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-15 12:54:24 -04:00
19204c4d43 Make SD an optional GPS logger dependency
Integrate the dependency removal proposed in #161, install SD explicitly for CI, and document its installation for shield_sdlog.

Co-authored-by: Henricus Basien <Henricus@Basien.de>
Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-15 12:27:09 -04:00
ladyadaandLimor Fried 6ad57c1f70 Document GPS setup and all examples
Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-15 12:04:58 -04:00
ladyadaandLimor Fried 1d07bab68a Support antenna status on newer CDTop GPS modules
Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-15 11:56:03 -04:00
ladyadaandLimor Fried 716d21a748 Bound GPS response waits and allow wakeup retries
Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-15 11:29:59 -04:00
ladyadaandLimor Fried 38ad3ffcac Keep flash table declarations compatible with Doxygen
Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-15 11:13:37 -04:00
ladyadaandLimor Fried 8d660243a0 Store GPS source and sentence tables in flash
Use shared PROGMEM tables with flash-aware lookup and copying. Preserve the source IDs, sentence IDs and matching order while saving 110 bytes of RAM in the Uno SD logger.

Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-15 10:55:34 -04:00
ladyadaandLimor Fried f4bc37093d Release SD logger setup stack before logging
Prevent setup from being inlined into main so SD initialization temporaries are released before loop runs. Uno disassembly confirms main no longer retains a 129-byte local frame and two saved registers.

Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-15 10:47:52 -04:00
ladyadaandLimor Fried c8a9190793 Allow GPS commands to be stored in flash
Add an F()-compatible sendCommand overload and keep the SD logger command strings in flash. This saves 82 bytes of RAM on Uno.

Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-15 10:45:00 -04:00
ladyadaandLimor Fried 5d7d904a7f Remove unused GPS SPI buffer
Remove the unreferenced 100-byte private buffer. The Uno SD logger now uses 1865 bytes of static RAM, down from 1965 bytes. All 20 examples compile.

Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-15 10:38:09 -04:00
ladyadaandLimor Fried 7c76916d9f Limit the Uno RAM change to flash-stored Serial messages
Keep only the eight F() wrappers in shield_sdlog so RAM improvements can be reviewed one at a time. Defer the other memory changes. This step saves 90 bytes on Uno, leaving 83 bytes; compilation passes but runtime SD logging still needs more RAM.

Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-15 10:17:23 -04:00
ladyadaandLimor Fried 957153e23c Reduce GPS logger RAM usage on Uno
Keep lookup tables, sentence IDs, logger messages and commands in flash; remove the unused SPI buffer. Keep setup separate so SD initialization does not retain its stack frame during logging.

Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-15 10:05:03 -04:00
ladyadaandLimor Fried 06f8376021 Merge current GPS fixes before checking Uno memory
Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-15 09:56:03 -04:00
ladyadaandLimor Fried 21384bf554 Match CI formatting for the GPS I2C read call
Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-14 20:42:46 -04:00
ladyadaandLimor Fried 47962143f8 Clarify when RMB waypoint data is saved
Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-14 20:31:56 -04:00
ladyadaandLimor Fried 3b53ad02f4 Document the zero-field parsing guard
Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-14 20:26:58 -04:00
ladyadaandLimor Fried a09ebd7b86 Accept GLONASS and Galileo NMEA source IDs
Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-14 18:20:56 -04:00
ladyadaandLimor Fried c04d2595fc Use the configured I2C address when reading GPS data
Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-14 17:58:34 -04:00
ladyadaandLimor Fried 235a733d01 Preserve waypoint data when RMB parsing fails
Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-14 17:56:57 -04:00
ladyadaandLimor Fried 3b4e2c7ed8 Reject truncated NMEA sentences before parsing fields
Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-14 17:34:57 -04:00
ladyadaandLimor Fried 879236ea04 Validate NMEA checksum digits and line ending
Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-14 17:29:24 -04:00
ladyadaandLimor Fried 8da699e8d6 Check for NULL before reading an NMEA field
Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-14 17:23:25 -04:00
ladyadaandLimor Fried 422d67684a Simplify parser regression to two literal sentences
Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-14 17:14:17 -04:00
ladyadaandLimor Fried f6932ee178 Fix bounded termination of checksum-delimited NMEA text
Co-authored-by: Limor Fried <ladyada@users.noreply.github.com>
2026-09-14 16:36:41 -04:00