# Changelog

All notable changes to nmea-kit are documented here.

## [0.6.1] — 2026-05-20

### Added
- ACK (Acknowledge Alarm) sentence type — alert identifier
- HBT (Heartbeat Supervision) sentence type — repeat interval, equipment operation status, sequential message identifier

NMEA sentence coverage expanded from 48 to 50 types.

## [0.6.0] — 2026-05-12

### Added
- VWT (True Wind Speed and Angle) sentence type — true wind angle (port/starboard), speed in knots, m/s, and km/h
- WCV (Waypoint Closure Velocity) sentence type — closure velocity in knots, waypoint identifier, mode indicator

NMEA sentence coverage expanded from 46 to 48 types.

## [0.5.10] — 2026-05-07

### Added
- TLL (Target Latitude and Longitude) sentence type — target number, lat/lon in DDMM format, name, UTC time, status (lost/acquiring/tracking), reference target flag
- TTM (Tracked Target Message) sentence type — target number, range, bearing, speed, course, CPA distance/time, speed units, name, status, acquisition type

NMEA sentence coverage expanded from 44 to 46 types.

## [0.5.9] — 2026-05-05

### Added
- AAM (Waypoint Arrival Alarm) sentence type — arrival circle entered, perpendicular passed, circle radius + unit, waypoint ID
- BWW (Bearing, Waypoint to Waypoint) sentence type — true/magnetic bearings + origin/destination waypoint IDs

NMEA sentence coverage expanded from 42 to 44 types.

## [0.5.8] — 2026-05-03

### Added
- BOD (Bearing Origin to Destination) sentence type — true/magnetic bearings + origin/destination waypoint IDs
- RSD (Radar System Data) sentence type — VRM, bearing lines, cursor position, range scale and display rotation

NMEA sentence coverage expanded from 40 to 42 types.

## [0.5.7] — 2026-05-01

### Added
- WPL (Waypoint Location) sentence type — waypoint lat/lon + identifier
- BWR (Bearing & Distance to Waypoint — Rhumb Line) sentence type — rhumb-line counterpart to the existing great-circle BWC
- `FieldReader::u16` / `i16` / `i32` and matching `FieldWriter::u16` / `i16` / `i32` methods, removing the need to round-trip through `f32` or manual `String::parse` for sentences with these ranges.

### Changed
- Deduplicated the three identical `#[cfg(any(feature = "..."))]` blocks in `src/lib.rs` into a single `nmea_item!` declarative macro. Adding a new sentence now requires editing one feature list, not three.
- `NmeaEncodable::SENTENCE_TYPE` and `PROPRIETARY_ID` are now `&'static str` (previously `&str` with elided lifetime). All impl sites use string literals so no downstream changes are needed.

NMEA sentence coverage expanded from 38 to 40 types.

## [0.5.6] — 2026-04-23

### Added
- VWR (Relative Wind Speed and Angle) sentence type — wind angle, L/R indicator, speed in knots/m/s/km·h
- DTM (Datum Reference) sentence type — local datum code, subdivision, lat/lon/altitude offsets, reference datum

### Fixed
- Bad checksum in DTM pynmeagps fixture (`*4F` → `*6F`) — would have caused DTM integration tests to fail on first run after the sentence was wired in.

NMEA sentence coverage expanded from 36 to 38 types.

## [0.5.5] — 2026-04-19

### Added
- MDA (Meteorological Composite) sentence type — barometric pressure, air/water temperature, humidity, dew point, wind direction and speed
- BWC (Bearing & Distance to Waypoint, Great Circle) sentence type

NMEA sentence coverage expanded from 34 to 36 types.

### Fixed
- `rpm` and `vdr` features were missing from the three `any(...)` cfg gates in `src/lib.rs`, making standalone `--features rpm` or `--features vdr` builds fail to expose `NmeaSentence` and `NmeaEncodable`

## [0.5.4] — 2026-04-19

