Download Latest Version v4.2.2 source code.tar.gz (19.8 MB)
Email in envelope

Get an email when there's a new version of F´

Home / v4.2.0
Name Modified Size InfoDownloads / Week
Parent folder
README.md 2026-04-01 24.2 kB
v4.2.0 source code.tar.gz 2026-04-01 19.8 MB
v4.2.0 source code.zip 2026-04-01 21.0 MB
Totals: 3 Items   40.8 MB 0

This is F Prime v4.2.0!

  1. Highlighted New Features
  2. Changes Affecting Users
  3. Changes Affecting Platform Developers

Highlighted New Features

These are the key features released in v4.2.0.

Advanced Telemetry Management

Svc::TlmPacketizer has been significantly enhanced to give projects fine-grained control over how telemetry is managed and downlinked.

Configurable output streams: Telemetry can now be routed to multiple configurable named sections (e.g. REALTIME for live downlink, RECORDED for store-and-forward). Each section is independently configurable and can be enabled or disabled at runtime.

Per-group rate control: Each section/group pair now has its own rate logic. Telemetry packets can be sent on-change with a configurable minimum tick interval (rate limiting), at a guaranteed maximum tick interval (heartbeat), or both. This replaces the previous all-or-nothing output on changemodel.

Configurable output port mapping: A 2D configuration table maps each section/group pair to a specific output port index, enabling flexible routing of telemetry streams to different downstream consumers.

All rate and stream settings are backed by a parameter, so defaults can be set at build time and overridden at runtime without a reboot.

To pair with this, Svc::ComQueuehas been extended with richer per-queue configuration:

Drop policy: Each queue can be configured to drop the newest (incoming) or oldest (head-of-queue) message on overflow, allowing projects to tune for freshness vs. in-order delivery. Queues can operate in FIFO or LIFO mode per-port. Per-queue priority controls which data is serviced first; queues sharing a priority are balanced via round-robin.

Topology Ports (Modeling)

FPP now supports topology ports — named I/O ports declared directly on a topology (subtopology). This allows a subtopology to be treated as a black-box module with well-defined connection points.

Outer topologies connect to a subtopology through its named ports without needing to reference internal component instances, improving encapsulation and reusability. All F Prime core subtopologies (Svc.CdhCore, Svc.ComCcsds, Svc.ComFprime, Svc.DataProducts, Svc.FileHandling) have been updated to expose topology ports.

New Component: Svc::FileWorker

Svc::FileWorker is a new active component that offloads slow file I/O operations from time-critical components. It provides asynchronous interfaces for reading, writing, and CRC-verifying files, with cancel support and state-based flow control (IDLE → READING/WRITING). Components that previously had to block on filesystem operations can now delegate to FileWorker and receive a completion signal when the operation is done.

Changes Affecting Users

These two changes affect users of F Prime.

1. Configuration Updates For Svc::TlmPacketizer

Svc::TlmPacketizer has been changed to allow for greater control over packet output rates. It now allows users to configure output groups, and sections to produce telemetry at specified rates. These changes are documented in the Svc::TlmPacketizer SDD.

Users with custom configuration for Svc::TlmPacketizer must update their configuration.

Build Configuration

Users including the TlmPacketizer autocoding (e.g. by including an FPP Packet Set in their topology) without using the TlmPacketizer itself now need to explicitly depend on the Config module in their Deployment/Top/CMakeLists.txt like such:

:::diff
register_fprime_module(
  AUTOCODER_INPUTS
    "${CMAKE_CURRENT_LIST_DIR}/instances.fpp"
    "${CMAKE_CURRENT_LIST_DIR}/topology.fpp"
  SOURCES
    "${CMAKE_CURRENT_LIST_DIR}/RefTopology.cpp"
  DEPENDS

+    Svc_TlmPacketizer_config_TlmPacketizerConfig # Supports packet autocoding w/o TlmPacketizer  
)

Svc::TlmPacketizer Users With Custom Configuration

Users with custom configuration must make the following changes:

  1. TLMPACKETIZER_HASH_BUCKETS must be renamed to MAX_PACKETIZER_CHANNELS.
  2. TLMPACKETIZER_NUM_TLM_HASH_SLOTS, TLMPACKETIZER_HASH_MOD_VALUE, PacketUpdateMode must be deleted.
  3. (Optional) Tune TlmPacketizerCfg.fpp to size output ports, sections, max groups, etc.

See TlmPacketizerCfg.hpp (github.com)

[!CAUTION] The maximum group for a telemetry packet is now limited to NUM_CONFIGURABLE_TLMPACKETIZER_GROUPS found in TlmPacketizerCfg.fpp

[!NOTE] The stock TlmPacketizerCfg.fpp is designed to work with an output port for each of two sections. If left unconnected, the behavior will mimic Svc::TlmPacketizer of v4.2.0. See TlmPacketizerCfg.hpp (github.com)

2. Update Utils::Hash::final() to Utils::Hash::finalize()

In order to deconflict with the C++ final keyword, Utils::Hash::final() was renamed to Utils::Hash::finalize().

Utils::Hash Users

Users must rename their uses of the .final method.

:::diff

- hash.final(crc_output);
+ hash.finalize(crc_output);

Changes Affecting Platform Developers

These changes affect developers providing platform packages in the F Prime environment.

Add teardown to Os::Queue

Since Os::Queue is allowed to allocate resources on a call to create, a mirror teardown method is needed to allow teardown.

For Platform Developers

At minimum, developers of Os::Queue implementations must define a teardown function.

:::diff

+ void MyQueue ::teardown() {
+     ...
+ }

Use const Fw::TimeInterval& interval as Argument to Os::TaskInterface::_delay()

Os::TaskInterface uses a const Reference for the interval to prevent a copy when passing by value.

For Platform Developers

Implementers of Os::Task must switch to taking const TimeInterval& interval as input on their implementation of _delay.

:::diff

- Os::Task::Status PosixTask::_delay(Fw::TimeInterval interval) {
+ Os::Task::Status PosixTask::_delay(const Fw::TimeInterval& interval) {

sscanf Implementation

F Prime now provides an sscanf implementation selection (like was previously available for printf). This was done to allow users to entirely bypass the format-function in the C library by providing their own implementations.

For Platform Developers

Platform developers, at minimum, should add a new implementation selection to their platform CMake.

:::diff
      CHOOSES_IMPLEMENTATIONS
          ...

+         Fw_StringScan_sscanf

What's Changed

New Contributors

Full Changelog: https://github.com/nasa/fprime/compare/v4.1.1...v4.2.0

Source: README.md, updated 2026-04-01