2.7.1 - 2024-08-20
==================

**Fixed:**

- Fix incomplete reception filter used in CAN non-promiscuous mode
  (``sys.can.promisc`` set to false) introduced in version 2.7.0. This would
  lead to more CAN frames than necessary being processed by the CSP stack.

2.7.0 - 2023-11-24
==================

**Fixed:**

- Fix potential reboot for uplink frames with corrupt spacelink header length.
- Fix potential reboot loop on some units when rapidly power cycled.
- Fix delayed closing FEND output for 512 byte KISS/RS-422 frame transmissions.

**Changed:**

- Internal code changes to improve robustness and reduce binary image size. The
  changes do not affect any external APIs and do not require any action from
  the end user.

2.6.0 - 2022-07-15
==================

**Changed:**

- Use ``sys.csp.routes`` as the full CSP routing table instead of an amendment
  to the firmware defaults. The property default value has been changed from
  the empty string (no amendment) to ``0/0 CAN,10/5 SPACE``, which matches the
  previous firmware default routing table. This change removes the need to
  override the firmware ``10/5 SPACE`` route explicitly, when address 10 is not
  a spacelink address.  Configurations that relied on the the implicit routing
  of address 10 to the spacelink interface must now explicitly add the route.

**Added:**

- Add ``tx.allow.always`` and ``tx.allow.time`` properties. See documentation
  for *Transmit Allow Timer* for a description of their use. The default
  settings maintain the behavior of previous firmware releases.
- Add ``rx.local.drop`` property. When set to ``true``, the SRS-3 will drop all
  incoming CSP and IP frames on the spacelink interface destined to the radio
  itself. With this setting enabled, the SRS-3 can only be configured via the
  CAN and RS422 interfaces and will only forward traffic between the spacelink
  and the CSP and IP interfaces.

2.5.0 - 2021-07-28
==================

**Fixed:**

- Fix unlikely deadlock and subsequent WDT restart when rapidly resetting GWDT
  through telecommand.

**Changed:**

- Remove the ``conf.led.enable`` property.

**Added:**

- Drop received OID/idle frames. The SRS-3 does not require nor benefit from
  uplink idle frames, but drop them in case the ground station radio is
  transmitting them.

2.4.0 - 2021-04-26
==================

**Fixed:**

- Frame sizes that resulted in an Reed-Solomon block length for the last block
  that differed by 2 or more bytes from the others, were not interleaved
  correctly. This issue did not affect frames up to 446 RS bytes (interleaving
  depth 1 or 2) nor frame sizes that were a multiple of, or 1 byte less than a
  multiple of, the interleaving depth. All frame sizes that followed CCSDS
  131.0-B-3 were handled correctly.

**Changed:**

- Changed minimum values for ``tx.size`` and ``rx.size`` to 187 bytes. The size
  is chose such that a minimum size frame with all link layer features will fit
  in a single RS block.

2.3.0 - 2021-03-24
==================

**Fixed:**

- Fix spurious receive RS422/KISS CRC frame errors on high load.

**Changed:**

- Support asynchronous establishment of Ethernet link and allow the Ethernet to
  be enabled/disabled at runtime using the ``sys.net.enable`` property. The
  remote host is no longer required to have an active link when Ethernet is
  enabled.
- Remove the ``conf.power.eth`` property. The power for the Ethernet PHY is
  now controlled automatically by the ``sys.net.enable`` property.

**Added:**

- Add support for on-orbit firmware update. See ``doc/doc/fwupdate.html``.

2.2.1 - 2020-11-24
==================

**Fixed:**

- Fix incorrect applied ALC gain with ALC limit >700 and low Pout setting.

2.2.0 - 2020-10-14
==================

**Fixed:**

- Do not spuriously enable RS422 driver on boot.
- Support 256 bytes CSP frames on KISS interface in default configuration.

**Added:**

- Add support for increasing the CSP MTU beyond 256 bytes using the
  ``sys.csp.mtu`` property. See ``doc/csp.rst`` for additional documentation.

2.1.0 - 2020-01-30
==================

**Fixed:**

- Avoid head-of-line blocking of the CSP router task when waiting for spacelink
  frames queue to drain.
- Remove unnecessary double PLL retune when changing TX parameters with idle
  enabled.

**Changed:**

- Remove unused ``boot`` debug command.
- Only increase ``tx.frames`` for non-idle frames.

2.0.1 - 2020-01-16
==================

**Fixed:**

- Fix occasional TX task lockups when reconfiguring RX with idle frames
  enabled.

2.0.0 - 2019-12-19
==================

**Fixed:**

- Fix occasional erroneous initialization of VREG and 3V3 rails current/power
  measurements.
- Fix ``tx.size`` and ``rx.size`` properties max values to match actual limit
  of 1024 bytes.
