As requested by users, this release will be the only one with the global pools.
This release can be seen as a legacy release. Therefore, it should not be used by the users on a long term. The intention is the creation of a baseline for further API changes.
The next release will contain the local pools which will introduce API changes for every user.
The name remembers the relation to the Flying Laptop Flight Software which uses numbers of Apollo Mission as major Software release names.
API Changes:
Local Pools:
Pool Managers
Old pool config:
const uint8_t numberOfIpcPools = 4;
uint16_t numberOfElements[numberOfIpcPools] = {100, 30, 20, 10};
uint16_t sizeofElements[numberOfIpcPools] = {32, 64, 128, 265};
new PoolManager<numberOfIpcPools>(objects::IPC_STORE,sizeofElements,
numberOfElements);
New pool config:
/* Pool manager handles storage und mutexes */
const LocalPool::LocalPoolConfig poolConfig = {
{100, 32}, {30, 64}, {20, 128}, {10, 265}
};
new PoolManager(objects::IPC_STORE, poolConfig);
new PoolManager(objects::TM_STORE, poolConfig);
new PoolManager(objects::TC_STORE, poolConfig);
ParameterIF:
- INVALID_MATRIX_ID is now INVALID_IDENTIFIER_ID (#250)
- The API of the parameter service has been changed to prevent inconsistencies
between documentation and actual code and to clarify usage. - The parameter ID now consists of:
- Domain ID (1 byte)
- Unique Identifier (1 byte)
- Linear Index (2 bytes)
The linear index can be used for arrays as well as matrices.
The parameter load command now explicitly expects the ECSS PTC and PFC
information as well as the rows and column number. Rows and column will
default to one, which is equivalent to one scalar parameter (the most
important use-case)
- The HasParameterIF has changed, ParameterId is now a uint8_t and the name is uniqueIdentifier (#365)
DeviceHandler
- DHB has an additional PST Step. This has to be added to your Polling Sequence but gives more control over the DH (#281)
- Typo for UNKNOWN_DEVICE_REPLY fixed (#320)
- getTransitionDelayMs is now an abstract method (#320)
Events:
- Changes in eventId generation (#288)
- The spelling of the namespaces "EVENT" and "SEVERITY" changed to "event" and "severity"
- The function to generate a EventId (makeEvent(..)) is more explicit now with the Id as new parameter. This should be preferred over the macro.
Pus Sercices:
- Service 5 and Service 1 queue depths need to be given as constructor elements (#283)
- This allows mission code to select how many events/verification messages can be processed
- All Commanding Service Base instances had a 3 command wide fifo, this can now be changed to any size (#319)
- VerificationCodes namespace TC_VERIFY is now tc_verification (#309)
static constexpr uint8_t FSFW_CSB_FIFO_DEPTH = 6;
FreeRTOS:
- extern "C" void vRequestContextSwitchFromISR(); marked extern C so it can be implemented in a C file. (#263)
RTEMS:
- RTEMS OSAL Updated after tests (#363)
Mutex:
- MutexHelper is now MutexGuard (#383)
Action:
ActionMessage::setCompletionReply
now expects the success as dedicated bool
MISC:
- CCSDSTime.cpp now uses size_t for sizes #315
- FSFWConfig: USE_MODESTORE for storage of on-the-fly modes is replaced with FSFW_USE_MODESTORE == 1 from FSFWConfig.h (#306)
Enhancement:
Pus Sercices:
CMake
- FSFW Provides cmake files now (#298)
Misc
- ExtendedController: Controller with HasActionIF has HasLocalDatapoolIF. (#276)
- DeviceHandlerIF: Command_t NO_COMMAND_ID in DeviceHandlerIF can be used to set a invalid command (#263)
- Default CFG: Update of Default CFG (#274)
- PeriodicOperationDivider: Op divider additional features (#286)
- unittest: Includes for unittest folder relative (#285)
- objectmanager: objectmanager/frameworkObjects.h new ID added TIME_STAMPER = 0x53500010 (#328)
Bug Fixes:
HostOSAL:
RTEMS:
Linux:
- Important Bug fix in MesseQueue.cpp #394
MISC:
- Bugfixes discovered during coverity checks #398
ASTP 1.1.0
v2.0.0
Release for next major FSFW version
API Changes
File Structure changed to fit more common structure
- See pull request (#445)
- HAL is now part of the main project
- See Instructions below:
Instruction how to update existing / user code
-
Changes in
#include
:- Rename
internalError
in includes tointernalerror
- Rename
fsfw/hal
tofsfw_hal
- Rename
fsfw/tests
tofsfw_tests
- Rename
osal/FreeRTOS
toosal/freertos
- Rename
-
Changes in
CMakeLists.txt
:- Rename
OS_FSFW
toFSFW_OSAL
- Rename
-
Changes in
DleEncoder.cpp
- Create an instance of the
DleEncoder
first before calling theencode
anddecode
functions
- Create an instance of the
Removed osal/linux/Timer (#486)
- Was redundant to timemanager/Countdown
Instruction how to update existing / user code
- Use timemanager/Countdown instead
Bugfixes
TM Stack
- Increased TM stack robustness by introducing
nullptr
checks and more printouts (#483)
Host OSAL / FreeRTOS
- QueueMapManager Bugfix (NO_QUEUE was used as MessageQueueId) (#444)
Events
- Event output is now consistent (#447)
DLE Encoder
- Fixed possible out of bounds access in DLE Encoder (#492)
Enhancment
- HAL as major new feature, also includes three MEMS devicehandlers as part of #481
- Linux HAL updates (#456)
- FreeRTOS Header cleaning update and Cmake tweaks (#442)
- Printer updates (#453)
- New returnvalue for for empty PST (#485)
- TMTC Bridge: Increase limit of packets stored (#484)
Known bugs
- Bug in TmPacketStoredPusC (#478)
All Pull Requests:
Milestone: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/milestone/5
v2.0.1
Milestone for next FSFW revision
Bugfixes
- Use correct version number for PUS C now (1 was used instead of 2 before)
- Increase robustness of the TM stack against nullpointer exceptions in case the TM store runs full
v3.0.0
Milestone for next FSFW subversion
API Changes
TCP Socket Changes
- Keep Open TCP Implementation #496
- The socket will now kept open after disconnect. This allows reconnecting.
- Only one connection is allowed
- No internal influence but clients need to change their Code.
GPIO IF
- Add feature to open GPIO by line name #506
Bitutil
- Unittests for Op Divider and Bitutility #510
Filesystem IF changed
- Filesystem Base Interface: Use IF instead of void pointer #511
STM32
- STM32 SPI Updates #518
Bugfixes
- Small bugfix for LIS3 handler #504
- Spelling fixed for function names #509
- CMakeLists fixes #517
- Out of bound reads and writes in unittests #519
- Bug in TmPacketStoredPusC (#478)
- Windows ifdef fixed #529
Enhancement
- FSFW.h.in more default values #491
- Minor updates for PUS services #498
- HasReturnvaluesIF naming for parameter #499
- Tests can now be built as part of FSFW and versioning moved to CMake #500
- Added integration test code #508
- More printouts for rejected TC packets #505
- Arrayprinter format improvements #514
- Adding code for CI with docker and jenkins #520
- Added new function in SerializeAdapter #513
- Enables simple deSerialize if you keep track of the buffer position yourself
static ReturnValue_t deSerialize(T *object, const uint8_t* buffer, size_t* deserSize, SerializeIF::Endianness streamEndianness)
- Unittest helper scripts has a new Parameter to open the coverage html in the webrowser #525
'-o', '--open', Open coverage data in webbrowser
- Documentation updated. Sphinx Documentation can now be build with python script #526
Known bugs
- Version Number in CMakeList is wrong (2.0.0), should be (3.0.0), fixed in #542
All Pull Requests:
Milestone: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/milestone/19
v4.0.0
Additions
- CFDP Packet Stack and related tests added. It also refactors the existing TMTC infastructure to
allow sending of CFDP packets to the CCSDS handlers.
PR: #528 - added virtual function to print datasets
PR: #544 - doSendRead Hook
PR: #545 - Dockumentation for DHB
PR: #551
HAL additions
- Linux Command Executor, which can execute shell commands in blocking and non-blocking mode
PR: #536 - uio Mapper
PR: #543
Changes
- Applied the
clang-format
auto-formatter to all source code
PR: #534 - Updated Catch2 to v3.0.0-preview4
PR: #538 - Changed CI to use prebuilt docker image
PR: #549
Bugfix
- CMake fixes in PR #533 , was problematic
if the uppermost userCMakeLists.txt
did not have the include paths set up properly, which
could lead to compile errors that#include "fsfw/FSFW.h"
was not found. - Fix for build regression in Catch2 v3.0.0-preview4
PR: #548 - Fix in unittest which failed on CI
PR: #552 - Fix in helper script
PR: #553
API Changes
- Aforementioned changes to existing TMTC stack
Known bugs
v3.0.1
Milestone for next FSFW version
API Changes
Bugfixes
- Version number was not updated in v3.0.0
Known bugs
All Pull Requests:
Milestone: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/milestone/30
v5.0.0
Additions
- Unit test for Internal Error Reporter
PR: #563 - Additional build flags for FSFW have been added
PR: #568 - The current FSFW Version can now be read with
fsfw::FSFW_VERSION
. For comparison with User required Version is possible withfsfw::Version(UserRequiredMajor,UserRequiredMinor,UserRequiredRevision)>=fsfw::FSFW_VERSION
PR: #575 - FSFW_DISABLE_PRINTOUT will now be defined default to 0, if it was not defined
PR: #576
-Cooldown will now be initialized in the constructor by calling:Countdown::setTimeout
PR: #577 - Events: Introduced
UniqueEventId_t
which can be found by generators
PR: #578 - Added function to add component to a periodic task by pointer
PR: #591 - Added ETL dependency and improved library dependency management
PR: #592 - LTO support: Allow using LTO/IPO by setting
FSFW_ENABLE_LTO=1
. CMake is able to detect whether
the user compiler supports IPO/LPO. LTO is on by default now. Most modern compilers support it,
can make good use of it and it usually makes the code faster and/or smaller.
After some more research:
Enabling LTO will actually cause the compiler to only produce thin LTO by adding
-flto -fno-fat-lto-objects
to the compiler options. I am not sure this is an ideal choice
because if an application linking against the FSFW does not use LTO, there can be compile
issues (e.g. observed when compiling the FSFW tests without LTO). This is a known issue as
can be seen in the multiple CMake issues for it:- https://gitlab.kitware.com/cmake/cmake/-/issues/22913,
- https://gitlab.kitware.com/cmake/cmake/-/issues/16808,
- https://gitlab.kitware.com/cmake/cmake/-/issues/21696
Easiest solution for now: Keep this option OFF by default.
PR: #616
- Added generic PUS TC Scheduler Service 11. It depends on the new added Emebeded Template Library
(ETL) dependency.
PR: #594 - Added options for CI/CD builds:
FSFW_CICD_BUILD
. This allows the source code to know
whether it is running in CI/CD
PR: #623 - Basic
clion
support: Update.gitignore
and add some basic run configurations
PR: #625
HAL additions
- Linux HAL: Add I2C wiretapping option. It is now possible to define FSFW_HAL_I2C_WIRETAPPING to 1 and have a printout of all Data received over I2C
PR: #559 - HAL GPIO:
Direction
,GpioOperation
andLevels
are enum classes now, which prevents
name clashes with Windows defines.
PR: #572 - HAL GPIO: Improved error checking in
LinuxLibgpioIF::configureGpios(...)
. If a GPIO
configuration fails, the function will exit prematurely with a dedicated error code
PR: #602 - New CMake option
FSFW_HAL_LINUX_ADD_LIBGPIOD
to specifically excludegpiod
code.
PR: #572 - HAL Linux SPI: Set the Clock Default State when setting new SPI speed
and mode
PR: #573
Changes
-
Changes in Integration Tests for
tests/src/fsfw_tests/integration/task/TestTask.h
PR: #560 -
Small Tweaks of printouts in
LocalPoolObjectBase.cpp
PR: #582 -
IPC Message Queue Handling: Allow passing an optional
MqArgs
argument into the MessageQueue
creation call. It allows passing context information and an arbitrary user argument into
the message queue. Also streamlined and simplifiedMessageQueue
implementation for all OSALs
PR: #583 -
Add a
DummyPowerSwitcher
module which can be useful for test setups when no PCDU is available
PR: #590 -
Renamed auto-formatting script to auto-formatter.sh and made it more robust. If cmake-format is installed, it will also auto-format the CMakeLists.txt files now. PR: #625 PR: #626
-
Bump C++ required version to C++17. Every project which uses the FSFW and every modern
compiler supports it
PR: #622 -
Major update for version handling, using
git describe
to fetch version information with git.
PR: #601- Add helper functions provided by
cmake-modules
manually now. Those should not change too often and only a small subset is needed - Separate folder for easier update and for distinction
- LICENSE file included
- use
int
for version numbers to allow unset or uninitialized version - Initialize Version object with numbers set to -1
- Instead of hardcoding the git hash, it is now retrieved from git
Version
now allows specifying additional version information like the git SHA1 hash and the
versions since the last tag- Additional information is set to the last part of the git describe output for
FSFW_VERSION
now. - Version still need to be hand-updated if the FSFW is not included as a submodule for now.
- Add helper functions provided by
-
Internal API change: Moved the
fsfw_hal
to thesrc
folder and integration and internal
tests part offsfw_tests
tosrc
. Unittests are now in a dedicated folder calledunittests
PR: #653
Task Module Refactoring
PR: #636
Refactoring general task code
- There was a lot of duplicate/boilerplate code inside the individual task IF OSAL implementations.
Remove it by introducing base classesPeriodicTaskBase
andFixedTimeslotTaskBase
.
Refactor PeriodicTaskIF
- Convert
virtual ReturnValue_t addComponent(object_id_t object)
to
virtual ReturnValue_t addComponent(object_id_t object, uint8_t opCode = 0)
, allowing to pass
the operation code passed toperformOperation
. Updated API taking
anExecutableObjectIF
accordingly
Refactor FixedTimeslotTaskIF
- Add additional
addSlot
function which takes anExecutableObjectIF
pointer and its Object ID
Refactor FixedSequenceSlot
- Introduce typedef
CustomCheckFunc
forReturnValue_t (*customCheckFunction)(const SlotList&)
. - Convert
ReturnValue_t (*customCheckFunction)(const SlotList&)
to
ReturnValue_t (*customCheckFunction)(const SlotList&, void*)
, allowing arbitrary user arguments
for the custom checker
Linux Task Module
- Use composition instead of inheritance for the
PeriodicPosixTask
and make thePosixTask
a
member of the class
Bugfix
- A small error in the README.md was fixed
PR: #562 - Updated TestDeviceHandler to use FSFW_VERBOSE_LEVEL
PR: #571 - Bugfix in
LocalDataPoolManager::generateSetStructurePacket
. Missing return values and storage deletion added.
PR: #597 - Small bugfix in STM32 HAL for SPI
PR: #599 - Potential Bug with nullptrs in
HybridIterator
and fixed some compiler warnings
PR: #598 - Bugfix in
SpacePacket::addWholeData
PR: #607 - Bugfix for MacOS (clang):
PR: #611 - Move some CMake directives further up top so they are not ignored
PR: #621 - Fix infinite recursion in
prepareHealthSetReply
of PUS Health Service 201.
Is not currently used right now but might be used in the future
PR: #617 - TCP TMTC Server:
MutexGuard
was not created properly in
TcpTmTcServer::handleTmSending(socket_t connSocket, bool& tmSent)
call.
PR: #618 CCSDSDistributor::selectDestination()
does no longer crash if a packet was not found in the TC Store anymore
PR: #633
API Changes
DeviceHandlerBase::getStorageData
parameter changed to size_t andDHB.rawPacketLen
changed to size_t
PR: #570- Removed the
HkSwitchHelper
. This module should not be needed anymore, now that the local datapools have been implemented.
PR: #557 Clock::convertTimeOfDayToTimeval
expects UTC as input. Fixed an issue if the system time zone was different for Linux and Host
PR: #574- HAL Linux Uart: Baudrate and bits per word are enums now, avoiding misconfigurations
PR: #585 DeviceHandlerBase::insertInCommandMap
has two new optional parameters:bool useAlternativeReply (Default false)
DeviceCommandId_t alternativeReplyId (default =0)
User don't need to change anything. If alternative replies are used, there is no need to overwriteDHB::enableReplyInReplyMap
anymore
PR: #595
- Time/Clock:
- Implemented
timeval
toTimeOfDay_t
but moved fromCCSDSTime::convertTimevalToTimeOfDay
toClock::convertTimevalToTimeOfDay
- Added Mutex for gmtime calls: (compare http://www.opengate.at/blog/2020/01/timeless/)
- Moved the statics used by Clock in ClockCommon.cpp to this file
- Better check for leap seconds
- Added Unittests for Clock (only getter)
PR: #584
- Implemented
PowerSwitchIF
: Removeconst
specifier fromsendSwitchCommand
andsendFuseOnCommand
and
also specify aReturnValue_t
return type
PR: #590- Extend
PowerSwitcher
module to optionally check current state when callingturnOn
or
turnOff
. Tis can be helpful to avoid commanding switches which do not need commanding
PR: #590 and #593 - Changed default C++ Version to C++17 (should compile with C++11 as well)
PR: #622