Skip to content

0.5.0

Choose a tag to compare

@maebli maebli released this 20 Sep 14:01
· 106 commits to main since this release
6bbe8ef

Added

  • Allocation-free FormatAFrame / FormatABytes views for wireless CRC-normalized bytes, and a lazy DecryptedBytes API on core encrypted payloads. AES-CBC works one block at a time without a full plaintext buffer; existing buffer-writing APIs remain compatible.
  • DataFieldCoding::data_size, which reports the byte length of a data field from the DIF alone, without decoding its contents.

Changed

  • Breaking: ValueInformation<'a> now borrows frame bytes and exposes labels() and units() iterators instead of public collection fields. has_label() and first_unit() provide common lookups. Struct literal construction is no longer supported. ProcessedDataRecordHeader<'a> now carries the frame lifetime as well. Debug and serialized output are unchanged.
  • Breaking: wireless_mbus_link_layer::FrameError gained an InvalidManufacturerCode { code } variant.

Removed

  • The arrayvec dependency and Deserialize implementations for ValueInformation and ProcessedDataRecordHeader.

Fixed

  • Manufacturer fields with bit 15 set (for example A697, which is ITW plus the flag) now decode to their three letters instead of failing. Wireless telegrams from those meters were reported as TooShort and dropped. The flag itself is kept in ManufacturerId::is_unique_globally. (#126)
  • VIFEs following the 7Fh manufacturer escape are no longer decoded against the standard VIFE table. Vendor bytes that happened to fall in the multiplicative-correction range corrupted the decimal scale exponent, so affected records (for example ABB B21 energy) decoded orders of magnitude off.
  • BCD values carrying the EN 13757-3 Fh sign marker in their most significant digit now decode as negative numbers instead of being rejected as invalid BCD. Frames from Sensus/SLB and Landis+Gyr meters reporting a negative temperature difference now parse.
  • A data record whose contents cannot be decoded no longer discards the rest of the frame. The record is still reported as an error, but the iterator steps over it by its declared length and continues, so the records behind it are recovered.
  • Valid VIFE chains producing more than ten labels or units no longer panic.

Packages

All artifacts are released at 0.5.0:

  • crates.io: m-bus-core, wired-mbus-link-layer, wireless-mbus-link-layer, m-bus-application-layer, m-bus-parser (tag v0.5.0) and m-bus-parser-cli (tag cli-v0.5.0).
  • npm: m-bus-parser-wasm-pack (tag wasm-v0.5.0), which also redeploys the website WASM bundle.
  • PyPI: pymbusparser wheels and sdist (tag python-v0.5.0).

Full changelog: v0.4.3...v0.5.0