Skip to content
v5.0.0

- Unit test for Internal Error Reporter
  PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/563
- Additional build flags for FSFW have been added
 PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/568
- The current FSFW Version can now be read with `` fsfw::FSFW_VERSION ``. For comparison  with User required Version is possible with``fsfw::Version(UserRequiredMajor,UserRequiredMinor,UserRequiredRevision)>=fsfw::FSFW_VERSION``
  PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/575
- FSFW_DISABLE_PRINTOUT will now be defined default to 0, if it was not defined
  PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/576
-Cooldown will now be initialized in the constructor by calling:`` Countdown::setTimeout ``
  PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/577
- Events: Introduced ``UniqueEventId_t`` which can be found by generators
  PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/578
-  Added function to add component to a periodic task by pointer
  PR:  https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/591
- Added ETL dependency and improved library dependency management
  PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/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: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/616
- Added generic PUS TC Scheduler Service 11. It depends on the new added Emebeded Template Library
  (ETL) dependency.
  PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/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: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/623
- Basic `clion` support: Update `.gitignore` and add some basic run configurations
  PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/625

- 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:  https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/559
- HAL GPIO: `Direction`, `GpioOperation` and `Levels` are enum classes now, which prevents
  name clashes with Windows defines.
  PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/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: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/602
- New CMake option `FSFW_HAL_LINUX_ADD_LIBGPIOD` to specifically exclude `gpiod` code.
  PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/572
- HAL Linux SPI: Set the Clock Default State when setting new SPI speed
  and mode
  PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/573

- Changes in Integration Tests for ```tests/src/fsfw_tests/integration/task/TestTask.h  ```
  PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/560
- Small Tweaks of printouts in ``LocalPoolObjectBase.cpp``
  PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/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 simplified `MessageQueue` implementation for all OSALs
  PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/583
- Add a `DummyPowerSwitcher` module which can be useful for test setups when no PCDU is available
  PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/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: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/622

- Major update for version handling, using `git describe` to fetch version information with git.
  PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/601
  - Add helper functions provided by [`cmake-modules`](https://github.com/bilke/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.
- Internal API change: Moved the `fsfw_hal` to the `src` folder and integration and internal
  tests part of `fsfw_tests` to `src`. Unittests are now in a dedicated folder called `unittests`
  PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/653

PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/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 classes `PeriodicTaskBase` and `FixedTimeslotTaskBase`.

**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 to `performOperation`. Updated API taking
  an `ExecutableObjectIF` accordingly

**Refactor FixedTimeslotTaskIF**

- Add additional `addSlot` function which takes an `ExecutableObjectIF` pointer and its Object ID

**Refactor FixedSequenceSlot**

- Introduce typedef `CustomCheckFunc` for `ReturnValue_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 the `PosixTask` a
  member of the class

- A small error in the README.md was fixed
  PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/562
- Updated TestDeviceHandler to use FSFW_VERBOSE_LEVEL
  PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/571
- Bugfix in ``LocalDataPoolManager::generateSetStructurePacket``. Missing return values and storage deletion added.
  PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/597
- Small bugfix in STM32 HAL for SPI
  PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/599
- Potential Bug with nullptrs in `` HybridIterator `` and fixed some compiler warnings
  PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/598
- Bugfix in `` SpacePacket::addWholeData``
  PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/607
- Bugfix for MacOS (clang):
  PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/611
- Move some CMake directives further up top so they are not ignored
   PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/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: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/617
- TCP TMTC Server: `MutexGuard` was not created properly in
  `TcpTmTcServer::handleTmSending(socket_t connSocket, bool& tmSent)` call.
  PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/618
- `` CCSDSDistributor::selectDestination()`` does no longer crash if a packet was not found in the TC Store anymore
  PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/633

- `` DeviceHandlerBase::getStorageData`` parameter changed to size_t and ``DHB.rawPacketLen`` changed to size_t
  PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/570
- Removed the `HkSwitchHelper`. This module should not be needed anymore, now that the local datapools have been implemented.
  PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/557
- ``Clock::convertTimeOfDayToTimeval``  expects UTC as input. Fixed an issue if the system time zone was different for Linux and Host
   PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/574
- HAL Linux Uart: Baudrate and bits per word are enums now, avoiding misconfigurations
  PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/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 overwrite `` DHB::enableReplyInReplyMap``anymore
   PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/595
- Time/Clock:
  - Implemented `timeval` to `TimeOfDay_t` but moved from `` CCSDSTime::convertTimevalToTimeOfDay `` to `` Clock::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: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/584
- `PowerSwitchIF`: Remove `const` specifier from `sendSwitchCommand` and `sendFuseOnCommand` and
  also specify a `ReturnValue_t` return type
  PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/590
- Extend `PowerSwitcher` module to optionally check current state when calling `turnOn` or
  `turnOff`. Tis can be helpful to avoid commanding switches which do not need commanding
  PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/590 and https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/593
- Changed default C++ Version to C++17 (should compile with C++11 as well)
  PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/622

- Clock has does not compile on Windows: timgm is not compatible with windows
  Issue: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/issues/603