Metadata-Version: 2.4
Name: aspn23_lcm
Version: 2.0.0
Summary: The LCM Python representation of ASPN-23
License-Expression: Apache-2.0
Requires-Python: >=3.5
Description-Content-Type: text/markdown
License-File: LICENSE
Dynamic: license-file

# ASPN-LCM

This Python module contains the Python variant of ASPN-LCM.

# Release Versioning

This project implements a versioning scheme similar to semantic versioning
[SemVer](https://semver.org/), but much lighter. **This project does not define an API and therefore
has no concrete definition of what constitutes a breaking change.**

Nonetheless, if a new release would require significant changes downstream we will attempt to
communicate that by incrementing the major version. If there are new features or newly deprecated
features, we will attempt to communicate that by incrementing the minor version. If the changes are
primarily bug fixes, we will attempt to communicate that by incrementing the patch version.

However, we make no concrete promises about whether or not a given release will be compatible with
your project downstream. You may experience breaking changes on minor or patch releases. If this is
an issue for your project, we recommend you pin to a specific version of this project rather than a
range.

## Fingerprints

Each message defined by this project has a unique fingerprint, a hash calculated from all of the
fields of the message, recursively. If any fingerprints change this indicates a hard
incompatibility with previous versions of this project. In this case, we will increment the major
version if any fingerprint changes. Additionally, we maintain a table of fingerprint changes so you
can know which messages' compatibility changed.

# Breaking Changes

Below is a history of breaking changes between the listed version and the previous version.

## 2.0.0

This version includes breaking changes to the following ASPN messages, meaning that they have new
fingerprints:

- `measurement_direction_2d_to_points`
- `measurement_direction_3d_to_points`
- `measurement_image`
- `measurement_satnav_subframe`

This occurred because certain fields were changed from `int16_t` to `byte` in order to better
represent ASPN in LCM. Specifically, this change was made to fields which represented opaque data
streams (e.g. image data). This change has the benefit of reducing the size of these fields by half,
which is important since some of these messages can be very large (e.g. images).

# Legacy Submodule

The ASPN-LCM Python module ships with the latest version of the previous major release via the
`legacy` submodule. This submodule is provided as a convenience in order to more easily convert
legacy data to a format compatible with the latest version of ASPN-LCM after breaking changes are
made.

For example, if between 1.0 and 2.0 the fingerprint for the `measurement_image` message changed, it
will still be possible to decode that message using `aspn23_lcm.legacy.measurement_image`.

Only the previous major release will be provided.
