Skip to content

Releases: nasa/fprime

Release v3.5.0

16 Oct 18:13
c548b53
Compare
Choose a tag to compare

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

Read more

Release v3.4.3

20 Feb 19:24
ba30515
Compare
Choose a tag to compare

Hotfix release correcting a bug in the deployment templates (fprime-util new --deployment).

What's Changed

Full Changelog: v3.4.2...v3.4.3

Release v3.4.2

16 Feb 20:55
7b21b18
Compare
Choose a tag to compare

Quarterly release including bug fixes, improvements and a few minor breaking changes.

Breaking Changes

  • In Fw/FilePacket, the length and value member variables are now private and should instead be accessed with the getLength and getValue methods.
  • In Svc/FileDownlink, the sourceName, destName, osFile and size member variables are now private and should be accessed with their get* methods.
  • send is now a reserved keyword in FPP. FPP objects that are named send, such as ports, need to be either renamed or escaped with a $ character (see reference on escape characters in FPP)
  • The following only applies to projects that pull the config/ folder out of fprime/ to configure and own it in their project.
    Modifications are required in the following files (links show content to add):

Improvements

  • The Ninja build tool is now officially supported by F´ Tools. Generate a Ninja-based build cache with fprime-util generate --ninja.
  • fprime-util new --project is being deprecated in favor of a new package: fprime-bootstrap. This is to fix installation issues as well as improve user experience with a new recommended approach to using virtual environments within an F´ project. See the Install Guide for more information.
  • Improvements to the F´ GDS and F´ Tools packages.

All PRs

New Contributors

Full Changelog: v3.4.1...v3.4.2

Release v3.4.1

18 Dec 22:40
8a1612c
Compare
Choose a tag to compare

This release addresses a number of issues with the v3.4.0 release. Most notably, we've corrected a number of issues with the various tool packages that support F´.

What's Changed

Full Changelog: v3.4.0...v3.4.1

Release v3.4.0: FPP v2.0.0 Support!

29 Nov 00:58
0e66d8d
Compare
Choose a tag to compare

Description

This release of F´, v3.4.0,  introduces several major features:

  1. Interfaces: interfaces are .fppi files that break out standard bits of functionality. This allows others to use that functionality in a new component by including that file. The new component may then drop-in for any other component implementing the interface. This means that the days of multiple components using the same model are over!
  2. FPP v2.0: FPP is updated to the v2.0.x line. The old autocoder for C++ files is no longer used, which reduces a significant amount of technical debt. Note: the older autocoder package still remains for use in dictionary generation.
  3. Documentation: much work has been done on the documentation to ensure that it links correctly, builds correctly, and is more navigable. Enjoy!
  4. CMake Restructuring: CMake's "prescan" has now been formalized into subbuilds allowing users to use this feature (and enabling the associated UTs to check that it works).

Upgrading to v3.4.0 (Breaking Changes)

This section will designate the breaking changes for this release. Users should study each subsection when upgrading to v3.4.0.

For a full example of all changes described, see: fprime-community/fprime-tutorial-math-component@5ffca10...4b89b9d

Python 3.7 Support Discontinued

Python 3.7 has reached end-of-life and as such our support of Python 3.7 has been discontinued. Users must upgrade their python installations to use Python 3.8 - Python 3.11. Python 3.12 support is being worked on but is unavailable for this release due to significant changes to the python packaging setup.

googletest is a Submodule

The Google Test framework has been made into a submodule. Users of existing projects now need to initialize sub repositories recursively.

git submodule update --init --recursive

Users who have not initialized the repository with the above command will see an error similar to the following during unit test generation. The above command will fix the problem.

-- Configuring incomplete, errors occurred!
 The source directory

   .../fprime/googletest

 does not contain a CMakeLists.txt file.
Call Stack (most recent call first):
 .../fprime/cmake/FPrime-Code.cmake:15 (fprime_setup_included_code)
 CMakeLists.txt:12 (include)

Svc.LinuxTime Replaced By Svc.PosixTime

Svc.LinuxTime was always implementing time services for posix operating systems despite the misnomer. It has been renamed Svc.PosixTime and implements the new Svc.Time interface! To upgrade, replace the following in your topology instance definitions:

  instance linuxTime: Svc.Time base id 0x4500 \
    type "Svc::LinuxTime" \
    at "../../Svc/LinuxTime/LinuxTime.hpp"

With the new more streamlined definition:

instance posixTime: Svc.PosixTime base id 0x4500

Usages of linuxTime in your C++ code will also need to be renamed to posixTime.

Implementers of the Svc.Time model must switch to using the Svc.Time interface. This is done by:

  1. Creating a new FPP model
  2. Including the Svc.Time fppi file
  3. Ensuring the port interfaces are implemented in C++

FPP v2.0: Unit Test Changes

With the upgrade to FPP v2.0 and the new C++ generation back-end, users must update their unit tests include statements as all files are now fully named (no longer generic names like "GTestBase.hpp").

Here is a sample update. The old include names:

#include "GTestBase.hpp"

Must be replaced with the new names:

#include "SignalGenGTestBase.hpp"

Additionally, useages of the Tester class must be renamed to the qualified class. i.e. Tester -> SignalGenTester.

Users may choose to update the filenames as well, although this is not strictly required.

TcpServer Startup and Shutdown Methods Optional

Drv.TcpServer startup and shutdown methods are now optional, and will be called automatically within the read thread. Users are encouraged to remove explicit calls to these methods, but are not required to do so.

Drv.ByteStreamDriverModel Has Been Made Into an Interface

The byte stream driver model has been refined into an interface. This means that users need not instantiate it with a "type" defined somewhere else, but instead instantiate a real type that "drops in" to support a byte steam driver.

To upgrade, replace the following in your topology instance definitions:

  instance comm: Drv.ByteStreamDriverModel base id 0x4000 \
    type "Drv::TcpClient" \ # type specified to select implementor of ByteStreamDriverModel
    at "../../Drv/TcpClient/TcpClient.hpp" # location of above implementor must also be specified

With the new more streamlined definition:

instance comm: Drv.TcpClient base id 0x4500

This applies to the TcpServer as well.

Implementers of the Drv.ByteStreamDriverModel model must switch to using the Drv.ByteStreamDriverModel interface. This is done by:

  1. Creating a new FPP model
  2. Including the Drv.ByteStreamDriverModel fppi file
  3. Ensuring the port interfaces are implemented in C++

Svc.RateGroupDriver Now Accepts Offsets

The rate group driver component had a flaw where all rate groups would be invoked on the same cycle. This causes spikes in system load when all rate groups lined up. We added the ability to specify an offset such that these may be mitigated if a user chooses. However, this means the configuration block for the component has changed.

Replace the older configuration:

NATIVE_INT_TYPE rateGroupDivisors[Svc::RateGroupDriver::DIVIDER_SIZE] = {1, 2, 4};
...
    rateGroupDriverComp.configure(rateGroupDivisors, FW_NUM_ARRAY_ELEMENTS(rateGroupDivisors));

With the new configuration:

Svc::RateGroupDriver::DividerSet rateGroupDivisorsSet{{{1, 0}, {2, 0}, {4, 0}}};
...
rateGroupDriverComp.configure(rateGroupDivisorsSet);

In the above example all offsets are set to 0 to maintain the old behavior only with the new configuration interface.

What's Changed

Read more

Release v3.3.2: New Deployment Hot Fix

18 Aug 17:19
Compare
Choose a tag to compare

This release fixes an issue where deployments created with fprime-util new --deployment choosing to use TcpServer as a communication driver did not call .shutdown().

What's Changed

Full Changelog: v3.3.1...v3.3.2

Release v3.3.1

17 Aug 17:08
fe6b228
Compare
Choose a tag to compare

What's Changed

  • The installation guide's instructions have been revised to improve the clarity of virtual environment usage for new users.

F´ Tooling changes

  • F´ Tools' new --deployment now allows for selection of the comDriver type between TcpClient, TcpServer and LinuxUART.
  • F´ GDS ships with the UART adapter for all installations.
  • F´ GDS is able to run as the TCP client when using the IP adapter, allowing comms with a FSW using TcpServer.

Full Changelog: v3.3.0...v3.3.1

Release v3.3.0

04 Aug 16:56
d355af0
Compare
Choose a tag to compare

Latest: https://github.com/nasa/fprime/releases/tag/v3.3.2 fixes issues with fprime-util new --deployment and using the TcpServer component for uplink and downlink.

Breaking Changes

  • fprime-arm-linux is now shipped in the core F´ framework. Users of the fprime-arm-linux external package should switch to using the toolchains shipped within F´.

What's Changed

  • New recommended CMake build structure, new projects are encouraged to use fprime-util new --project

New Features

  • fprime-util visualize: visualize an F´ topology with a single command

New Contributors

Full Changelog: v3.2.0...v3.3.0

Release v3.3.0-RC1

02 Aug 00:39
72a2106
Compare
Choose a tag to compare
Release v3.3.0-RC1 Pre-release
Pre-release

What's Changed

New Contributors

Full Changelog: v3.2.0...v3.3.0-RC1

F´ Release v3.2.0

20 Apr 20:45
5c05e60
Compare
Choose a tag to compare

Release Notes

F´ v.3.2.0 comes with FPP, Tooling and GDS improvements. The underlying typing system has been improved to allow logical types.

Breaking Changes

  • Authors of CMake toolchains should now supply a PlatformTypes.h header according to the Numerical Type design. Linux example provided here: cmake/platform/types/PlatformTypes.h.
  • LinuxSerialDriver has been renamed LinuxUartDriver and has been updated to support the ByteStreamDriver model. Users will need to update their ports.
  • Users should consider adding ComQueue and ComAdapter to their downlink chain.
  • CAssert.hpp renamed CAssert.h

Major Changes

  • GDS now supports complex types, command arguments and parameters.
  • Sanitization has been added to Unit Tests.
  • FPP now directly generates data types and ports.
  • fprime-util new now supports generating new projects (as well as deployments and components). Users are recommended to use this new functionality moving forward.
  • Getting Started tutorial has been reworked and leverages the fprime-util new functionality.

New Contributors

Full Changelog: v3.1.1...v3.2.0