### Changed
- Maintenance republish of 0.5.3 with no source changes.

## [0.5.3] — 2026-04-18

### Added
- RPM (Revolutions) sentence type
- VDR (Set and Drift) sentence type

## [0.5.2] — 2026-04-15

### Added
- APB (Autopilot Sentence B) sentence type
- XTE (Cross-Track Error, Measured) sentence type

## [0.5.1] — 2026-04-13

### Added
- GSA (GPS DOP and Active Satellites) sentence type
- GSV (Satellites in View) sentence type

NMEA sentence coverage expanded from 30 to 32 types.

## [0.5.0] — 2026-04-12

### Added
- Proprietary sentence support — `parse_frame` now detects `$P...` addresses per NMEA 0183, setting `talker = ""` and `sentence_type` to the full address (e.g. `"PASHR"`, `"PSKPDPT"`). Standard and proprietary dispatch paths are separate, preventing collisions.
- `NmeaEncodable::PROPRIETARY_ID` constant and `to_proprietary_sentence()` method
- Two-path `nmea_sentences!` macro (`standard:` / `proprietary:` sections)
- PASHR — Roll, Pitch, Heading (Ashtech/Trimble proprietary)
- PGRME — Garmin Estimated Position Error (proprietary)
- PSKPDPT — Skipper Depth (proprietary)
- `FragmentCollector` payload size limits: `MAX_PAYLOAD_SIZE = 256` chars and `MAX_FRAGMENTS = 5`, grounded in ITU-R M.1371-5 (1152-bit / 5-slot TDMA ceiling)

### Fixed
- Removed `unwrap()` in RTE waypoint parsing loop (replaced with `while let`)

### Changed
- CONTRIBUTING.md documents proprietary sentence workflow

NMEA sentence coverage expanded from 27 to 30 types (27 standard + 3 proprietary).

## [0.4.0] — 2026-04-11

### Added
- AIS Type 6 — Addressed Binary Message
- AIS Type 7 / 13 — Binary / Safety Acknowledge
- AIS Type 8 — Binary Broadcast Message
- AIS Type 9 — Standard SAR Aircraft Position Report
- AIS Type 11 — UTC/Date Response
- AIS Type 12 — Addressed Safety-Related Message
- AIS Type 15 — Interrogation

AIS coverage expanded from 9 to 16 message types.

## [0.3.1] — 2026-04-11

### Added
- THS (True Heading and Status) sentence type
- TXT (Text Transmission) sentence type
- `ddmm_to_decimal` / `decimal_to_ddmm` coordinate conversion helpers
- CONTRIBUTING.md, CHANGELOG.md, `.githooks/pre-commit`

## [0.3.0] — 2026-04-10

### Added
- AIS message types 4 (Base Station Report) and 27 (Long Range / Satellite AIS)
- Shared bit-extraction helpers extracted to `ais/messages/utils.rs`
- AIS message type coverage added to SENTENCES.md and README.md

### Changed
- Tests reorganized into `tests/nmea/` and `tests/ais/` subdirectories

## [0.2.3] — 2026-04-09

### Added
- RSA (Rudder Sensor Angle) and VLW (Distance Traveled through Water) sentence types

### Changed
- Dispatch macro refactored; integration tests cleaned up

## [0.2.2] — 2026-04-09

### Fixed
- Review findings: doc corrections, test naming, minor API clean-up

## [0.2.1] — 2026-04-09

### Added
- MTW (Mean Temperature of Water) sentence type
- VBW (Dual Ground/Water Speed) sentence type

## [0.2.0] — 2026-04-09

### Changed
- Introduced `NmeaEncodable` trait with a `to_sentence()` default method — replaces the previous per-struct boilerplate

## [0.1.5] — 2026-04-08

### Added
- XDR (Transducer Measurement) sentence type with `to_sentences()` for multi-transducer payloads

## [0.1.4] — 2026-04-08

### Added
- DBK (Depth Below Keel) sentence type
- ZDA (Time & Date) sentence type

## [0.1.3] — 2026-04-08

### Fixed
- `lib.rs` feature gates, test naming conventions, Wire-format doc corrections

## [0.1.2] — 2026-04-07

### Added
- GBS (GPS Satellite Fault Detection) sentence type
- GST (GPS Pseudorange Noise Statistics) sentence type

## [0.1.1] — 2026-04-07

### Added
- ROT (Rate of Turn) sentence type
- RMB (Recommended Minimum Navigation Information) sentence type
- Revamped integration test structure

## [0.1.0] — 2026-04-07

### Added
- Initial release
- NMEA 0183 bidirectional parser/encoder: 18 sentence types (DBT, DBS, DPT, GGA, GLL, GNS, GST, HDG, HDM, HDT, MTW, MWD, MWV, RMC, VHW, VTG, VLW, ZDA)
- AIS decoder: Types 1/2/3 (Class A), 5 (Voyage), 14 (Safety Broadcast), 18 (Class B), 19 (Class B+), 21 (AtoN), 24 (Class B Static)
- Shared frame layer: `parse_frame` / `encode_frame`, IEC 61162-450 tag block support
- Zero external dependencies
- CI: tests, clippy, rustfmt, doc checks on stable + MSRV 1.85.0

[0.6.1]: https://github.com/amoutiers/nmea-kit/releases/tag/v0.6.1
[0.6.0]: https://github.com/amoutiers/nmea-kit/releases/tag/v0.6.0
[0.5.10]: https://github.com/amoutiers/nmea-kit/releases/tag/v0.5.10
[0.5.9]: https://github.com/amoutiers/nmea-kit/releases/tag/v0.5.9
[0.5.8]: https://github.com/amoutiers/nmea-kit/releases/tag/v0.5.8
[0.5.7]: https://github.com/amoutiers/nmea-kit/releases/tag/v0.5.7
[0.5.6]: https://github.com/amoutiers/nmea-kit/releases/tag/v0.5.6
[0.5.5]: https://github.com/amoutiers/nmea-kit/releases/tag/v0.5.5
[0.5.4]: https://github.com/amoutiers/nmea-kit/releases/tag/v0.5.4
[0.5.3]: https://github.com/amoutiers/nmea-kit/releases/tag/v0.5.3
[0.5.2]: https://github.com/amoutiers/nmea-kit/releases/tag/v0.5.2
[0.5.1]: https://github.com/amoutiers/nmea-kit/releases/tag/v0.5.1
[0.5.0]: https://github.com/amoutiers/nmea-kit/releases/tag/v0.5.0
[0.4.0]: https://github.com/amoutiers/nmea-kit/releases/tag/v0.4.0
[0.3.1]: https://github.com/amoutiers/nmea-kit/releases/tag/v0.3.1
[0.3.0]: https://github.com/amoutiers/nmea-kit/releases/tag/v0.3.0
[0.2.3]: https://github.com/amoutiers/nmea-kit/releases/tag/v0.2.3
[0.2.2]: https://github.com/amoutiers/nmea-kit/releases/tag/v0.2.2
[0.2.1]: https://github.com/amoutiers/nmea-kit/releases/tag/v0.2.1
[0.2.0]: https://github.com/amoutiers/nmea-kit/releases/tag/v0.2.0
[0.1.5]: https://github.com/amoutiers/nmea-kit/releases/tag/v0.1.5
[0.1.4]: https://github.com/amoutiers/nmea-kit/releases/tag/v0.1.4
[0.1.3]: https://github.com/amoutiers/nmea-kit/releases/tag/v0.1.3
[0.1.2]: https://github.com/amoutiers/nmea-kit/releases/tag/v0.1.2
[0.1.1]: https://github.com/amoutiers/nmea-kit/releases/tag/v0.1.1
[0.1.0]: https://github.com/amoutiers/nmea-kit/releases/tag/v0.1.0
