Releases: nasa/fprime
v3.6.4
What's Changed
- Use correct enum size when generating tlm packet structures by @nathancheek in #4333
Full Changelog: v3.6.3...v3.6.4
v4.0.1a1
What's Changed
- Add static_cast to ambiguous serialize call in FpySequencer by @ethancheez in #4008
- FpySequencer stack based architecture by @zimri-leisher in #3975
- Fix AI Policy link in PR template by @thomas-bc in #4019
- Remove notice by @LeStarch in #4045
- Format FppTest by @bocchino in #4048
- Update Drv IP stack to use FwSizeType instead of U32 by @thomas-bc in #4013
- Basic data structure library, phase 1 by @bocchino in #3927
- FpySequencer arithmetic by @zimri-leisher in #4025
- Update supported platforms by @kevin-f-ortega in #4071
- Add ground derived channels how-to guide by @LeStarch in #4074
- Add venv requirements for running framework tests by @pjromano in #4078
- Add logic for assert failure short circuiting in
AssertFatalAdapterby @kyleajones in #4042 - Add subtopology documentation by @thomas-bc in #4072
- Add event ID filters to text logger components by @ianbrault in #4028
- Bump GDS to v4.0.2a3 by @LeStarch in #4079
- Allow FPP arrays of arbitrary size by @bocchino in #4073
- Update project structure in cookiecutters CI by @LeStarch in #3991
- Update troubleshooting guide by @LeStarch in #4086
- Add test driven development how-to by @LeStarch in #4090
- Add reusable InT test scripts by @chuynh4duarte in #3923
- Modify LinuxTimer interface for consistency by @LeStarch in #4087
- FpySequencer U32 stack size + some error telemetry by @zimri-leisher in #4065
- Add Framing subtopologies and use them within Com subtopologies by @thomas-bc in #4113
- Incorporate student feedback for ground derived channels by @LeStarch in #4117
- Update fprime-gds version to 4.0.2a4 by @LeStarch in #4118
- Revise subtopology development documentation by @LeStarch in #4119
- Create SDD for ComCcsds subtopology by @LeStarch in #4128
- Create SDD for CdhCore subtopology by @LeStarch in #4121
- Feedback updates on common port patters, health, and worker by @LeStarch in #4115
- Add Software Design Document for FileHandling subtopology by @LeStarch in #4125
- Add FPP state machine How-To by @LeStarch in #4096
- Add Software Design Document for ComFprime subtopology by @LeStarch in #4127
- Enhancement: Added file size and subdirectory support to FileManager directory listing feature by @Isaac-G5900 in #4041
- Revise Communication Adapter Interface documentation by @LeStarch in #4133
- Add Active Phaser to Svc by @lsk567 in #3974
- Format all top-level source folders by @thomas-bc in #4134
- Fix test logic for TcDeframer CRC check by @thomas-bc in #4138
- Fixing LinuxSpiDriver issues; Adding function argument check and completing read-after-write checks by @vincewoo in #4137
- Revise install instructions with latest project structure by @thomas-bc in #4139
- Add SDD documentation for LinuxUartDriver component by @Copilot in #4124
- Bump requirements ahead of v4.0.1a1 by @thomas-bc in #4142
New Contributors
- @pjromano made their first contribution in #4078
- @Isaac-G5900 made their first contribution in #4041
- @lsk567 made their first contribution in #3974
- @Copilot made their first contribution in #4124
Full Changelog: v4.0.0...v4.0.1a1
v4.0.0
Summary
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)
- FPP v3, including:
- 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:
- Typing Changes 🚨
- Component Changes
- Deployment Changes
- Build System Changes
- Platform Changes 🚨
- Other breaking changes 🚨
- Deprecations
- Other Significant Changes
- What's Changed
- New Contributors
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.
Users needing non-default values for configurable types should set them as type aliases in FPP using the new configuration system.
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.
For other configurable type options, see numerical types design.
Before:
const NATIVE_INT_TYPE portNumAfter:
const FwIndexType portNum
Rate Group Contexts
Rate group context has been changed to the fixed-width type U32 to meet compliance with fixed-with types usage.
Before
NATIVE_INT_TYPE rateGroup1Context[Svc::ActiveRateGroup::CONNECTION_COUNT_MAX] = {};
NATIVE_INT_TYPE rateGroup2Context[Svc::ActiveRateGroup::CONNECTION_COUNT_MAX] = {};
NATIVE_INT_TYPE rateGroup3Context[Svc::ActiveRateGroup::CONNECTION_COUNT_MAX] = {};After:
U32 rateGroup1Context[Svc::ActiveRateGroup::CONNECTION_COUNT_MAX] = {};
U32 rateGroup2Context[Svc::ActiveRateGroup::CONNECTION_COUNT_MAX] = {};
U32 rateGroup3Context[Svc::ActiveRateGroup::CONNECTION_COUNT_MAX] = {};Unit Test Constant Changes
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.hppBefore: 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_FILEmarker, 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.ActiveLoggerhas been renamed toSvc.EventManager -
Drv.BlockDriverhas been removed. Users can use a timer component to tick theRateGroupDriverinstead, such asSvc.LinuxTimer. An example of such a changeset can be found here: fprime-tutorial-hello-world#46 -
The
Drv.ByteStreamDriverinterface has been slightly modified and theDrv.AsyncByteStreamDriverhas been introduced. TheSvc.ComStubcomponent has been updated to work with either of those interfaces. -
<interface>.fppistyle interfaces have been replaced with format FPPinterface/import. Examples can be found inSvc/Interfaces/andDrv/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 ...
v4.0.0a3: Hold Your Breath...
One last check before PR-4000 (v4.0.0).
What's Changed
- Updates
Types.fppto use optimized sizes for enumerations by @kyleajones in #3956 - Format Os Module by @thomas-bc in #3959
- Format Drv module by @thomas-bc in #3960
- Update data types doc by @jwest115 in #3957
- Bump GDS to latest release by @aborjigin in #3964
- Improve backward compatibility [de]serialize[From/To] fallback on Fw::Serializable and Fw::Buffer by @Kronos3 in #3962
- Remove XML dependencies from requirements by @thomas-bc in #3961
- Clang 20.1 UT Errors by @m-aleem in #3949
- Format Fw and add to CI by @thomas-bc in #3976
- Fix/uart bytes by @LeStarch in #3948
- Bump fprime-tools version by @LeStarch in #3972
- Update Cross Compilation Tutorial by @aborjigin in #3979
- Format Svc and add to CI by @thomas-bc in #3978
- Rate drive sent/receive telemetry by @LeStarch in #3980
- Add DP Demo for testing DPs and fprime-dp-writer by @jwest115 in #3951
- CMake documentation refactor by @LeStarch in #3981
- Fix F Prime location in LedBlinker CI by @thomas-bc in #3988
- Removed sock fd assert on IpSocket by @jsilveira1409 in #3973
- Update teardown ordering by @LeStarch in #3990
- Differentiate sync/async ByteStreamDriver and update ComStub to work with both by @thomas-bc in #3987
- (De)Serialization clean up of temporary workarounds by @vincewoo in #3971
- Update to FPP v3.0.0, Tools v4.0.0, and GDS v4.0.0 by @LeStarch in #3995
- Generative AI documentation Added by @aborjigin in #3932
- Fix HelloWorld CI following update to v4.0 by @thomas-bc in #3997
- PR 4000: Bump Tools and GDS by @thomas-bc in #4000
New Contributors
- @kyleajones made their first contribution in #3956
- @aborjigin made their first contribution in #3964
Full Changelog: v4.0.0a2...v4.0.0a3
v4.0.0a2 (Alpha 2)
What's Changed
- Array toString() delimited with comma by @Kronos3 in #3626
- Switch the type of the Task priority to FwTaskPriorityType by @m-aleem in #3617
- Add
UT_AUTO_HELPERScontrol word to new CMake API by @thomas-bc in #3648 - Add Ninja to Requirements.txt by @rmzmrnn in #3627
- Initial refactor to allow implementations as object libraries by @LeStarch in #3642
- PRIVATE->private and PROTECTED->protected updates in Svc/File* (#3446) by @m-aleem in #3659
- PRIVATE->private and PROTECTED->protected updates in Svc/Fprime* and Svc/Frame* (#3446) by @m-aleem in #3660
- PRIVATE->private and PROTECTED->protected updates in Drv (#3446) by @m-aleem in #3658
- PRIVATE->private updates in CFDP (#3446) by @m-aleem in #3657
- Display cmake target on error by @emmanuel-ferdman in #3654
- Moving snprintf to platform such that platforms may override it by @LeStarch in #3655
- Add How-To Implement a Custom Framing Protocol guide by @thomas-bc in #3635
- PRIVATE->private and PROTECTED->protected updates in Svc/ComLogger (#… by @m-aleem in #3661
- PRIVATE->private and PROTECTED->protected updates in multiple Svc subdirectories (#3446) by @m-aleem in #3669
- Adding aarch64-linux workflow by @moisesmata in #3671
- PRIVATE->private and PROTECTED->protected updates in multiple Fw subdirectories by @m-aleem in #3672
- Add seqRunIn port to FpySequencer by @zimri-leisher in #3680
- PRIVATE->private and PROTECTED->protected updates in Ref (#3446) by @m-aleem in #3681
- Bump setuptools from 75.3.0 to 78.1.1 by @dependabot[bot] in #3630
- PRIVATE->private and PROTECTED->protected updates in Os, partial by @m-aleem in #3682
- PRIVATE->private and PROTECTED->protected updates in RPI (#3446) by @m-aleem in #3683
- PRIVATE->private and PROTECTED->protected updates in FppTest/component (#3446) by @m-aleem in #3686
- PRIVATE->private and PROTECTED->protected updates in FppTest/state_machine (#3446) by @m-aleem in #3687
- The PR: XML purge - Wahoo! by @LeStarch in #3685
- PRIVATE->private and PROTECTED->protected updates in Svc/BufferLogger by @m-aleem in #3690
- Move BlockDriver to Ref example by @timcanham in #3651
- PRIVATE->private and PROTECTED->protected updates in Svc/CmdSequencer by @m-aleem in #3695
- PRIVATE->private and PROTECTED->protected updates in Svc/BufferAccumulator by @m-aleem in #3696
- Adding note about explicitly identifying ports that need priority in SDD by @vincewoo in #3697
- GDS Alpha 2 by @LeStarch in #3699
- fixed copy paste error by @kevin-f-ortega in #3705
- Bump requests from 2.32.3 to 2.32.4 by @dependabot[bot] in #3711
- Fix ambiguous error for .serialize() overloads by @ethancheez in #3707
- Adding support for UDP ephemeral ports by @vincewoo in #3691
- PRIVATE->private and PROTECTED->protected updates in Os/File.hpp (#3446) by @m-aleem in #3701
- Add support for CCSDS TC/TM and SpacePacket protocols by @thomas-bc in #3684
- Scrubbing XML by @LeStarch in #3718
- Fix miscellaneous items following #3684 by @thomas-bc in #3726
- Add CI build for RHEL8 environment by @thomas-bc in #3731
- Fix directory detection bug in Os::FileSystem::getPathType by @vincewoo in #3727
- Add Core Subtopologies: CDHCore by @moisesmata in #3720
- Support non-default Fw type config (ie: U16, U64) by @jwest115 in #3714
- Update supported platforms by @kevin-f-ortega in #3710
- Add constants to dictionary spec by @jwest115 in #3692
- Purge PlatformIntType and PlatformUIntType by @LeStarch in #3719
- CMake Refactor: Explicity Setting Autocoder Outputs by @LeStarch in #3735
- PRIVATE->private and PROTECTED->protected updates in Svc/FpySequencer by @m-aleem in #3737
- Fix subtopology dictionary installation and redundant installation by @LeStarch in #3744
- PRIVATE -> private for Fw/Buffer by @m-aleem in #3754
- PRIVATE -> private for Os/Task.hpp by @m-aleem in #3752
- Fix compilation when FW_QUEUE_REGISTRATION == 0 by @celskeggs in #3746
- PRIVATE -> private for Svc/DpCatalog by @m-aleem in #3742
- Bugfixes and updates to requirements.txt by @kevin-f-ortega in #3757
- PRIVATE -> private for Fw/FilePacket by @m-aleem in #3756
- PRIVATE -> private for Fw/Time by @m-aleem in #3755
- PRIVATE -> private for Utils/Types/CircularBuffer.hpp by @m-aleem in #3743
- CDHCore Subtopology improvements by @moisesmata in #3751
- feat: use config header for CRC filename size by @0xb-s in #3708
- PRIVATE -> private and PROTECTED -> protected in last remaining UTs by @m-aleem in #3765
- PRIVATE -> private for Fw/Dp by @m-aleem in #3753
- Rename CCSDS to Ccsds following PascalCase conventions by @moisesmata in #3788
- Interfaces by @Kronos3 in #3709
- Designate base config from non-base config by @LeStarch in #3787
- Add code formatting check to CI by @thomas-bc in #3778
- Use concurrency groups in CI to prevent overfilling the queue by @thomas-bc in #3794
- Bump urllib3 from 1.26.20 to 2.5.0 by @dependabot[bot] in #3767
- Updates for Svc/PrmDb corresponding to UT cmake update for protected/private (#3446) by @m-aleem in #3772
- Updates for Svc/ActiveLogger corresponding to UT cmake update for protected/private by @m-aleem in #3773
- Updates for Svc/Health corresponding to UT cmake update for protected/private by @m-aleem in #3797
- Updates for Svc/CmdSequencer corresponding to UT cmake update for protected/private by @m-aleem in #3798
- Updates for Svc/ActiveRateGroup corresponding to UT cmake update for protected/private by @m-aleem in #3779
- Updates for Svc/BufferAccumulator corresponding to UT cmake update for protected/private by @m-aleem in #3786
- Updates for Svc/DpWriter corresponding to UT cmake udpate for protected/private by @m-aleem in #3800
- Updates for Svc/CmdDispatcher corresponding to UT cmake update for protected/private by @m-aleem in #3795
- Updates for Svc/PassiveRateGroup corresponding to UT cmake update for protected/private by @m-aleem in #3796
- Updates for Svc/DpManager corresponding to UT cmake update for protected/private by @m-aleem in #3799
- Fixing a bug in the shared setup_helper to make the wait_on_started ASSERT configurable by the calling test by @vincewoo in #3806
- Switch Fw::Buffer size to FwSizeType instead of U32 by @thomas-bc in #3802
- Refactor Drv::Ip::UdpSocket to clean up state members and remove dependency on dynamic memory by @vincewoo in #3728
- FpySequencer V0.3 by @zimri-leisher in #3702
- [ROSES] Update CMake Library integration guide based on student review by @thomas-bc in #3804
- Format Svc/Ccsds package and add to CI by @thomas-bc in #3811
- Add Core Subtopologies: ComFprime, ComCcsds, DataProducts, FileHandling by @moisesmata in #3768
- STATIC -> static by @m-aleem in #3814
- Update hello world link by @tylerrussin in #3823
- Updates for Svc/FpySquencer corresponding to UT cmake update for protected/private by @m-aleem in #3812
- Fix queue size regression by @LeStarch in #3827
- CMake: Copy has...
v4.0.0a1 (Alpha 1)
F Prime v4 Alpha Release 1 🎉
This is the first alpha release of F Prime v4. This release comes with the following amazing features:
- Conditional Sequencing (
Svc/FpySequencer) - Fixed-Width Numerical Types
- Better GDS plugin support (
GdsStandardApp,DataHandlerPlugin) - Improved CMake structure
- Formalized configuration modules
- External Parameter Handling Support
- FPP moduling for Packets
- FPP v3
- Design pattern documentation
- Uplink/Downlink upgrades
Breaking Changes
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.
Users needing non-default values for configurable types should set them as type aliases in FPP using the new configuration system.
FwIndexType Required as Port Indices
Users of older F Prime code may still have NATIVE_INT_TYPE used as port indices. This is now required to be FwIndexType. Other uses of NATIVE_INT_TYPE must also be replaced.
Before:
const NATIVE_INT_TYPE portNumAfter:
const FwIndexType portNum
Rate Group Contexts
Rate group context has been changed to the fixed-width type U32.
Before
NATIVE_INT_TYPE rateGroup1Context[Svc::ActiveRateGroup::CONNECTION_COUNT_MAX] = {};
NATIVE_INT_TYPE rateGroup2Context[Svc::ActiveRateGroup::CONNECTION_COUNT_MAX] = {};
NATIVE_INT_TYPE rateGroup3Context[Svc::ActiveRateGroup::CONNECTION_COUNT_MAX] = {};After:
U32 rateGroup1Context[Svc::ActiveRateGroup::CONNECTION_COUNT_MAX] = {};
U32 rateGroup2Context[Svc::ActiveRateGroup::CONNECTION_COUNT_MAX] = {};
U32 rateGroup3Context[Svc::ActiveRateGroup::CONNECTION_COUNT_MAX] = {};Unit Test Constant Changes
In the same capacity as above, unit test constants of NATIVE_INT_TYPE are not supported
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;
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.
Before:
set(SOURCE_FILES
"${CMAKE_CURRENT_LIST_DIR}/source1.cpp"
"${CMAKE_CURRENT_LIST_DIR}/source2.cpp"
"${CMAKE_CURRENT_LIST_DIR}/source1.fpp"
"${CMAKE_CURRENT_LIST_DIR}/source2.fpp"
)
set(HEADER_FILES
"${CMAKE_CURRENT_LIST_DIR}/header1.hpp"
"${CMAKE_CURRENT_LIST_DIR}/header2.hpp"
)
set(MOD_DEPS Fw_Types)
register_fprime_module(MyModule)
After:
register_fprime_module(
SOURCES
"${CMAKE_CURRENT_LIST_DIR}/source1.cpp"
"${CMAKE_CURRENT_LIST_DIR}/source2.cpp"
HEADERS
"${CMAKE_CURRENT_LIST_DIR}/header1.hpp"
"${CMAKE_CURRENT_LIST_DIR}/header2.hpp"
AUTOCODER_INPUTS
"${CMAKE_CURRENT_LIST_DIR}/source1.fpp"
"${CMAKE_CURRENT_LIST_DIR}/source2.fpp"
DEPENDS
Fw_Types
)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.
Before:
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/Components/")
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/MathDeployment/")
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/Types/")
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/Ports/")
After:
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/Components/")
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/Types/")
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/Ports/")
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/MathDeployment/")
Project Configuration Changes
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.
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.
See changes in cmake module structure to understand the format of the register_fprime_config call.
CMakeLists.txt
register_fprime_config(
CONFIGURATION_OVERRIDES
"${CMAKE_CURRENT_LIST_DIRECTORY}/FpConfig.fpp"
"${CMAKE_CURRENT_LIST_DIRECTORY}/IpCfg.hpp"
)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.
Component Configuration Usage Changes
All configuration headers used from the F Prime configuration directory default/config, a library configuration directory, or a project configuration directory must specify the path including the parent folder.
Before:
#include "IpCfg.hpp"After:
#include "config/IpCfg.hpp"Additionally, components wanting to depend on and use core F Prime configured types must depend on Fw_Types and include Fw/FPrimeBasicTypes.h or Fw/FPrimeBasicTypes.hpp.
Before: C++
#include "FpConfig.hpp"After: C++
#include "Fw/FPrimeBasicTypes.hppBefore: CMakeLists.txt
set(MOD_DEPS
SomeDependency
)
After: CMakeLists.txt
set(MOD_DEPS
Fw...
v3.6.3
Release Notes
This release brings in a fix for autocoding of FPP arrays that could cause a very lengthy (if not infinite) build time when compiling with -g should the user have defined a very large array type (~10,000's of elements).
Warning
The v3.6.X series will be the last F Prime releases to support XML autocoding using the Ai.xml and Packets.xml structures.
What's Changed
- Fixing how CI builds remote properties by @LeStarch in #3582
- CI Test of v2.3.1a1 by @LeStarch in #3581
- Bumping FPP to v2.3.1 by @LeStarch in #3572
Full Changelog: v3.6.2...v3.6.3
v3.6.2 - Hotfix 2
This is a follow-up hot-fix release to support fprime-vxworks (v0.2.0). It includes the following bug fixes:
- Removes
priorityfrom ActiveLogger to prevent health failure when alive and processing many events - Added
NOT_SUPPORTEDto OSAL statuses.
Full Changelog: v3.6.1...v3.6.2
Release v3.6.1
This is a fix release for v3.6.0, which fixes the following issues:
fprime-gdsfailing to handlefalsetokens in JSONfpp-to-layoutnot included inrequirements.txt- Python dependency security updates
- Website content rearranging
Full Changelog: v3.6.0...v3.6.1
Release v3.6.0
Major Features
- State Machine modeling is now available in FPP, see the FPP User's Guide: Defining State Machines
- SBOM generation is integrated into the build process, using Syft. More documentation here: F´ SBOM Generation
Breaking Changes
Os::ConditionVariable usage
Os::ConditionVariable::wait()will no longer lock on behalf of the user. Callers of thewait()API must have previously locked the Mutex. Failing to do so will result in an assertion error as it is illegal to wait without holding a lock.
Changes to the Os::ConditionVariable implementations
- Implementors of the
Os::ConditionVariableinterface must now implementpend()instead ofwait(), returning aConditionVariable::Statusinstead of asserting.
IPv4 Driver Changes
Users of the Drv::TcpClient, Drv::TcpServer and Drv::Udp should not supply the reconnect flag to the start() call of these components anymore. It is also recommended to move the configure call to the configuration section of the topology start up sequence.
+ if (state.hostname != nullptr && state.port != 0) {
+ comm.configure(state.hostname, state.port);
+ } if (state.hostname != nullptr && state.port != 0) {
Os::TaskString name("ReceiveTask");
// Uplink is configured for receive so a socket task is started
- comm.configure(state.hostname, state.port);
- comm.start(name, true, COMM_PRIORITY, Default::STACK_SIZE);
+ comm.start(name, COMM_PRIORITY, Default::STACK_SIZE);
}
}Users of Drv::Udp must now call configureSend() / configureRecv() explicitly. It is now illegal to call configure() and will result in an assertion failure.
What's Changed
- Check spelling 0.0.24 by @jsoref in #3051
- Pull in fprime-gds ordering fix by @LeStarch in #3087
- Do not ASSERT when notifying StubConditionVariable by @celskeggs in #3088
- Fix LinuxGpioDriver build w/ disabled object names by @celskeggs in #3103
- Update README.md by @matt392code in #3097
- FPP v2.3.0a1 by @bocchino in #3066
- Remove local_time from ActiveTextLogger. Fixes: #2815 by @AlesKus in #3104
- Fixing missing python packages. Fixes: #3101, #3102 by @LeStarch in #3110
- Adding in a ROSES issue template by @LeStarch in #3122
- Add os supplied cmake wrapper by @kevin-f-ortega in #3117
- Switch bootstrap tests to project lib structure by @thomas-bc in #3130
- Fixing conflation between user guide and reference by @LeStarch in #3133
- LinuxGpioDriver: fix static_assert's for FwSizeType. Possible fix for #3030 by @AlesKus in #3118
- Add SDD aggregation into the core website by @thomas-bc in #3139
- Fix format string specifiers for queue and task names by @celskeggs in #3146
- Fix Os/Posix/Task.cpp compilation with musl by @celskeggs in #3145
- Integrating SBOM generation into CMake by @LeStarch in #3138
- Update docs structure for website versioning improvements by @thomas-bc in #3150
- Fix typo in markdown warning in SBOM docs by @thomas-bc in #3152
- Fix outdated links and cross-reference docs locally by @thomas-bc in #3153
- Removing DEBUG_PRINT like statements. Part of: #1708 by @LeStarch in #3140
- Update mutex and condition-variable interface by @kevin-f-ortega in #3158
- Removing printf family from Ref, Drv, RPI, OS, Utils by @LeStarch in #3141
- UDP does not bind on send only port. Fixes: #3127 by @LeStarch in #3143
- [Docs] Correct small typos by @SiboVG in #3165
- Stop ignoring real buffers shrunk to 0 size by @celskeggs in #3157
- Removing printf from Svc. Partially Fixed #1708 by @LeStarch in #3170
- fixed #3089. change timeout value to 3 by @chuynh4duarte in #3171
- Adding additional SCALAR types testing by @LeStarch in #3189
- Fix memory sanitizer to be on by default by @kevin-f-ortega in #3183
- FPP v2.3.0 by @bocchino in #3181
- Work/dp catalog review updates by @timcanham in #3191
- Fixes #1708 by Completing the work In
Fwby @LeStarch in #3173 - Use mkdocs search boosting instructions for website pages by @thomas-bc in #3212
- Bump Tools and GDS to v3.6.0 by @LeStarch in #3215
- Remove Doxygen instructions from markdown by @thomas-bc in #3218
- PriorityQueue Send mark as unsafe for ISR by @kevin-f-ortega in #3216
New Contributors
- @matt392code made their first contribution in #3097
- @AlesKus made their first contribution in #3104
- @chuynh4duarte made their first contribution in #3171
Full Changelog: v3.5.1...v3.6.0