# Changelog

## 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.