Skip to content

feat: support GNSSDecoder 2#43

Merged
zsoerenm merged 2 commits into
masterfrom
pvt-bump-gnssdecoder
Jun 23, 2026
Merged

feat: support GNSSDecoder 2#43
zsoerenm merged 2 commits into
masterfrom
pvt-bump-gnssdecoder

Conversation

@zsoerenm

Copy link
Copy Markdown
Member

Summary

Bumps the GNSSDecoder compat to 2. v2 is a ground-up redesign; the pieces PVT touches changed as follows:

Symbol v1.3 v2
GPS data struct GPSL1Data GPSL1CAData
GPS constants GPSL1Constants GPSL1CAConstants
GPS cache GPSL1Cache GPSL1CACache
GNSSDecoderState fields had raw_buffer, buffer, num_bits_buffered dropped (soft-symbol decoder no longer buffers packed bits)

The headline v2 break (decode now takes soft symbols instead of packed bits) does not affect PVT, which never calls decode.

Changes

  • Project.toml: GNSSDecoder = "1.3""2".
  • src/ (sat_time.jl, ionosphere.jl, PositionVelocityTime.jl): GPSL1DataGPSL1CAData in type annotations. This is the only src change needed — PVT uses GNSSDecoderState purely as a type parameter and never reads the removed buffer fields.
  • test/: applied the GPS struct renames and stripped the three dropped positional constructor args (raw_buffer, buffer, num_bits_buffered) from the positional GNSSDecoderState(...) calls. Verified the *Constants positional field order and the GalileoE1B* / GPSL1CAData field sets are unchanged between versions.
  • Removed BitIntegers (dep/compat/test-target + the UInt288/UInt320 defs) — it only existed to spell the captured bit-buffer literals, which no longer exist.

Versioning is left to the semantic-release CI; the feat: commit yields a minor bump.

Test plan

  • Full test suite passes against GNSSDecoder 2.0.0 (564 assertions, Aqua included).

🤖 Generated with Claude Code

GNSSDecoder 2 is a ground-up redesign. The pieces PVT touches changed as
follows:

- GPS types renamed: GPSL1Data -> GPSL1CAData, GPSL1Constants ->
  GPSL1CAConstants, GPSL1Cache -> GPSL1CACache.
- GNSSDecoderState dropped the raw_buffer, buffer and num_bits_buffered
  fields (the soft-symbol decoder no longer holds packed bits).

Source only references GNSSDecoderState as a type parameter and never
reads the removed buffer fields, so the sole src change is the GPS data
struct rename in the type annotations. Tests are updated for the renames
and for the dropped positional constructor arguments. BitIntegers is
removed since it only existed to spell the captured bit-buffer literals.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@codecov

codecov Bot commented Jun 23, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 92.77%. Comparing base (ea21a9f) to head (deae904).
⚠️ Report is 2 commits behind head on master.

Additional details and impacted files
@@           Coverage Diff           @@
##           master      #43   +/-   ##
=======================================
  Coverage   92.77%   92.77%           
=======================================
  Files           7        7           
  Lines         360      360           
=======================================
  Hits          334      334           
  Misses         26       26           

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

GNSSDecoder 2 depends on Aff3ct, whose aff3ct_jll has no Windows
binaries, so GNSSDecoder 2 (and thus PVT) cannot run on Windows. Drop
windows-latest from the CI matrix, leaving a commented-out entry to
restore once Aff3ct gains Windows support.

The benchmark fixtures construct GNSSDecoderState positionally, and
AirspeedVelocity runs them against both the PR (GNSSDecoder 2) and base
(GNSSDecoder 1.3) revisions. Route construction through a version-adaptive
helper that branches on whether the dropped raw_buffer/buffer fields are
present, shim the renamed GPS L1 C/A types, and drop the now-unused
BitIntegers buffer literals.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

Benchmark Results (Julia v1)

Time benchmarks
master deae904... master / deae904...
calc_pvt/GPSL1/4sats/cold 0.0339 ± 0.001 ms 0.033 ± 0.0011 ms 1.03 ± 0.046
calc_pvt/GPSL1/4sats/warm 28.2 ± 3.8 μs 28.4 ± 3.6 μs 0.996 ± 0.19
calc_pvt/GPSL1/9sats/cold 0.044 ± 0.00071 ms 0.0421 ± 0.00082 ms 1.05 ± 0.027
calc_pvt/GPSL1/9sats/warm 19.3 ± 0.46 μs 19.6 ± 0.5 μs 0.983 ± 0.034
calc_pvt/GalileoE1B/4sats/cold 0.0323 ± 0.0056 ms 0.0322 ± 0.0053 ms 1 ± 0.24
calc_pvt/GalileoE1B/4sats/warm 12.1 ± 0.37 μs 12.5 ± 0.43 μs 0.966 ± 0.044
calc_pvt/GalileoE1B/5sats/cold 0.0335 ± 0.0044 ms 0.0334 ± 0.0041 ms 1 ± 0.18
calc_pvt/GalileoE1B/5sats/warm 13.4 ± 0.39 μs 13.8 ± 0.41 μs 0.973 ± 0.041
time_to_load 2.13 ± 0.011 s 2.18 ± 0.0023 s 0.977 ± 0.0053
Memory benchmarks
master deae904... master / deae904...
calc_pvt/GPSL1/4sats/cold 0.312 k allocs: 16.9 kB 0.312 k allocs: 16.9 kB 1
calc_pvt/GPSL1/4sats/warm 0.257 k allocs: 14 kB 0.257 k allocs: 14 kB 1
calc_pvt/GPSL1/9sats/cold 0.295 k allocs: 18.3 kB 0.295 k allocs: 18.3 kB 1
calc_pvt/GPSL1/9sats/warm 0.141 k allocs: 9.02 kB 0.141 k allocs: 9.02 kB 1
calc_pvt/GalileoE1B/4sats/cold 0.301 k allocs: 16.3 kB 0.301 k allocs: 16.3 kB 1
calc_pvt/GalileoE1B/4sats/warm 0.136 k allocs: 7.09 kB 0.136 k allocs: 7.09 kB 1
calc_pvt/GalileoE1B/5sats/cold 0.291 k allocs: 16 kB 0.291 k allocs: 16 kB 1
calc_pvt/GalileoE1B/5sats/warm 0.137 k allocs: 7.34 kB 0.137 k allocs: 7.34 kB 1
time_to_load 0.149 k allocs: 11.2 kB 0.149 k allocs: 11.2 kB 1

@zsoerenm
zsoerenm merged commit b658e38 into master Jun 23, 2026
7 checks passed
@zsoerenm
zsoerenm deleted the pvt-bump-gnssdecoder branch June 23, 2026 09:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant