Skip to content

Release v3.5.0

Compare
Choose a tag to compare
@LeStarch LeStarch released this 16 Oct 18:13
· 48 commits to devel since this release
c548b53

The release v3.5.0 contains a number of improvements. Primarily, the Operating System Abstraction Layer (OSAL) has been refactored to make integration with new operating systems easier. It also ensures that the OSAL selection for each subsystem is independent, and selected per-executable rather than the entire project.
State machine autocoding has been integrated into F Prime, and a plug-in system has been introduced to the GDS to allow for customized integrations and use-cases.

Breaking Changes

There are a number of breaking changes in this release. Users will need to fix these issues when upgrading from v3.4.3.

Configuration Changes

Configuration has been substantially changed. Users should migrate to the new FpConfig.h available in fprime/config and adjust settings accordingly.

General OSAL Changes

Users are encouraged to call Os::init() in the main function of their deployment. While not strictly necessary, this initializes OS singletons at a deterministic time.

Fw::Logger::log calls that precede this call will not be output.

#include <Os/Os.hpp>
...
int main(...) {
    Os::init();
    ...
}

Failing to do so will result in singletons self-initializing on first usage resulting in a very small delay on first usage. Fw::Logger::log messages will not use the Os::Console output until Os::init() is called.

FPP Changes

FPP has introduced new keywords to support integrated state machines! This means users who chose those names will need to escape them. Commonly, state is used and should be escaped as $state

- event SetBlinkingState(state: Fw.On) ...
+ event SetBlinkingState($state: Fw.On) ...

Task Changes

Most components have standardized on start, stop, and join calls to manage internal tasks. To start these tasks users should switch to the new start, stop, and join methods.

-    comm.startSocketTask(name, true, COMM_PRIORITY, Default::STACK_SIZE);
+    comm.start(name, true, COMM_PRIORITY, Default::STACK_SIZE);
...

-    comm.stopSocketTask();
-    (void)comm.joinSocketTask(nullptr);
+    comm.join();
+   comm.stop();

Fully Qualified Instance Names

Instances in F Prime dictionaries and typologies are now fully-qualified. This means that the instances are prepended with the module names. To restore the global-instance functionality of older deployments, please remove modules definitions from around instances.

- module Ref {
...

  instance blockDrv: Drv.BlockDriver base id 0x0100 \
    queue size Default.QUEUE_SIZE \
    stack size Default.STACK_SIZE \
    priority 140
...
- }

StringUtils Changes

Users of StringUtils functions should now supply a FwSizeType and may no longer use U32 as arguments.

Linux GPIO driver

Users of the LinuxGpioDriver now should exepct a return value of Drv::GpioStatus from read and write calls. Additionally, the open call now expects a chip argument.

- bool gpio_success = gpioDriver.open(13, Drv::LinuxGpioDriver::GpioDirection::GPIO_OUT);
+ Os::File::Status gpio_success = gpioDriver.open("/dev/gpiochip0", 13, Drv::LinuxGpioDriver::GpioConfiguration::GPIO_OUTPUT);

Time and Interval Changes

Users should now supply a Fw::TimeInterval(seconds, microseconds) to calls to Os::Task::delay. Svc.TimeVal has been replaced by Os::RawTime.

Full List of Changes

New Contributors

Full Changelog: v3.4.3...v3.5.0