- Improved modulation accuracy for lower transmit bitrates.

**Changed:**

- Frame format change! The spacelink frame now includes the ASM in the
  convolutionally coded data.
- Frame format change! The Reed-Solomon blocks are now interleaved according to
  CCSDS 131.0-B-3 but allow frame sizes that do divide evenly in the
  interleaving depth. In that case, that last block has 1 to I-1 additional
  virtual fill bytes. The interleaving depth (1-5) is automatically calculated
  from the configured frame sizes.
- Removed the ``tm.temp.core`` property since the junction temperature readings
  were not reliable. The ``tm.temp.mcu`` property should be used instead.
- Add multidrop UART support using the ``sys.uart.multidrop`` property. If set
  to ``true``, the system will only drive the differential transmit pair when
  actively transmitting.

**Added:**

- Add support for sending idle frames when there is no data frames to transmit.
  ``tx.idleframes`` (default 0) idle frames will be transmitted after each data
  frame to aid receiver synchronization. Any data frames queued for
  transmission while sending idle frames take priority and resets the idle
  counter to ``tx.idleframes``. Idle frames consists of all-zero data but with
  FEC and CRC applied.
- Add support for configurable preamble/midamble/postamble lengths using the
  ``tx.preamble``, ``tx.midamble``, and ``tx.postamble`` properties. The
  training patterns can be modified from the default alternating bits to a
  PRBS-9 sequence if the ``tx.traintype`` is set to ``1``. If convolutional
  coding is enabled, the PRBS-9 sequence is convolutionally coded.
- Add support for authenticated encryption using AES-256-GCM. The
  ``tx.crypto.*`` and ``rx.crypto.*`` properties are used for configuration.
  See ``doc/crypto.rst`` for documentation.
- Add support for a optional 16 bit satellite ID to be transmitted and used for
  reception filtering. The ID is configured using the ``tx.id`` and ``rx.id``
  properties. The default value is 0 which corresponds to no ID.

1.4.1 - 2019-05-28
==================

**Fixed:**

- Fix spectral artifacts in output when transmissions ends introduced in v1.4.0.

1.4.0 - 2019-05-24
==================

**Fixed:**

- Fix CAN bitrates below 1000 kbps using the ``sys.can.rate`` property. The
  supported rates are 1000, 500, 250, 125, 100, 83.3, and 50 kbps.
- Fix error handling when calling ``prop`` commands without a group argument or
  with flags specified after the group.

**Changed:**

- Renamed the ``trace print`` command to ``trace mask``.

**Added:**

- Add support for runtime configuration of transmit and receive bitrates
  through the ``tx.rate`` and ``rx.rate`` properties.
- Add support for runtime configuration of receive bandwidth as a percentage of
  the receive bitrate using the ``rx.bw`` property. The default of 150% matches
  previous firmware versions.
- Add ``sys.can.promisc`` property to select between CSP CAN/CFP promiscuous or
  masked mode. The default is ``true`` which enables promiscuous mode as in
  previous firmware versions.

1.3.0 - 2019-03-19
==================

**Changed:**

- Improved ALC first burst value.

1.2.0 - 2018-10-23
==================

**Changed:**

- Renamed ``sys.rs422.rate`` to ``sys.uart.rate``. The property ID and type are
  unchanged, so existing code will work without modifications.

**Added:**

- Added IP stack properties in ``sys`` group. See ``doc/ip.rst`` for
  documentation.

1.1.0 - 2018-09-07
==================

**Fixed:**

- Fix lost TM sensor samples under high-load.

**Changed:**

- Use BT=0.50 as default. The BT can now be changed between 0.3 and 0.6 in 0.05
  steps with the ``tx.bt`` property.
- Framing format: Add header support for multiplexed IP and CSP packets.
- Framing format: Use CCSDS convolutional code polynomials and dual-basis Reed-Solomon.
- Use CAN as default route instead of RS422/KISS.
- Enable internal MCU watchdog.

**Added:**

- Add ALC loop. Configurable through the ``tx.alc.*`` properties. Enabled by default.
- Add calibration properties for VCOs, power sensors and coretemp.
- Add periodic PLL retune every 2 minutes for TX and every 10 minutes for RX.
- Add ground watchdog timer (GWDT) to reset system after 24 hours if not reset.
  The timeout period is configurable through the sys.gwdt.init value.
- Add ``rx.detected`` counter for detected frames. This is increased for each
  frame, even if FEC decode fails.
- Show property state (default, loaded, modified) and flags (no-store,
  read-only) when listing.
- Add remote shell debug service to execute slash commands via CSP.
- Add ``sys.name`` property to set system hostname in CSP ident and prompt.

1.0.0 - 2018-07-06
==================

**Added:**

- First released version.
