Skip to content

Release v3.5.0

Compare
Choose a tag to compare
@LeStarch LeStarch released this 16 Oct 18:13
· 68 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.

OSAL functions names have been updated to match better naming standards. Please consult the OSAL layer APIs for the new names.

Fw::Logger and Os::Log

Os::Log has been renamed Os::Console to differentiate it from "Fw Log (Log Events)". Most users should be using the Fw::Logger interface anyway.

Fw::Logger::logMsg has been renamed to Fw::Logger::log and now supports printf style substitutions!

Fw::Obj.m_objName is Now an Fw::ObjectName String Type

Direct uses of m_objName should note that the type has changed to a string class. The accessor method still returns a char* type.

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) ...

PRM_SET/SAVE commands are PARAM_SET/SAVE. This will be revised in a future release as was an unintentional rename.

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.stop();
+    comm.join();

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.

StringBase Constructor are now Explicit

Conversion from const char* to some Fw::StringBase types requires explicit use of the single argument constructor.

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.

GDS Changes

The GDS now defaults to ZeroMQ as a transport layer instead of our home-grown solution.

The GDS now expects dictionaries in the new JSON format.

Full List of Changes

New Contributors

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