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 portNum
After:
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.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 toSvc.EventManager
-
Drv.BlockDriver
has been removed. Users can use a timer component to tick theRateGroupDriver
instead, such asSvc.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 theDrv.AsyncByteStreamDriver
has been introduced. TheSvc.ComStub
component has been updated to work with either of those interfaces. -
<interface>.fppi
style 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 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 |
Before:
instance cmdDisp: Svc.CommandDispatcher base id CdhCoreConfig.BASE_ID + 0x00000 \
[...]
topology MyTopology {
#Active Components
instance cmdDisp
[...]
}
connections FaultProtection {
events.FatalAnnounce -> fatalHandler.FatalReceive
}
[...]
After:
import CdhCore.Subtopology
Communications component stack
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
Click to Expand changes to a topology.fpp
Before (topology.fpp)
connections Uplink {
comDriver.allocate -> bufferManager.bufferGetCallee
comDriver.$recv -> comStub.drvDataIn
comStub.comDataOut -> deframer.framedIn
deframer.framedDeallocate -> bufferManager.bufferSendIn
deframer.comOut -> cmdDisp.seqCmdBuff
cmdDisp.seqCmdStatus -> deframer.cmdResponseIn
deframer.bufferAllocate -> bufferManager.bufferGetCallee
deframer.bufferOut -> fileUplink.bufferSendIn
deframer.bufferDeallocate -> bufferManager.bufferSendIn
fileUplink.bufferSendOut -> bufferManager.bufferSendIn
}
connections Downlink {
eventLogger.PktSend -> comQueue.comQueueIn[0]
tlmSend.PktSend -> comQueue.comQueueIn[1]
fileDownlink.bufferSendOut -> comQueue.buffQueueIn[0]
comQueue.comQueueSend -> framer.comIn
comQueue.buffQueueSend -> framer.bufferIn
framer.framedAllocate -> bufferManager.bufferGetCallee
framer.framedOut -> comStub.comDataIn
framer.bufferDeallocate -> fileDownlink.bufferReturn
comDriver.deallocate -> bufferManager.bufferSendIn
comDriver.ready -> comStub.drvConnected
comStub.comStatus -> framer.comStatusIn
framer.comStatusOut -> comQueue.comStatusIn
comStub.drvDataOut -> comDriver.$send
}
After (topology.fpp)
enum Ports_ComPacketQueue {
EVENTS,
TELEMETRY
}
enum Ports_ComBufferQueue {
FILE_DOWNLINK
}
connections Uplink {
# ComDriver buffer allocations
comDriver.allocate -> bufferManager.bufferGetCallee
comDriver.deallocate -> bufferManager.bufferSendIn
# ComDriver <-> ComStub
comDriver.$recv -> comStub.drvReceiveIn
comStub.drvReceiveReturnOut -> comDriver.recvReturnIn
# ComStub <-> FrameAccumulator
comStub.dataOut -> frameAccumulator.dataIn
frameAccumulator.dataReturnOut -> comStub.dataReturnIn
# FrameAccumulator buffer allocations
frameAccumulator.bufferDeallocate -> bufferManager.bufferSendIn
frameAccumulator.bufferAllocate -> bufferManager.bufferGetCallee
# FrameAccumulator <-> Deframer
frameAccumulator.dataOut -> deframer.dataIn
deframer.dataReturnOut -> frameAccumulator.dataReturnIn
# Deframer <-> Router
deframer.dataOut -> fprimeRouter.dataIn
fprimeRouter.dataReturnOut -> deframer.dataReturnIn
# Router buffer allocations
fprimeRouter.bufferAllocate -> bufferManager.bufferGetCallee
fprimeRouter.bufferDeallocate -> bufferManager.bufferSendIn
# Router <-> CmdDispatcher/FileUplink
fprimeRouter.commandOut -> cmdDisp.seqCmdBuff
cmdDisp.seqCmdStatus -> fprimeRouter.cmdResponseIn
fprimeRouter.fileOut -> fileUplink.bufferSendIn
fileUplink.bufferSendOut -> fprimeRouter.fileBufferReturnIn
}
connections Downlink {
# Inputs to ComQueue (events, telemetry, file)
eventLogger.PktSend -> comQueue.comPacketQueueIn[Ports_ComPacketQueue.EVENTS]
tlmSend.PktSend -> comQueue.comPacketQueueIn[Ports_ComPacketQueue.TELEMETRY]
fileDownlink.bufferSendOut -> comQueue.bufferQueueIn[Ports_ComBufferQueue.FILE_DOWNLINK]
comQueue.bufferReturnOut[Ports_ComBufferQueue.FILE_DOWNLINK] -> fileDownlink.bufferReturn
# ComQueue <-> Framer
comQueue.dataOut -> fprimeFramer.dataIn
fprimeFramer.dataReturnOut -> comQueue.dataReturnIn
# Buffer Management for Framer
fprimeFramer.bufferAllocate -> commsBufferManager.bufferGetCallee
fprimeFramer.bufferDeallocate -> commsBufferManager.bufferSendIn
# Framer <-> ComStub
fprimeFramer.dataOut -> comStub.dataIn
comStub.dataReturnOut -> fprimeFramer.dataReturnIn
# ComStub <-> ComDriver
comStub.drvSendOut -> comDriver.$send
comDriver.sendReturnOut -> comStub.drvSendReturnIn
comDriver.ready -> comStub.drvConnected
# ComStatus
comStub.comStatusOut -> fprimeFramer.comStatusIn
fprimeFramer.comStatusOut -> comQueue.comStatusIn
}
Click to Expand changes to a instances.fpp
Diff (instances.fpp)
# 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
.
Diff (Topology.cpp)
- #include <Svc/FramingProtocol/FprimeProtocol.hpp>
+ #include <Svc/FrameAccumulator/FrameDetector/FprimeFrameDetector.hpp>
- Svc::FprimeFraming framing;
- Svc::FprimeDeframing deframing;
+ Svc::FrameDetectors::FprimeFrameDetector frameDetector;
[...]
- framer.setup(framing);
- deframer.setup(deframing);
+ frameAccumulator.configure(frameDetector, 1, mallocator, 2048);
Uplink Changes
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.
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.
Warning
These changes are required.
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.
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.
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.
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
The requirements on these types, and the complete list are found in the numerical types documentation.
Platform Definitions
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
Before
include_directories(SYSTEM "${CMAKE_CURRENT_LIST_DIR}/types")
After
register_fprime_config(
AUTOCODER_INPUTS
"${CMAKE_CURRENT_LIST_DIR}/PlatformTypes.fpp"
HEADERS
"${CMAKE_CURRENT_LIST_DIR}/PlatformTypes.h"
INTERFACE # No buildable files generated
)
Other breaking changes 🚨
- 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.
- CMake Implementations have been updated. Please refer to CMake Implementations Guide
Deprecations
Fw::Buffer::getSerializeRepr()
has been deprecated in favor of two simpler-to-use methods for serialization and deserialization:Fw::Buffer::getSerializer()
andFw::Buffer::getDeserializer()
. Example changesets are found #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 theserializeTo()
anddeserializeFrom()
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 usefprime-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 #3222
- Port patterns by @LeStarch in #3132
- NATIVE_INT_TYPE portNum to FwIndexType portNum by @LeStarch in #3236
- Converting NATIVE_INT_TYPE in assert casts by @LeStarch in #3238
- Fixing UT constants to use correct types by @LeStarch in #3237
- NUM_PORTS -> FwIndexType by @LeStarch in #3239
- Remove include of internal glibc header by @celskeggs in #3248
- Adding manager-worker pattern documentation by @LeStarch in #3227
- Improve BufferManager assertion context args by @celskeggs in #3223
- Adding health checking pattern documentation by @LeStarch in #3228
- Applying GDS Hotfix v3.6.1 by @LeStarch in #3265
- Add type aliases to JSON dictionary spec by @jwest115 in #3254
- Fixing fprime-tools to v3.6.1 hotsting release by @LeStarch in #3269
- Adding fpp-to-layout now that base is fixed by @LeStarch in #3270
- Remove ActiveLogger Priority by @kevin-f-ortega in #3268
- Add telemetry packets to JSON dictionary spec by @jwest115 in #3221
- Add CI check for fprime-examples repo by @thomas-bc in #3234
- Fix depend-a-bot vulnerabilities by @LeStarch in #3271
- Updates calculateCrc documentation for file pointer. Fixes #3259 by @LeStarch in #3279
- Add NOT_SUPPORTED to OS' statues by @kevin-f-ortega in #3281
- Update fprime-examples CI to use nasa repo by @thomas-bc in #3284
- Add new Fw.Ready port for coordinating startup by @celskeggs in #3261
- Add F Prime terminology translation guide by @matt392code in #3260
- Improve error checking in mutex stub by @celskeggs in #3167
- Draft of ROSES pattern form by @LeStarch in #3291
- Add
final
to component implementation classes by @jwest115 in #3292 - Rename PATTERN-SUGGESTION.yml to pattern_request.yml by @LeStarch in #3294
- Fixing template for pattern request by @LeStarch in #3295
- Roses/clarity by @LeStarch in #3296
- Roses/clarity by @LeStarch in #3297
- Removes NATIVE_INT_TYPE, NATIVE_UINT_TYPE, and POINTER_CAST from
Fw
by @LeStarch in #3286 - Bump jinja2 from 3.1.5 to 3.1.6 by @dependabot[bot] in #3342
- Improve warning flags in builds by @bocchino in #3319
- Split Deframer into FrameAccumulator Deframer and Router by @thomas-bc in #3250
- Adding format specifier aliases for primitives. Updating documentation. (#3199) by @vincewoo in #3375
- Adding warning about the use of PlatformPointerCast. Fixes: #251 by @LeStarch in #3381
- Assert numerical type invariants. Fixes: #3207 by @LeStarch in #3382
- Fixes #3204 by removing NATIVE_ and POINTER_CAST from Drv by @LeStarch in #3380
- Removing NATIVE_ and POINTER_CAST from FppTest, Utils, cmake, config,… by @LeStarch in #3378
- Remove NATIVE_INT_TYPE, NATIVE_UINT_TYPE, and POINTER_CAST from Svc by @LeStarch in #3374
- Fix UT_MOD_DEPS usage in Fw by @thomas-bc in #3392
- Clarify dependency for FW_ENABLE_TEXT_LOGGING by @celskeggs in #3391
- FPP v3.0.0a3 by @bocchino in #3393
- Add apt-get update call to all workflows using apt-get by @thomas-bc in #3415
- Ref Application README.md update by @tylerrussin in #3423
- Testing with configured fixed-size types by @LeStarch in #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 #3418
- Issue 3285 reducing signed size type in os file by @LeStarch in #3402
- Fix warnings in FppTest build by @bocchino in #3434
- Add workflow for running fpp-to-json on Ref by @jwest115 in #3430
- Return cmd repsonse for LOG_STATUS in SeqDispatcher by @zimri-leisher in #3438
- Update Ref to use FPP telemetry packets by @bocchino in #3440
- Refactored type organization by @LeStarch in #3422
- File typo by @kevin-f-ortega in #3464
- Fix uart baudrates by @kevin-f-ortega in #3469
- Add System Reference to CI by @jwest115 in #3466
- Deprecate Fw::Buffer::getSerializeRepr in favor of 'getSerializer' and 'getDeserializer' by @vincewoo in #3431
- Add FW_PACKET_FILE descriptor to FileDownlink and FileUplink logic by @thomas-bc in #3488
- Fix FileDownlink conversion warning by @thomas-bc in #3493
- Add OsTime component by @kubiak-jpl in #3355
- Config blank slate by @LeStarch in #3487
- Fix installation of ALIAS targets in CMake by @thomas-bc in #3514
- FpySequencer 0.1 by @zimri-leisher in #3334
- FppTest: Type Alias by @Kronos3 in #3470
- Auto-generate nav with mkdocs-awesome-nav by @ashleynilo in #3460
- Fixing timing issue in TcpServer UTs by @vincewoo in #3528
- Revise array allocation in Frame Accumulator by @bocchino in #3525
- Add Framer FPP interface, implement FprimeFramer and adapt ComQueue by @thomas-bc in #3486
- Add upper-bound limit to for loop in Os::FileSystem by @kevin-f-ortega in #3535
- Fix hashes.txt generation by getting build_root by @thomas-bc in #3523
- Fix sign-compare warning in Os::Posix::File, Svc::ComQueue, and Svc::… by @AlesKus in #3515
- Add initial list of supported and future supported platforms by @kevin-f-ortega in #3348
- Add docs for driver interfaces by @kevin-f-ortega in #3542
- Remove old help-text from GDS guide by @thomas-bc in #3541
- Add ByteStreamDriverInterface docs section by @thomas-bc in #3549
- Fix ComStub UTs type warnings by @thomas-bc in #3550
- Added nav for tutorials back to mkdocs.yml by @ashleynilo in #3556
- Update docs link to match line numbers by @thomas-bc in #3560
- Use data return pattern on Uplink and standardize port names by @thomas-bc in #3546
- Add How To guide for integrating third-party libraries by @thomas-bc in #3489
- Fix project-builder by checking out submodules by @thomas-bc in #3570
- Clarify allocation failure error by @celskeggs in #3566
- Clean up User Manual index docs by @ashleynilo in #3573
- Improve GDS plugin documentation by @LeStarch in #3551
- Clarify invocation of seqCmdStatus port in CmdDispatcher by @AlesKus in #3557
- Improve one possible error on Svc.TlmChan bucket exhaustion by @celskeggs in #3567
- Removing CMake from installation guide. Fixes #3501 by @LeStarch in #3574
- Add file status by @kevin-f-ortega in #3569
- Resolve Source Paths in CMake by @LeStarch in #3576
- Prefixing variables to prevent shadowing. Fixes: #3370 by @LeStarch in #3585
- Fix cookiecutter test workflow by @thomas-bc in #3583
- Add Several CMake Tests to Prove Previous Fixes by @LeStarch in #3579
- Allow new configuration for F Prime by @LeStarch in #3563
- Fix ISR handler invocation in Drv::BlockDriver by @AlesKus in #3586
- Fix version check error message by @celskeggs in #3596
- Update FPP version by @bocchino in #3595
- Fix memory leak in ComStub when reads fail by @celskeggs in #3600
- Removing regneration from AC files that are themselves regenerated by @LeStarch in #3602
- Remove unused property by @LeStarch in #3606
- FpySequencer 0.2 by @zimri-leisher in #3552
- Add GOVERNANCE Document by @LeStarch in #3609
- Add command to OsTime to set the current time by @celskeggs in #3607
- Making configuration files trigger configure by @LeStarch in #3620
- Extern params by @Brian-Campuzano in #3608
- Update Os File UTs by @kevin-f-ortega in #3619
- Update requirements.txt for release v4.0.0a1 by @thomas-bc in #3623
- 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_HELPERS
control 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 hashes.txt to build-artifact by @valdaarhun in #3771
- Deprecated 'bool noLength' versions of serialize and deserialize. by @vincewoo in #3819
- Update requirements to include fpp v3.0.0a13 and fprime-gds v4.0.0a7 by @jwest115 in #3813
- Fix EXIT not handled in dispatchDirective by @zimri-leisher in #3837
- Rename STATEMENT_TIMEOUT_SECS telemetry not to conflict with parameter by @zimri-leisher in #3836
- Add seqstart/done ports to FpySequencer by @zimri-leisher in #3826
- FpySequencer floating point comparisons by @zimri-leisher in #3820
- Make Fw::TimeInterval an FPP Struct by @m-aleem in #3834
- Add fpext, fptrunc directives by @zimri-leisher in #3845
- Fix JSON dict formatting by @jwest115 in #3858
- Clean up supported platforms documentation by @kevin-f-ortega in #3873
- Add float to int conversion directives, some misc changes by @zimri-leisher in #3847
- Bump to fprime-tools v4.0.0a6 (Fix CI) by @LeStarch in #3863
- Fix framework UT shutoff regression by @celskeggs in #3883
- Update supported platforms by @kevin-f-ortega in #3881
- Updates for FPPTest corresponding to UT cmake update for protected/private by @m-aleem in #3810
- Fixed invalid FW_ASSERT in LinuxUartDriver. Replaced with FW_ASSERT_NO_OVERFLOW. by @vincewoo in #3894
- Add CMake package file for F Prime by @LeStarch in #3898
- Linux should not default to stubbed drivers by @LeStarch in #3840
- Update clang-format dependency for ARM32 support by @thomas-bc in #3901
- Adding FW_CASSERT_1 macro for C by @vincewoo in #3896
- Add a repository dirtiness indicator to the auto-generated version information by @ianbrault in #3899
- Issue 3745 by @LeStarch in #3843
- Make Os.RawTime comparable for equality by @celskeggs in #3902
- Update F' Time handling with FPP struct and clean up TIME flags, and remove Time Context comparison by @m-aleem in #3844
- Add ComLoggerTee Core Subtopology by @moisesmata in #3867
- Restrict TCP subtopologies to supported platforms by @celskeggs in #3903
- Reset PROTECTED/PRIVATE/STATIC override flags by @m-aleem in #3815
- Remove RPI project in lieu of the LED workshop by @LeStarch in #3908
- Added config needed to run InT scripts by @kevin-f-ortega in #3915
- Rework fpp test by @m-aleem in #3912
- Rename ActiveLogger to EventManager by @thomas-bc in #3920
- Remove PRIVATE PROTECTED and STATIC access overrides by @m-aleem in #3821
- Replace struct get/set with get_/set_ by @LeStarch in #3917
- Stub std::atomic implementation by @m-aleem in #3909
- Generate dictionaries in deployment targets by @celskeggs in #3910
- Add lightweight SpscQueue class by @celskeggs in #3871
- Adds calls to cmdResponse_out for both OK and EXECUTION_ERROR conditions Fixes #3897 by @MikeMcPherson in #3926
- Make .fppi changes trigger re-generation by @LeStarch in #3933
- Renaming serialize/deserialize methods to serializeTo/serializeFrom and deserializeTo/deserializeFrom by @vincewoo in #3880
- Revert "Stub std::atomic implementation" by @LeStarch in #3934
- Compile-time asserts for string-vs.-buffer max sizes do not account for serialized string lengths by @ianbrault in #3937
- Restructure core subtopologies and add Svc_Subtopologies target by @moisesmata in #3904
- Update GDS and Tools requirements for v4.0.0a2 by @thomas-bc in #3953
- Updates
Types.fpp
to 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
- @vincewoo made their first contribution in #3375
- @tylerrussin made their first contribution in #3423
- @Brian-Campuzano made their first contribution in #3608
- @emmanuel-ferdman made their first contribution in #3654
- @0xb-s made their first contribution in #3708
- @valdaarhun made their first contribution in #3771
- @ianbrault made their first contribution in #3899
- @MikeMcPherson made their first contribution in #3926
- @kyleajones made their first contribution in #3956
- @aborjigin made their first contribution in #3964
Full Changelog: v3.6.3...v4.0.0