New Features
- FPP
dictionaryspecifiers - Shared flight/ground configuration
- Aligned memory support in
Fw::MemAllocator - Time-limited event throttling
- Little-endian serialization interfaces
- Upgrade to C++14
- Secondary-file loading in the Parameter Database
Breaking Changes
- Configuration Changes
- User Changes
- OSAL Interface Changes
- Driver Interface Changes
- Misc Interface Changes
- Optional Changes
Configuration Changes
Users with custom config in their project need to understand these changes:
FpConfig.h Break-Up
Many FpConfig.h's constants were needed in the model and have been moved into .fpp model files FpConfig.fpp, FpConstants.fpp, and PlatformCfg.fpp.
Warning
Users shipping custom FpConfig.h as of v4.0.0 must update to these new files.
New Configuration Files
config/MemoryAllocation.hppconfig/ActiveTextLoggerCfg.hppconfig/FileManagerConfig.hppconfig/PassiveTextLoggerCfg.hpp
config/MemoryAllocation.hpp
We've added configuration for a new default memory allocator. This is used by clients of Fw::MemAllocatorRegistry calling getAnAllocator() when no appropriate allocator has been defined.
config/MemoryAllocation.hpp
+using DefaultMemoryAllocatorType = Fw::MallocAllocator;Users wanting a different default (other than MallocAllocator) should override this definition.
config/ActiveTextLoggerCfg.hpp and config/PassiveTextLoggerCfg.hpp
These files control the number of filter slots for these componnets.
config/FileManagerConfig.hpp
User Changes
Standard projects should update to the following changes:
Linux Timer Interface Takes Fw::TimeInterval
LinuxTimer has been updated to tak Fw::TimeInterval(seconds, microseconds); instead of an integer number of milliseconds.
- linuxTimer.startTimer(milliseconds);
+ Fw::TimeInterval(milliseconds/1000, (milliseconds % 1000) * 1000);
+ linuxTimer.startTimer(interval);Tester Component Deinitialization
Queued and Active components now have a deinit() function used to clean-up memory/resource allocation. Unit Tests run under leak checking will produce memory leak warnings. To fix this, add this->component.deinit() to the Tester destructor.
- ComponentTester::~ComponentTester() {}
+ ComponentTester::~ComponentTester() {
+ this->component.deinit();
+ }OSAL Interface Changes
Developers shipping custom OSAL implementations must update to meet these interface changes:
Os::QueueInterface Changes
The Os::QueueInterface has had three changes that implementers must update to support.
StringBasehas been changed toConstStringBasein thecreatemethod- Queues are now supplied an
idvia thecreatemethod for use in potential allocation - Queues should now define a
teardownmethod for use in resource clean-up
Os::QueueInterface implementers should update to support both of these changes.
-QueueInterface::Status create(const Fw::StringBase& name, FwSizeType depth, FwSizeType messageSize);
+QueueInterface::Status create(FwEnumStoreType id, const Fw::ConstStringBase& name, FwSizeType depth, FwSizeType messageSize);+ void teardown();Driver Interface Changes
Implementers of driver interfaces found in Drv/Interfaces should meet these following changes:
SPI Interface Changes
The former SPI interface did not support returning a status, which meant that the calling component was blind to problems arising within SPI. The interface now specifies a new WriteRead port that includes a status. Implementers of SPI components must add this port to their components.
//! Handler implementation for SpiWriteRead
//!
SpiStatus SpiWriteRead_handler(const FwIndexType portNum, /*!< The port number*/
Fw::Buffer& WriteBuffer,
Fw::Buffer& readBuffer);We recommend deprecating the old void function as well.
Misc Interface Changes
There are a few changes to misc interfaces in F Prime. Developers to those interfaces must update:
Fw::MemAllocator Requires Alignment
Developers of custom Fw::MemAllocator objects must now support the alignment parameter. Alignment communicates the minimum Byte alignment for the object being allocated. Returned void* allocations must guarantee this alignment.
-void* allocate(const FwEnumStoreType identifier, FwSizeType& size, bool& recoverable);
+void* allocate(const FwEnumStoreType identifier, FwSizeType& size, bool& recoverable, FwSizeType alignment);Hand-Coded Serializables Require Endianness
F Prime now supports a mode flag to serialization that communicates the desired endianness. This was done to better support external libraries, technologies, and products that use little endian format. Hand-coded serializables should update to accept this new parameter.
This affects both the serializeTo and deserializeFrom function.
-Fw::SerializeStatus Buffer::serializeTo(Fw::SerializeBufferBase& buffer) const;
+Fw::SerializeStatus serializeTo(Fw::SerialBufferBase& buffer, Fw::Endianness mode) const;-Fw::SerializeStatus Buffer::deserializeFrom(Fw::SerializeBufferBase& buffer);
+Fw::SerializeStatus deserializeFrom(Fw::SerialBufferBase& buffer, Fw::Endianness mode);Optional Changes
There are several optional changes. Users should consider these changes.
Task Priorities
Subtopology and Ref priorities have been updated to better reflect Linux priority space. Users should consider their own priorities and ajust accordingly.
serialize and deserialize Deprecated
serialize and deserialize methods were renamed in v4.0.0 to serializeTo, serializeFrom, deserializeTo, and deserializeFrom. We have now DEPRECATED these serialize and deserialize functions. Users should update as these will now produce compiler warnings and will be removed in future releases.
Feature Descriptions
FPP dictionary Specifiers
FPP now supports the dictionary specifier, allowing developers to annotate model elements for inclusion in generated JSON dictionaries. This feature allows developers to extend flight/ground tooling.
Shared Flight/Ground Configuration
F´ introduces unified configuration between flight and ground (fprime-gds). This significantly reduces duplication, improves consistency, and centralizes configuration.
Aligned Memory Support in Fw::MemAllocator
Fw::MemAllocator now supports aligned allocation, allowing components and platform adapters to request memory with specific alignment boundaries.
Time-Limited Event Throttling
A new throttling policy allows events to be rate-limited over a configurable time window. Rather than suppressing events indefinitely, the system now restores visibility after the throttle period elapses.
Little-Endian Serialization Interfaces
F´ adds explicit support for little-endian serialization paths. This allows users to leverage F Prime serialization for external interfaces.
Upgrade to C++14
The framework, libraries, and autocoders now require and fully support C++14. This enables safer and more expressive language features for more reliable software.
Secondary-File Loading for the Parameter Database
Svc::PrmDb now supports loading parameters from a secondary file.
Commits
- 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
- Call destructors when ExternalArray releases memory for which it has called constructors by @bocchino in #4143
- Update custom framing How-To guide by @thomas-bc in #4144
- Make APID and FwPacketDescriptorType the same width by @thomas-bc in #4076
- Add Fw::Buffer allocation interface by @LeStarch in #4148
- Supported platforms by @kevin-f-ortega in #4152
- FPP 3.1.0a1 by @Kronos3 in #4161
- Fix grammatical error in F' introduction by @RobRoyce in #4174
- Add Fw::TimeInterval constructor for computing delta between start/en… by @Kronos3 in #4172
- Add support to set socket options for IP sockets by @m-aleem in #4146
- Mark legacy serialize and deserialize methods as DEPRECATED. Upgrade remaining references to legacy methods. by @vincewoo in #4145
- add system resources integration test by @japrozs in #4126
- Socket automatic reconnections in dedicated thread by @m-aleem in #4136
- Update Int to match PR4079 and clean-up Int Misc by @chuynh4duarte in #4111
- Fix Intermittent UT failure in FprimeDeframer by @thomas-bc in #4177
- regex is a bit wrong. It never would work with 'Os/File.hpp' by @kevin-f-ortega in #4193
- Ci zephyr by @LeStarch in #4141
- Add improvements to ComQueue by @LeStarch in #4190
- [Rate Groups and Timeliness] RateGroups Docs Enhancements by @pavly-gerges in #4196
- Add nomenclature document by @thomas-bc in #4200
- bump gds version to latest by @kevin-f-ortega in #4236
- Fix inconsistencies in Drv.LinuxUartDriver SDD by @ianbrault in #4237
- CWE 453 cmd buffer assert by @bitWarrior in #4198
- FpySequencer Add push tlm val and time dir by @zimri-leisher in #4230
- Update CI to use latest macOS intel runners by @thomas-bc in #4251
- Clear up encoding and newline errors by @celskeggs in #4252
- must be explicit when using unions otherwise size mispatch could occur by @kevin-f-ortega in #4256
- Fix for PosixFileTest UT failure by @ianbrault in #4254
- Bump FPP to 3.1.0a2 by @Kronos3 in #4263
- Make GenericHub EXCLUDE_FROM_ALL by @LeStarch in #4178
- Data structure library, phase 2 by @bocchino in #4062
- Switch to U64 Logger Tests by @Willmac16 in #4262
- Add STEP command to FpySequencer by @zimri-leisher in #4239
- Add PUSH_TIME directive by @zimri-leisher in #4275
- Add ErrorNotify port to CCSDS deframers by @thomas-bc in #4267
- Bump C++ to 14 by @LeStarch in #4278
- Add option for installing static libs by @LeStarch in #4277
- Add FPRIME_CMAKE_QUIET option by @LeStarch in #4276
- Fix typos in cross-compiling docs by @Angelina-2007 in #4280
- Bump FPP with unified tool by @Kronos3 in #4287
- NonASCII characters removed by @djbyrne17 in #4298
- Bump fprime-gds to 4.0.2a8 in requirements.txt by @Willmac16 in #4299
- Little Endian Serialization by @Willmac16 in #4294
- Add Communication Aggregator Component by @LeStarch in #4264
- Mark SwAssert declarations as noinline by @celskeggs in #4304
- Provide ability to update parameters via a file by @m-aleem in #4165
- FpySequencer flag system by @zimri-leisher in #4259
- Update contribution guidelines for clarity and process by @LeStarch in #4312
- Enhance Fpy docs with state machine diagram by @LeStarch in #4315
- Address student feedback for How-To Framing protocol by @thomas-bc in #4314
- Add News page to nav.yml by @thomas-bc in #4317
- Fix O_SYNC on systems without the definition by @LeStarch in #4322
- Add alignment to memory allocator by @LeStarch in #4319
- Update RawTime UTs to require a platform-specific helper by @thomas-bc in #4323
- Fix RawTime UT oversight on initialization by @thomas-bc in #4330
- Time Limited Event Throttle by @Kronos3 in #4306
- Refactor FrameAccumulator not to assert on incorrect size_out by @thomas-bc in #4340
- Change FPP enums to smallest representation by @pjromano in #4342
- Adjust task priorities to fit within supported platforms' priority ranges by @pjromano in #4337
- Fix macOS CI intermittent failure by @thomas-bc in #4347
- Update CI for top-level namespace structure by @thomas-bc in #4353
- Document sequencer requirements and directives by @LeStarch in #4373
- Clarify float operation behavior in documentation by @LeStarch in #4328
- Add more error checking to arithmetic directives by @LeStarch in #4331
- Fix uplink w/ fprime-gds version 4.0.2a9 by @LeStarch in #4382
- Allow bypass of posix_fallocate by @LeStarch in #4380
- Add Configuration section to BufferManager SDD by @Copilot in #4355
- FpySequencer new directives for loops by @zimri-leisher in #4356
- Add How-To implement a Device Manager (device driver 1 of 2) by @thomas-bc in #4378
- fix(.clang-tidy):
Checksis supposed to be a comma separated list by @Saransh-cpp in #4379 - FpySequencer Add DUMP_STACK_TO_FILE command by @zimri-leisher in #4384
- Update directives documentation with requirements by @LeStarch in #4385
- Created new SerialBufferBase as a parent of SerializeBufferBase (now renamed LinearBufferBase). by @vincewoo in #4288
- Replace FpConfig.h header with FPP model elements by @thomas-bc in #4393
- Add How-To Implement a Bus Driver guide (device driver 2 of 2) by @thomas-bc in #4398
- Bump brotli from 1.1.0 to 1.2.0 by @dependabot[bot] in #4400
- Add new Fw::StringBase type for strings backed by immutable string literals by @ianbrault in #4269
- Fix compiler options in Ref build by @bocchino in #4409
- Fix FppTest by @bocchino in #4410
- Clean up FpySequencer directives by @zimri-leisher in #4395
- ComAggregator updates by @LeStarch in #4402
- Add fpp-to-json to FPP model subbuild by @LeStarch in #4268
- Update FPP to v3.1.0a10 by @bocchino in #4418
- Update obsolete link and screenshots by @djbyrne17 in #4423
- Update fprime-gds version to 4.0.2a10 by @knockout101 in #4433
- Remove redundant line from ActiveRateGroup SDD by @jdperez in #4435
- Add undef to fix collission problem. by @kevin-f-ortega in #4424
- Add convienence functions to MemoryAllocator by @LeStarch in #4439
- Restrict core C and DH when turning off text loggers by @LeStarch in #4438
- Print the task name when socket open/recv fails by @Willmac16 in #4434
- Make fpp-to-json opt-in by default by @LeStarch in #4449
- Specify dictionary types as required by GDS by @thomas-bc in #4442
- Update UT guidelines in Contributing guide by @djbyrne17 in #4421
- Add missing argument description to Os::RawTime by @kevin-f-ortega in #4461
- missing more comments by @kevin-f-ortega in #4463
- Add best practice to CONTRIBUTING.md by @thomas-bc in #4464
- Add component send only (configSend, open) test by @LeStarch in #4465
- FPP v3.1.0a12 by @bocchino in #4474
- Set the Name of Fprime Tasks on Linux by @Willmac16 in #4428
- Add one more ifdef to allow POSIX_THREAD_ENABLE_NAMES off to compile by @Willmac16 in #4482
- Fix improper file dependencies. Fixes #4372 by @LeStarch in #4479
- Update Spi component to return a status on device access by @djbyrne17 in #4452
- Add missing cstring includes by @bevinduckett in #4486
- Bump werkzeug from 3.0.6 to 3.1.4 by @dependabot[bot] in #4480
- Make Os::Queues use Fw::MemAllocator pattern for memory by @LeStarch in #4451
- Add missing implementation of GenericHub by @mshahabn in #4420
- FPP v3.1.0 by @bocchino in #4483
- Fix FPrimeRouter potential usage of invalid buffer by @LeStarch in #4493
- Bump requirements.txt ahead of v4.1.0 release by @thomas-bc in #4488
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
- @RobRoyce made their first contribution in #4174
- @pavly-gerges made their first contribution in #4196
- @bitWarrior made their first contribution in #4198
- @Willmac16 made their first contribution in #4262
- @Angelina-2007 made their first contribution in #4280
- @djbyrne17 made their first contribution in #4298
- @Saransh-cpp made their first contribution in #4379
- @knockout101 made their first contribution in #4433
- @jdperez made their first contribution in #4435
- @bevinduckett made their first contribution in #4486
- @mshahabn made their first contribution in #4420
Full Changelog: v4.0.0...v4.1.0