We are excited to release F Prime v4.0! This release is a major upgrade from the latest v3 series and includes numerous improvements, new features, and breaking changes that enhance the framework's capabilities and maintainability.
This release comes with the following amazing features:
Conditional Sequencing (Svc/FpySequencer)
Improved CMake architecture
Support for CCSDS communication protocols (TC, TM and Space Packet)
Telemetry packet definitions (allowing removal of all XML dependencies)
Type aliases
Externally managed parameters
Exporting of type configurations to GDS dictionary
Improved code generation for strings
Code generation supporting improvements in F Prime
FPP Interfaces
Better subtopology support and addition of core subtopologies in
Svc.Subtopologies
Better GDS plugin support (GdsStandardApp, DataHandlerPlugin)
Fixed-Width Numerical Types
Formalized configuration modules
Design pattern documentation
Code Consistency Improvements
Release v4.0 is a significant upgrade and comes with multiple breaking changes that were introduced in order to consolidate design patterns and bring them in line with our coding standards. Below is a list of breaking changes as well as instructions on how to upgrade a v3.6.x project to v4.
Table of Contents
These changes are broken down into the following categories:
[!TIP]
Some changes are required and others are optional. The 🚨 symbol designates a breaking change that may apply to projects wishing to migrate to v4.
Typing Changes
F Prime is removing the NATIVE_INT_TYPE, PlatformIntType, etc. Additionally, F Prime has begun ensuring that configurable types (e.g. FwIndexType) are configured to fixed-width values. The requirements (signed, minimum sizes) can be found in the numerical types document.
[!WARNING]
All Typing changes are required for upgrade to v4.0.0.
Port Indicies and NATIVE_INT_TYPE and NATIVE_UINT_TYPE FwIndexType Removal
NATIVE_INT_TYPE must be replaced with FwIndexType in port indices. Other uses of NATIVE_INT_TYPE and NATIVE_UINT_TYPE must also be replaced as these violate the fixed-width type standard.
Use of NATIVE_INT_TYPE has been removed in unit tests.
Before:
static const NATIVE_INT_TYPE MAX_HISTORY_SIZE = 10;
// Instance ID supplied to the component instance under test
static const NATIVE_INT_TYPE TEST_INSTANCE_ID = 0;
// Queue depth supplied to the component instance under test
static const NATIVE_INT_TYPE TEST_INSTANCE_QUEUE_DEPTH = 10;
After:
// Maximum size of histories storing events, telemetry, and port outputs
static const U32 MAX_HISTORY_SIZE = 10;
// Instance ID supplied to the component instance under test
static const FwEnumStoreType TEST_INSTANCE_ID = 0;
// Queue depth supplied to the component instance under test
static const FwSizeType TEST_INSTANCE_QUEUE_DEPTH = 10;
Fw::Buffer size type
The Fw::Buffer size type has been changed to FwSizeType (previously U32). This allows for configuration and better integration with other types. Switch to using FwSizeType when reading / setting Fw::Buffer sizes.
Struct Member Access
C++ getters and setters for fields of FPP structs are now autocoded in the form get_<field>() and set_<field>() (used to be get<field>() and set<field>()). C++ code using those getters and setters must be updated.
Component Changes
Component implementations in v4.0.0 have also changed.
Removal of PRIVATE, PROTECTED, and STATIC
Macro definitions PRIVATE, PROTECTED, and STATIC were as close to redefining a language feature as one could get without technically redefining a language feature. Users must switch to friend classes for white-box unit tests.
[!WARNING]
This change is required.
Unittest base classes are automatically and a tester classes are automatically added as friends to the component's base class to enable unit testing. Users may implement test-access to the base class through their tester class (e.g. SignalGenTester).
Users needing access to the component implementation class should add a friendship statement by hand.
Component Configuration Usage Changes
Configuration headers have been placed in the name-spacing folder config. This is to reduce the possibility of collision with project and external headers. Configuration paths must be updated. FpConfig.hpp/FpConfig.h has been updated to Fw/FPrimeBasicTypes.hpp/Fw/FPrimeBasicTypes.h and a dependency on Fw_Types is now explicitly required.
[!WARNING]
These changes are required and affects configuration headers and autocoded configuration headers.
Before:
#include "IpCfg.hpp"
After:
#include "config/IpCfg.hpp"
Before: C++
#include "FpConfig.hpp"
After: C++
#include "Fw/FPrimeBasicTypes.hpp
Before: CMakeLists.txt
set(MOD_DEPS
SomeDependency
)
After: CMakeLists.txt
set(MOD_DEPS
Fw_Types
SomeDependency
)
[!TIP]
Fw_Types is auto-detected for FPP-based modules. Add this dependency when not using FPP autocoding on your module.
Built-In Component Changes
FileUplink and FileDownlink now prepend the buffers (file packets) they send out with the appropriate FW_PACKET_FILE marker, as it is expected for all F´ data packets.
ComQueue has been updated to handle buffer management according the "Data Return" pattern mentioned above.
Svc.ActiveLogger has been renamed to Svc.EventManager
Drv.BlockDriver has been removed. Users can use a timer component to tick the RateGroupDriver instead, such as Svc.LinuxTimer. An example of such a changeset can be found here: fprime-tutorial-hello-world#46
The Drv.ByteStreamDriver interface has been slightly modified and the Drv.AsyncByteStreamDriver has been introduced. The Svc.ComStub component has been updated to work with either of those interfaces.
<interface>.fppi style interfaces have been replaced with format FPP interface/import. Examples can be found in Svc/Interfaces/ and Drv/Interfaces/
Deployment Changes
Deployments in v4.0.0 have substantially changed, and F´ now ships subtopologies to help construct deployments with minimal copy-and-paste from F´ into users topologies.
[!TIP]
It may be easiest to reconstruct a deployment using fprime-util new --deployment as it will stamp-out a basic subtopology-powered deployment. Users would need to re-add their custom component instances and connections.
Pre-built subtopologies
F Prime now ships with the following subtopologies that users can use to reduce the size and complexity of their topology.
[!TIP]
This change is not required but can help adopting required changes more easily.
| Subtopology | Description |
|---------------|----------------------------------------------------------------------------------------------|
| CdhCore | - Command dispatching and event management - Event logging and telemetry collection - Health monitoring system - Fatal error handling |
| ComCcsds | - CCSDS protocol implementation - Frame processing and routing |
| ComFprime | - F Prime protocol implementation - Frame processing and routing |
| FileHandling | - File upload and download services - Parameter database management - File system operations |
| DataProducts | - Data product cataloging - Storage and retrieval capabilities - Product metadata management |
The Uplink and Downlink components have been updated for better modularity and to allow for easy support of other communication protocols.
[!TIP]
Rather than making all these changes by hand, users can instead import the Comms subtopologies.
Example Change Set
If using a standard Uplink/Downlink stack as generated by fprime-util new --deployment, the full change-set that users need to apply to their topology is shown in the LedBlinker change log
# Note: Make sure to adjust the base IDs to fit in your deployment
- instance framer: Svc.Framer base id 0x4100
+ instance framer: Svc.FprimeFramer base id 0x4100
- instance deframer: Svc.Deframer base id 0x4900
+ instance deframer: Svc.FprimeDeframer base id 0x4900
+ instance frameAccumulator: Svc.FrameAccumulator base id 0x4D00
+ instance fprimeRouter: Svc.FprimeRouter base id 0x4E00
Click to Expand changes to a Topology.cpp
The following removes the old framing/deframing protocols, and introduces the new FprimeFrameDetector.
The old Svc.Deframer was performing 3 functionalities: (1) accumulating bytes in a circular buffer until it detects a full frame, (2) validating the frame and extracting the payload data, and (3) routing payload data to its destination.
In the new Uplink stack, these 3 functionalities have been split into 3 distinct components: (1) Svc.FrameAccumulator, (2) Svc.FprimeDeframer, and (3) Svc.FprimeRouter. To learn more about these components, please check out their SDDs on the website!
Each component implements an FPP Interface (in Svc/Interfaces/) so that they can be swapped with project-specific components, allowing for custom Deframing / Routing.
Memory Management
Memory management in the Uplink/Downlink stack has been updated so that a buffer coming out of a component on dataOut shall come back on dataReturnIn. This allows for components to allocate/deallocate memory as they see fit, and for the Topology Engineer not to have to track down memory management of each component to make sure they are wired correctly with the appropriate BufferManagers.
Downlink Changes
In the Downlink stack, the port connections have been modified to fit the new memory management pattern. The Framer now implements the FramerInterface.fppi to allow projects to implement custom Framing easily.
Build System Changes
These changes affect how the CMake system is used.
New CMake Module Structure
The old module registration structure in F Prime had one primary limitation: SOURCE_FILES and MOD_DEPS were variables and thus could bleed into other module registrations if not unset. This pollution of CMake's variable namespace, high chance for user error, and poor choice of the name "MOD_DEPS" led to a need to refactor how modules are done. To fit in with modern CMake practices, all module inputs are arguments to the registration calls with individual variables specified by directive arguments (e.g. SOURCES, DEPENDS).
[!TIP]
register_fprime_module, register_fprime_deployment and register_fprime_ut still support MOD_DEPS, SOURCE_FILES, UT_MOD_DEPS, UT_SOURCE_FILES. Updating to the new structure is only required for register_fprime_configuration calls. However, new features will only be supported with the new structure and as such, users are encouraged to update when needed.
The new register_fprime_* calls are provided arguments lists separated by argument directives to specify sources (SOURCES), dependencies (DEPENDS) etc.
The first argument is an optional explicit module name followed by directives and their argument lists.
[!TIP]
Notice that autocoder inputs are now specifically called out separately from compiled source files.
[!WARNING]
Do not specify an explicit module name when autocoding FPP.
Old variable usage can be translated to new directives using the following table:
| Old Structure's Variable | Directive | Purpose |
|------------------------------------|----------------------|---------|
| SOURCE_FILES | SOURCES | Source files supplied to cc, c++, or other compiler |
| SOURCE_FILES | AUTOCODER_INPUTS | Autocoder input files used to generate file |
| MOD_DEPS | DEPENDS | Module build target dependencies |
| HEADER_FILES | HEADERS | Header files supplied by the module |
| UT_SOURCE_FILES (built) | SOURCES | Unit test source files to supplied to compiler |
| UT_SOURCE_FILES (autocode inputs) | AUTOCODER_INPUTS | Unit test autocoder input files |
| UT_MOD_DEPS | DEPENDS | Unit test module dependencies |
| UT_HEADER_FILES | HEADERS | Unit test headers |
Deployment Ordering
Since deployments in F Prime do recursive detection of items like unit tests, etc, deployments now check for the existence of F Prime modules that support them. This means F Prime deployments must be defined last in the CMake structure.
One of the flaws of historical F Prime is that configuration was an all-or-nothing copy. It meant that projects, libraries, etc could not just override what was changed. This presented projects with a maintenance issue: owning unchanged code provided by F Prime while tracking their own minor changes.
With v4.0.0 projects choose to override specific files and the rest are inherited from underlying configuration modules.
[!WARNING]
These changes are required.
Additionally, each configuration is specified as a module. Use the CONFIGURATION_OVERRIDES directive to override existing config. User SOURCES, HEADERS, and AUTOCODER_INPUTS as usual to specify new configuration (i.e. new configuration for your library). Modules specifying only CONFIGURATION_OVERRIDES must also use the INTERFACE specifier.
To specify a new configuration module, ensure that some directory added to the project with add_fprime_subdirectory contains a CMakeLists.txt including a register_fprime_config call.
This example shows how to override just FpConifg.fpp and IpCfg.hpp from fprime.
[!TIP]
Configurations are overridden by filename, so remember to keep your filenames consistent with the file you wish to override.
[!TIP]
Default F Prime configuration lives at fprime/default/config projects will use these settings unless the filename is included in a projects configuration module via CONFIGURATION_OVERRIDES.
[!WARNING]
F Prime only has the notion of a single configuration per project (i.e. build). You still may not specify different configurations for different modules built by the same project.
Platform Changes
Platforms have had several major changes in v4.0.0:
Platform types have been moved into FPP as type aliases
Platform types are expected to use fixed-with types
Platform setup should now be a configuration module via register_fprime_config
[!WARNING]
All changes in this section are required.
Platform Types
Platform types were previously defined as header typedefs, however; this meant these types (which flow into configurable types) are not available to FPP models. These types are now aliases within FPP.
Before (PlatformTypes.h)
typedef uint64_t PlatformSizeType;
...
After (PlatformTypes.fpp)
@ The unsigned type of larger sizes internal to the software,
@ e.g., memory buffer sizes, file sizes. Must be unsigned.
@ Supplied by platform, overridable by project.
type PlatformSizeType = U64
...
[!WARNING]
Since PlatfromPointerCast should not be used in the model, it is kept in PlatformTypes.h
Platform definitions are defined in cmake/platform/<name-of-platform>.cmake. This file must now define an fprime configuration module that performs the autocoding for the new PlatformTypes.fpp
The OSAL method Os::FileSystem::getPathType() is now implementation-specific. OSAL implementations should implement this method if they wish to use it in their project.
XML is no longer supported as a modeling language or intermediary output. Users should switch to the FPP features.
Fw::Buffer::getSerializeRepr() has been deprecated in favor of two simpler-to-use methods for serialization and deserialization: Fw::Buffer::getSerializer() and Fw::Buffer::getDeserializer(). Example changesets are found nasa/fprime#3431.
The [de]serialization function variants [de]serialize(U8* buff, Serializable::SizeType& length, bool noLength) are deprecated as they do not adhere to coding guidelines. Users should switch to the [de]serialize(U8* buff, FwSizeType& length, Serialization::t mode) variants instead.
The serialization methods [de]serialize() will soon be deprecated. Users are recommended to switch to the serializeTo() and deserializeFrom() methods.
Other Significant Changes
These changes should not affect user developed code.
Subtopologies
F Prime v4 introduces better support for subtopologies (specification, configuration, etc.), which allow for better modularity and organization of components within a topology. Subtopologies can be used to group related components together, making it easier to manage complex systems. Core subtopologies are also available in Svc.Subtopologies. New deployment generation has been switched to use these subtopologies.
FPP v3
F Prime v4 ships with many significant new features to FPP (from FPP v3 release notes):
Telemetry packet definitions
Type aliases
Externally managed parameters
Exporting of type configurations to GDS dictionary
Improved code generation for strings
Code generation supporting improvements in F Prime
Bug fixes
Miscellaneous
Use of Os::StubMutex will now only cause an error in the case that there should have been mutex contention. In cases where the lock is uncontested, no error will result.
The CMake system has been switched to use Ninja by default instead of Makefiles. This comes with no changes to the user experience as Ninja can be shipped with the core pip requirements.txt. Build time should be improved.
The code base has been formatted for better readability and consistency.
Many, many, many bug fixes, minor improvements, and documentation updates have been made. See the full list of changes below for more details.
fprime-gds now defaults to using the CCSDS protocols. Users who want to retain the F´ protocol should use fprime-gds --framing-selection fprime 🚨
What's Changed
Click to Expand Full list of changes
Restructure user manual for holding design patterns by @thomas-bc in https://github.com/nasa/fprime/pull/3222
Port patterns by @LeStarch in https://github.com/nasa/fprime/pull/3132
NATIVE_INT_TYPE portNum to FwIndexType portNum by @LeStarch in https://github.com/nasa/fprime/pull/3236
Converting NATIVE_INT_TYPE in assert casts by @LeStarch in https://github.com/nasa/fprime/pull/3238
Fixing UT constants to use correct types by @LeStarch in https://github.com/nasa/fprime/pull/3237
NUM_PORTS -> FwIndexType by @LeStarch in https://github.com/nasa/fprime/pull/3239
Remove include of internal glibc header by @celskeggs in https://github.com/nasa/fprime/pull/3248
Adding manager-worker pattern documentation by @LeStarch in https://github.com/nasa/fprime/pull/3227
Improve BufferManager assertion context args by @celskeggs in https://github.com/nasa/fprime/pull/3223
Adding health checking pattern documentation by @LeStarch in https://github.com/nasa/fprime/pull/3228
Applying GDS Hotfix v3.6.1 by @LeStarch in https://github.com/nasa/fprime/pull/3265
Add type aliases to JSON dictionary spec by @jwest115 in https://github.com/nasa/fprime/pull/3254
Fixing fprime-tools to v3.6.1 hotsting release by @LeStarch in https://github.com/nasa/fprime/pull/3269
Adding fpp-to-layout now that base is fixed by @LeStarch in https://github.com/nasa/fprime/pull/3270
Remove ActiveLogger Priority by @kevin-f-ortega in https://github.com/nasa/fprime/pull/3268
Add telemetry packets to JSON dictionary spec by @jwest115 in https://github.com/nasa/fprime/pull/3221
Add CI check for fprime-examples repo by @thomas-bc in https://github.com/nasa/fprime/pull/3234
Fix depend-a-bot vulnerabilities by @LeStarch in https://github.com/nasa/fprime/pull/3271
Updates calculateCrc documentation for file pointer. Fixes #3259 by @LeStarch in https://github.com/nasa/fprime/pull/3279
Add NOT_SUPPORTED to OS' statues by @kevin-f-ortega in https://github.com/nasa/fprime/pull/3281
Update fprime-examples CI to use nasa repo by @thomas-bc in https://github.com/nasa/fprime/pull/3284
Add new Fw.Ready port for coordinating startup by @celskeggs in https://github.com/nasa/fprime/pull/3261
Add F Prime terminology translation guide by @matt392code in https://github.com/nasa/fprime/pull/3260
Improve error checking in mutex stub by @celskeggs in https://github.com/nasa/fprime/pull/3167
Draft of ROSES pattern form by @LeStarch in https://github.com/nasa/fprime/pull/3291
Add final to component implementation classes by @jwest115 in https://github.com/nasa/fprime/pull/3292
Rename PATTERN-SUGGESTION.yml to pattern_request.yml by @LeStarch in https://github.com/nasa/fprime/pull/3294
Fixing template for pattern request by @LeStarch in https://github.com/nasa/fprime/pull/3295
Roses/clarity by @LeStarch in https://github.com/nasa/fprime/pull/3296
Roses/clarity by @LeStarch in https://github.com/nasa/fprime/pull/3297
Removes NATIVE_INT_TYPE, NATIVE_UINT_TYPE, and POINTER_CAST from Fw by @LeStarch in https://github.com/nasa/fprime/pull/3286
Bump jinja2 from 3.1.5 to 3.1.6 by @dependabot[bot] in https://github.com/nasa/fprime/pull/3342
Improve warning flags in builds by @bocchino in https://github.com/nasa/fprime/pull/3319
Split Deframer into FrameAccumulator Deframer and Router by @thomas-bc in https://github.com/nasa/fprime/pull/3250
Adding format specifier aliases for primitives. Updating documentation. (#3199) by @vincewoo in https://github.com/nasa/fprime/pull/3375
Adding warning about the use of PlatformPointerCast. Fixes: #251 by @LeStarch in https://github.com/nasa/fprime/pull/3381
Assert numerical type invariants. Fixes: #3207 by @LeStarch in https://github.com/nasa/fprime/pull/3382
Fixes #3204 by removing NATIVE_ and POINTER_CAST from Drv by @LeStarch in https://github.com/nasa/fprime/pull/3380
Removing NATIVE_ and POINTER_CAST from FppTest, Utils, cmake, config,… by @LeStarch in https://github.com/nasa/fprime/pull/3378
Remove NATIVE_INT_TYPE, NATIVE_UINT_TYPE, and POINTER_CAST from Svc by @LeStarch in https://github.com/nasa/fprime/pull/3374
Fix UT_MOD_DEPS usage in Fw by @thomas-bc in https://github.com/nasa/fprime/pull/3392
Clarify dependency for FW_ENABLE_TEXT_LOGGING by @celskeggs in https://github.com/nasa/fprime/pull/3391
FPP v3.0.0a3 by @bocchino in https://github.com/nasa/fprime/pull/3393
Add apt-get update call to all workflows using apt-get by @thomas-bc in https://github.com/nasa/fprime/pull/3415
Ref Application README.md update by @tylerrussin in https://github.com/nasa/fprime/pull/3423
Testing with configured fixed-size types by @LeStarch in https://github.com/nasa/fprime/pull/3409
Fixing compilation error for FW_RELATIVE_PATH_ASSERT and FW_FILE_ID_ASSERT assert levels when ASSERT_RELATIVE_PATH or FW_FILE_ID are not defined. by @vincewoo in https://github.com/nasa/fprime/pull/3418
Issue 3285 reducing signed size type in os file by @LeStarch in https://github.com/nasa/fprime/pull/3402
Fix warnings in FppTest build by @bocchino in https://github.com/nasa/fprime/pull/3434
Add workflow for running fpp-to-json on Ref by @jwest115 in https://github.com/nasa/fprime/pull/3430
Return cmd repsonse for LOG_STATUS in SeqDispatcher by @zimri-leisher in https://github.com/nasa/fprime/pull/3438
Update Ref to use FPP telemetry packets by @bocchino in https://github.com/nasa/fprime/pull/3440
Refactored type organization by @LeStarch in https://github.com/nasa/fprime/pull/3422
File typo by @kevin-f-ortega in https://github.com/nasa/fprime/pull/3464
Fix uart baudrates by @kevin-f-ortega in https://github.com/nasa/fprime/pull/3469
Add System Reference to CI by @jwest115 in https://github.com/nasa/fprime/pull/3466
Deprecate Fw::Buffer::getSerializeRepr in favor of 'getSerializer' and 'getDeserializer' by @vincewoo in https://github.com/nasa/fprime/pull/3431
Add FW_PACKET_FILE descriptor to FileDownlink and FileUplink logic by @thomas-bc in https://github.com/nasa/fprime/pull/3488
Fix FileDownlink conversion warning by @thomas-bc in https://github.com/nasa/fprime/pull/3493
Add OsTime component by @kubiak-jpl in https://github.com/nasa/fprime/pull/3355
Config blank slate by @LeStarch in https://github.com/nasa/fprime/pull/3487
Fix installation of ALIAS targets in CMake by @thomas-bc in https://github.com/nasa/fprime/pull/3514
FpySequencer 0.1 by @zimri-leisher in https://github.com/nasa/fprime/pull/3334
FppTest: Type Alias by @Kronos3 in https://github.com/nasa/fprime/pull/3470
Auto-generate nav with mkdocs-awesome-nav by @ashleynilo in https://github.com/nasa/fprime/pull/3460
Fixing timing issue in TcpServer UTs by @vincewoo in https://github.com/nasa/fprime/pull/3528
Revise array allocation in Frame Accumulator by @bocchino in https://github.com/nasa/fprime/pull/3525
Add Framer FPP interface, implement FprimeFramer and adapt ComQueue by @thomas-bc in https://github.com/nasa/fprime/pull/3486
Add upper-bound limit to for loop in Os::FileSystem by @kevin-f-ortega in https://github.com/nasa/fprime/pull/3535
Fix hashes.txt generation by getting build_root by @thomas-bc in https://github.com/nasa/fprime/pull/3523
Fix sign-compare warning in Os::Posix::File, Svc::ComQueue, and Svc::… by @AlesKus in https://github.com/nasa/fprime/pull/3515
Add initial list of supported and future supported platforms by @kevin-f-ortega in https://github.com/nasa/fprime/pull/3348
Add docs for driver interfaces by @kevin-f-ortega in https://github.com/nasa/fprime/pull/3542
Remove old help-text from GDS guide by @thomas-bc in https://github.com/nasa/fprime/pull/3541
Add ByteStreamDriverInterface docs section by @thomas-bc in https://github.com/nasa/fprime/pull/3549
Fix ComStub UTs type warnings by @thomas-bc in https://github.com/nasa/fprime/pull/3550
Added nav for tutorials back to mkdocs.yml by @ashleynilo in https://github.com/nasa/fprime/pull/3556
Update docs link to match line numbers by @thomas-bc in https://github.com/nasa/fprime/pull/3560
Use data return pattern on Uplink and standardize port names by @thomas-bc in https://github.com/nasa/fprime/pull/3546
Add How To guide for integrating third-party libraries by @thomas-bc in https://github.com/nasa/fprime/pull/3489
Fix project-builder by checking out submodules by @thomas-bc in https://github.com/nasa/fprime/pull/3570
Clarify allocation failure error by @celskeggs in https://github.com/nasa/fprime/pull/3566
Clean up User Manual index docs by @ashleynilo in https://github.com/nasa/fprime/pull/3573
Improve GDS plugin documentation by @LeStarch in https://github.com/nasa/fprime/pull/3551
Clarify invocation of seqCmdStatus port in CmdDispatcher by @AlesKus in https://github.com/nasa/fprime/pull/3557
Improve one possible error on Svc.TlmChan bucket exhaustion by @celskeggs in https://github.com/nasa/fprime/pull/3567
Removing CMake from installation guide. Fixes #3501 by @LeStarch in https://github.com/nasa/fprime/pull/3574
Add file status by @kevin-f-ortega in https://github.com/nasa/fprime/pull/3569
Resolve Source Paths in CMake by @LeStarch in https://github.com/nasa/fprime/pull/3576
Prefixing variables to prevent shadowing. Fixes: #3370 by @LeStarch in https://github.com/nasa/fprime/pull/3585
Fix cookiecutter test workflow by @thomas-bc in https://github.com/nasa/fprime/pull/3583
Add Several CMake Tests to Prove Previous Fixes by @LeStarch in https://github.com/nasa/fprime/pull/3579
Allow new configuration for F Prime by @LeStarch in https://github.com/nasa/fprime/pull/3563
Fix ISR handler invocation in Drv::BlockDriver by @AlesKus in https://github.com/nasa/fprime/pull/3586
Fix version check error message by @celskeggs in https://github.com/nasa/fprime/pull/3596
Update FPP version by @bocchino in https://github.com/nasa/fprime/pull/3595
Fix memory leak in ComStub when reads fail by @celskeggs in https://github.com/nasa/fprime/pull/3600
Removing regneration from AC files that are themselves regenerated by @LeStarch in https://github.com/nasa/fprime/pull/3602
Remove unused property by @LeStarch in https://github.com/nasa/fprime/pull/3606
FpySequencer 0.2 by @zimri-leisher in https://github.com/nasa/fprime/pull/3552
Add GOVERNANCE Document by @LeStarch in https://github.com/nasa/fprime/pull/3609
Add command to OsTime to set the current time by @celskeggs in https://github.com/nasa/fprime/pull/3607
Making configuration files trigger configure by @LeStarch in https://github.com/nasa/fprime/pull/3620
Extern params by @Brian-Campuzano in https://github.com/nasa/fprime/pull/3608
Update Os File UTs by @kevin-f-ortega in https://github.com/nasa/fprime/pull/3619
Update requirements.txt for release v4.0.0a1 by @thomas-bc in https://github.com/nasa/fprime/pull/3623
Array toString() delimited with comma by @Kronos3 in https://github.com/nasa/fprime/pull/3626
Switch the type of the Task priority to FwTaskPriorityType by @m-aleem in https://github.com/nasa/fprime/pull/3617
Add UT_AUTO_HELPERS control word to new CMake API by @thomas-bc in https://github.com/nasa/fprime/pull/3648
Add Ninja to Requirements.txt by @rmzmrnn in https://github.com/nasa/fprime/pull/3627
Initial refactor to allow implementations as object libraries by @LeStarch in https://github.com/nasa/fprime/pull/3642
PRIVATE->private and PROTECTED->protected updates in Svc/File* (#3446) by @m-aleem in https://github.com/nasa/fprime/pull/3659
PRIVATE->private and PROTECTED->protected updates in Svc/Fprime* and Svc/Frame* (#3446) by @m-aleem in https://github.com/nasa/fprime/pull/3660
PRIVATE->private and PROTECTED->protected updates in Drv (#3446) by @m-aleem in https://github.com/nasa/fprime/pull/3658
PRIVATE->private updates in CFDP (#3446) by @m-aleem in https://github.com/nasa/fprime/pull/3657
Display cmake target on error by @emmanuel-ferdman in https://github.com/nasa/fprime/pull/3654
Moving snprintf to platform such that platforms may override it by @LeStarch in https://github.com/nasa/fprime/pull/3655
Add How-To Implement a Custom Framing Protocol guide by @thomas-bc in https://github.com/nasa/fprime/pull/3635
PRIVATE->private and PROTECTED->protected updates in Svc/ComLogger (#… by @m-aleem in https://github.com/nasa/fprime/pull/3661
PRIVATE->private and PROTECTED->protected updates in multiple Svc subdirectories (nasa#3446) by @m-aleem in https://github.com/nasa/fprime/pull/3669
Adding aarch64-linux workflow by @moisesmata in https://github.com/nasa/fprime/pull/3671
PRIVATE->private and PROTECTED->protected updates in multiple Fw subdirectories by @m-aleem in https://github.com/nasa/fprime/pull/3672
Add seqRunIn port to FpySequencer by @zimri-leisher in https://github.com/nasa/fprime/pull/3680
PRIVATE->private and PROTECTED->protected updates in Ref (nasa#3446) by @m-aleem in https://github.com/nasa/fprime/pull/3681
Bump setuptools from 75.3.0 to 78.1.1 by @dependabot[bot] in https://github.com/nasa/fprime/pull/3630
PRIVATE->private and PROTECTED->protected updates in Os, partial by @m-aleem in https://github.com/nasa/fprime/pull/3682
PRIVATE->private and PROTECTED->protected updates in RPI (nasa#3446) by @m-aleem in https://github.com/nasa/fprime/pull/3683
PRIVATE->private and PROTECTED->protected updates in FppTest/component (nasa#3446) by @m-aleem in https://github.com/nasa/fprime/pull/3686
PRIVATE->private and PROTECTED->protected updates in FppTest/state_machine (nasa#3446) by @m-aleem in https://github.com/nasa/fprime/pull/3687
The PR: XML purge - Wahoo! by @LeStarch in https://github.com/nasa/fprime/pull/3685
PRIVATE->private and PROTECTED->protected updates in Svc/BufferLogger by @m-aleem in https://github.com/nasa/fprime/pull/3690
Move BlockDriver to Ref example by @timcanham in https://github.com/nasa/fprime/pull/3651
PRIVATE->private and PROTECTED->protected updates in Svc/CmdSequencer by @m-aleem in https://github.com/nasa/fprime/pull/3695
PRIVATE->private and PROTECTED->protected updates in Svc/BufferAccumulator by @m-aleem in https://github.com/nasa/fprime/pull/3696
Adding note about explicitly identifying ports that need priority in SDD by @vincewoo in https://github.com/nasa/fprime/pull/3697
GDS Alpha 2 by @LeStarch in https://github.com/nasa/fprime/pull/3699
fixed copy paste error by @kevin-f-ortega in https://github.com/nasa/fprime/pull/3705
Bump requests from 2.32.3 to 2.32.4 by @dependabot[bot] in https://github.com/nasa/fprime/pull/3711
Fix ambiguous error for .serialize() overloads by @ethancheez in https://github.com/nasa/fprime/pull/3707
Adding support for UDP ephemeral ports by @vincewoo in https://github.com/nasa/fprime/pull/3691
PRIVATE->private and PROTECTED->protected updates in Os/File.hpp (#3446) by @m-aleem in https://github.com/nasa/fprime/pull/3701
Add support for CCSDS TC/TM and SpacePacket protocols by @thomas-bc in https://github.com/nasa/fprime/pull/3684
Scrubbing XML by @LeStarch in https://github.com/nasa/fprime/pull/3718
Fix miscellaneous items following #3684 by @thomas-bc in https://github.com/nasa/fprime/pull/3726
Add CI build for RHEL8 environment by @thomas-bc in https://github.com/nasa/fprime/pull/3731
Fix directory detection bug in Os::FileSystem::getPathType by @vincewoo in https://github.com/nasa/fprime/pull/3727
Add Core Subtopologies: CDHCore by @moisesmata in https://github.com/nasa/fprime/pull/3720
Support non-default Fw type config (ie: U16, U64) by @jwest115 in https://github.com/nasa/fprime/pull/3714
Update supported platforms by @kevin-f-ortega in https://github.com/nasa/fprime/pull/3710
Add constants to dictionary spec by @jwest115 in https://github.com/nasa/fprime/pull/3692
Purge PlatformIntType and PlatformUIntType by @LeStarch in https://github.com/nasa/fprime/pull/3719
CMake Refactor: Explicity Setting Autocoder Outputs by @LeStarch in https://github.com/nasa/fprime/pull/3735
PRIVATE->private and PROTECTED->protected updates in Svc/FpySequencer by @m-aleem in https://github.com/nasa/fprime/pull/3737
Fix subtopology dictionary installation and redundant installation by @LeStarch in https://github.com/nasa/fprime/pull/3744
PRIVATE -> private for Fw/Buffer by @m-aleem in https://github.com/nasa/fprime/pull/3754
PRIVATE -> private for Os/Task.hpp by @m-aleem in https://github.com/nasa/fprime/pull/3752
Fix compilation when FW_QUEUE_REGISTRATION == 0 by @celskeggs in https://github.com/nasa/fprime/pull/3746
PRIVATE -> private for Svc/DpCatalog by @m-aleem in https://github.com/nasa/fprime/pull/3742
Bugfixes and updates to requirements.txt by @kevin-f-ortega in https://github.com/nasa/fprime/pull/3757
PRIVATE -> private for Fw/FilePacket by @m-aleem in https://github.com/nasa/fprime/pull/3756
PRIVATE -> private for Fw/Time by @m-aleem in https://github.com/nasa/fprime/pull/3755
PRIVATE -> private for Utils/Types/CircularBuffer.hpp by @m-aleem in https://github.com/nasa/fprime/pull/3743
CDHCore Subtopology improvements by @moisesmata in https://github.com/nasa/fprime/pull/3751
feat: use config header for CRC filename size by @0xb-s in https://github.com/nasa/fprime/pull/3708
PRIVATE -> private and PROTECTED -> protected in last remaining UTs by @m-aleem in https://github.com/nasa/fprime/pull/3765
PRIVATE -> private for Fw/Dp by @m-aleem in https://github.com/nasa/fprime/pull/3753
Rename CCSDS to Ccsds following PascalCase conventions by @moisesmata in https://github.com/nasa/fprime/pull/3788
Interfaces by @Kronos3 in https://github.com/nasa/fprime/pull/3709
Designate base config from non-base config by @LeStarch in https://github.com/nasa/fprime/pull/3787
Add code formatting check to CI by @thomas-bc in https://github.com/nasa/fprime/pull/3778
Use concurrency groups in CI to prevent overfilling the queue by @thomas-bc in https://github.com/nasa/fprime/pull/3794
Bump urllib3 from 1.26.20 to 2.5.0 by @dependabot[bot] in https://github.com/nasa/fprime/pull/3767
Updates for Svc/PrmDb corresponding to UT cmake update for protected/private (#3446) by @m-aleem in https://github.com/nasa/fprime/pull/3772
Updates for Svc/ActiveLogger corresponding to UT cmake update for protected/private by @m-aleem in https://github.com/nasa/fprime/pull/3773
Updates for Svc/Health corresponding to UT cmake update for protected/private by @m-aleem in https://github.com/nasa/fprime/pull/3797
Updates for Svc/CmdSequencer corresponding to UT cmake update for protected/private by @m-aleem in https://github.com/nasa/fprime/pull/3798
Updates for Svc/ActiveRateGroup corresponding to UT cmake update for protected/private by @m-aleem in https://github.com/nasa/fprime/pull/3779
Updates for Svc/BufferAccumulator corresponding to UT cmake update for protected/private by @m-aleem in https://github.com/nasa/fprime/pull/3786
Updates for Svc/DpWriter corresponding to UT cmake udpate for protected/private by @m-aleem in https://github.com/nasa/fprime/pull/3800
Updates for Svc/CmdDispatcher corresponding to UT cmake update for protected/private by @m-aleem in https://github.com/nasa/fprime/pull/3795
Updates for Svc/PassiveRateGroup corresponding to UT cmake update for protected/private by @m-aleem in https://github.com/nasa/fprime/pull/3796
Updates for Svc/DpManager corresponding to UT cmake update for protected/private by @m-aleem in https://github.com/nasa/fprime/pull/3799
Fixing a bug in the shared setup_helper to make the wait_on_started ASSERT configurable by the calling test by @vincewoo in https://github.com/nasa/fprime/pull/3806
Switch Fw::Buffer size to FwSizeType instead of U32 by @thomas-bc in https://github.com/nasa/fprime/pull/3802
Refactor Drv::Ip::UdpSocket to clean up state members and remove dependency on dynamic memory by @vincewoo in https://github.com/nasa/fprime/pull/3728
FpySequencer V0.3 by @zimri-leisher in https://github.com/nasa/fprime/pull/3702
[ROSES] Update CMake Library integration guide based on student review by @thomas-bc in https://github.com/nasa/fprime/pull/3804
Format Svc/Ccsds package and add to CI by @thomas-bc in https://github.com/nasa/fprime/pull/3811
Add Core Subtopologies: ComFprime, ComCcsds, DataProducts, FileHandling by @moisesmata in https://github.com/nasa/fprime/pull/3768
STATIC -> static by @m-aleem in https://github.com/nasa/fprime/pull/3814
Update hello world link by @tylerrussin in https://github.com/nasa/fprime/pull/3823
Updates for Svc/FpySquencer corresponding to UT cmake update for protected/private by @m-aleem in https://github.com/nasa/fprime/pull/3812
Fix queue size regression by @LeStarch in https://github.com/nasa/fprime/pull/3827
CMake: Copy hashes.txt to build-artifact by @valdaarhun in https://github.com/nasa/fprime/pull/3771
Deprecated 'bool noLength' versions of serialize and deserialize. by @vincewoo in https://github.com/nasa/fprime/pull/3819
Update requirements to include fpp v3.0.0a13 and fprime-gds v4.0.0a7 by @jwest115 in https://github.com/nasa/fprime/pull/3813
Fix EXIT not handled in dispatchDirective by @zimri-leisher in https://github.com/nasa/fprime/pull/3837
Rename STATEMENT_TIMEOUT_SECS telemetry not to conflict with parameter by @zimri-leisher in https://github.com/nasa/fprime/pull/3836
Add seqstart/done ports to FpySequencer by @zimri-leisher in https://github.com/nasa/fprime/pull/3826
FpySequencer floating point comparisons by @zimri-leisher in https://github.com/nasa/fprime/pull/3820
Make Fw::TimeInterval an FPP Struct by @m-aleem in https://github.com/nasa/fprime/pull/3834
Add fpext, fptrunc directives by @zimri-leisher in https://github.com/nasa/fprime/pull/3845
Fix JSON dict formatting by @jwest115 in https://github.com/nasa/fprime/pull/3858
Clean up supported platforms documentation by @kevin-f-ortega in https://github.com/nasa/fprime/pull/3873
Add float to int conversion directives, some misc changes by @zimri-leisher in https://github.com/nasa/fprime/pull/3847
Bump to fprime-tools v4.0.0a6 (Fix CI) by @LeStarch in https://github.com/nasa/fprime/pull/3863
Fix framework UT shutoff regression by @celskeggs in https://github.com/nasa/fprime/pull/3883
Update supported platforms by @kevin-f-ortega in https://github.com/nasa/fprime/pull/3881
Updates for FPPTest corresponding to UT cmake update for protected/private by @m-aleem in https://github.com/nasa/fprime/pull/3810
Fixed invalid FW_ASSERT in LinuxUartDriver. Replaced with FW_ASSERT_NO_OVERFLOW. by @vincewoo in https://github.com/nasa/fprime/pull/3894
Add CMake package file for F Prime by @LeStarch in https://github.com/nasa/fprime/pull/3898
Linux should not default to stubbed drivers by @LeStarch in https://github.com/nasa/fprime/pull/3840
Update clang-format dependency for ARM32 support by @thomas-bc in https://github.com/nasa/fprime/pull/3901
Adding FW_CASSERT_1 macro for C by @vincewoo in https://github.com/nasa/fprime/pull/3896
Add a repository dirtiness indicator to the auto-generated version information by @ianbrault in https://github.com/nasa/fprime/pull/3899
Issue 3745 by @LeStarch in https://github.com/nasa/fprime/pull/3843
Make Os.RawTime comparable for equality by @celskeggs in https://github.com/nasa/fprime/pull/3902
Update F' Time handling with FPP struct and clean up TIME flags, and remove Time Context comparison by @m-aleem in https://github.com/nasa/fprime/pull/3844
Add ComLoggerTee Core Subtopology by @moisesmata in https://github.com/nasa/fprime/pull/3867
Restrict TCP subtopologies to supported platforms by @celskeggs in https://github.com/nasa/fprime/pull/3903
Reset PROTECTED/PRIVATE/STATIC override flags by @m-aleem in https://github.com/nasa/fprime/pull/3815
Remove RPI project in lieu of the LED workshop by @LeStarch in https://github.com/nasa/fprime/pull/3908
Added config needed to run InT scripts by @kevin-f-ortega in https://github.com/nasa/fprime/pull/3915
Rework fpp test by @m-aleem in https://github.com/nasa/fprime/pull/3912
Rename ActiveLogger to EventManager by @thomas-bc in https://github.com/nasa/fprime/pull/3920
Remove PRIVATE PROTECTED and STATIC access overrides by @m-aleem in https://github.com/nasa/fprime/pull/3821
Replace struct get/set with get_/set_ by @LeStarch in https://github.com/nasa/fprime/pull/3917
Stub std::atomic implementation by @m-aleem in https://github.com/nasa/fprime/pull/3909
Generate dictionaries in deployment targets by @celskeggs in https://github.com/nasa/fprime/pull/3910
Add lightweight SpscQueue class by @celskeggs in https://github.com/nasa/fprime/pull/3871
Adds calls to cmdResponse_out for both OK and EXECUTION_ERROR conditions Fixes #3897 by @MikeMcPherson in https://github.com/nasa/fprime/pull/3926
Make .fppi changes trigger re-generation by @LeStarch in https://github.com/nasa/fprime/pull/3933
Renaming serialize/deserialize methods to serializeTo/serializeFrom and deserializeTo/deserializeFrom by @vincewoo in https://github.com/nasa/fprime/pull/3880
Revert "Stub std::atomic implementation" by @LeStarch in https://github.com/nasa/fprime/pull/3934
Compile-time asserts for string-vs.-buffer max sizes do not account for serialized string lengths by @ianbrault in https://github.com/nasa/fprime/pull/3937
Restructure core subtopologies and add Svc_Subtopologies target by @moisesmata in https://github.com/nasa/fprime/pull/3904
Update GDS and Tools requirements for v4.0.0a2 by @thomas-bc in https://github.com/nasa/fprime/pull/3953
Updates Types.fpp to use optimized sizes for enumerations by @kyleajones in https://github.com/nasa/fprime/pull/3956
Format Os Module by @thomas-bc in https://github.com/nasa/fprime/pull/3959
Format Drv module by @thomas-bc in https://github.com/nasa/fprime/pull/3960
Update data types doc by @jwest115 in https://github.com/nasa/fprime/pull/3957
Bump GDS to latest release by @aborjigin in https://github.com/nasa/fprime/pull/3964
Improve backward compatibility [de]serialize[From/To] fallback on Fw::Serializable and Fw::Buffer by @Kronos3 in https://github.com/nasa/fprime/pull/3962
Remove XML dependencies from requirements by @thomas-bc in https://github.com/nasa/fprime/pull/3961
Clang 20.1 UT Errors by @m-aleem in https://github.com/nasa/fprime/pull/3949
Format Fw and add to CI by @thomas-bc in https://github.com/nasa/fprime/pull/3976
Fix/uart bytes by @LeStarch in https://github.com/nasa/fprime/pull/3948
Bump fprime-tools version by @LeStarch in https://github.com/nasa/fprime/pull/3972
Update Cross Compilation Tutorial by @aborjigin in https://github.com/nasa/fprime/pull/3979
Format Svc and add to CI by @thomas-bc in https://github.com/nasa/fprime/pull/3978
Rate drive sent/receive telemetry by @LeStarch in https://github.com/nasa/fprime/pull/3980
Add DP Demo for testing DPs and fprime-dp-writer by @jwest115 in https://github.com/nasa/fprime/pull/3951
CMake documentation refactor by @LeStarch in https://github.com/nasa/fprime/pull/3981
Fix F Prime location in LedBlinker CI by @thomas-bc in https://github.com/nasa/fprime/pull/3988
Removed sock fd assert on IpSocket by @jsilveira1409 in https://github.com/nasa/fprime/pull/3973
Update teardown ordering by @LeStarch in https://github.com/nasa/fprime/pull/3990
Differentiate sync/async ByteStreamDriver and update ComStub to work with both by @thomas-bc in https://github.com/nasa/fprime/pull/3987
(De)Serialization clean up of temporary workarounds by @vincewoo in https://github.com/nasa/fprime/pull/3971
Update to FPP v3.0.0, Tools v4.0.0, and GDS v4.0.0 by @LeStarch in https://github.com/nasa/fprime/pull/3995
Generative AI documentation Added by @aborjigin in https://github.com/nasa/fprime/pull/3932
Fix HelloWorld CI following update to v4.0 by @thomas-bc in https://github.com/nasa/fprime/pull/3997
PR 4000: Bump Tools and GDS by @thomas-bc in https://github.com/nasa/fprime/pull/4000
New Contributors
@vincewoo made their first contribution in https://github.com/nasa/fprime/pull/3375
@tylerrussin made their first contribution in https://github.com/nasa/fprime/pull/3423
@Brian-Campuzano made their first contribution in https://github.com/nasa/fprime/pull/3608
@emmanuel-ferdman made their first contribution in https://github.com/nasa/fprime/pull/3654
@0xb-s made their first contribution in https://github.com/nasa/fprime/pull/3708
@valdaarhun made their first contribution in https://github.com/nasa/fprime/pull/3771
@ianbrault made their first contribution in https://github.com/nasa/fprime/pull/3899
@MikeMcPherson made their first contribution in https://github.com/nasa/fprime/pull/3926
@kyleajones made their first contribution in https://github.com/nasa/fprime/pull/3956
@aborjigin made their first contribution in https://github.com/nasa/fprime/pull/3964
Full Changelog: https://github.com/nasa/fprime/compare/v3.6.3...v4.0.0