Release v3.4.0: FPP v2.0.0 Support!
Description
This release of F´, v3.4.0, introduces several major features:
- 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! - 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.
- Documentation: much work has been done on the documentation to ensure that it links correctly, builds correctly, and is more navigable. Enjoy!
- 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 toposixTime
.
Implementers of the
Svc.Time
model must switch to using theSvc.Time
interface. This is done by:
- Creating a new FPP model
- Including the
Svc.Time
fppi file- 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 theDrv.ByteStreamDriverModel
interface. This is done by:
- Creating a new FPP model
- Including the
Drv.ByteStreamDriverModel
fppi file- 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
- Added sleep to avoid test failing because of execution too fast by @SMorettini in #2197
- Add tutorial builds to CI by @thomas-bc in #2221
- Adding simple landing page for F´ by @LeStarch in #2254
- Cross-link Installation Guide with troubleshooting Tips by @LeStarch in #2259
- Add upcoming events by @LeStarch in #2260
- Add support for additional baud rates by @SMorettini in #2217
- Converting ByteStreamDriverModel into an interface by @LeStarch in #2252
- Update cross-compilation Appendix I by @thomas-bc in #2267
- Fixing undefined behavior in lib CRC by @LeStarch in #2269
- Update/arrayiffy cmd split by @LeStarch in #2287
- FPP v2.0 integration by @tiffany1618 in #2181
- Add nav bar 3/3: add _includes/toc.md by @Chr1st1anSears in #2271
- Table of Contents update by @thomas-bc in #2294
- Formalize PR process for breaking changes by @thomas-bc in #2289
- Integrate/fpp v2 by @LeStarch in #2293
- Split fpp-input-list to import and source by @thomas-bc in #2305
- Update FPP version to 2.0.0 by @bocchino in #2304
- Fix relative links in TOC by @thomas-bc in #2307
- Adding scalar type test to type demo by @LeStarch in #2313
- Add deployment to arm-linux paths. Fixes #2248. by @LeStarch in #2315
- Fixes #2146 by correcting #if by @LeStarch in #2314
- Added startup, shutdown methods to IpSocket and added startup as a re… by @LeStarch in #2261
- Convert Svc.Time into An Interface by @LeStarch in #2317
- Run RPI integration tests for LedBlinker by @thomas-bc in #2264
- Fix minor build settings issues by @LeStarch in #2339
- Adding gcda clean-up script that works with ctest by @LeStarch in #2331
- Upgrade to check-spelling v0.0.22 by @jsoref in #2316
- Implementation of the offsets in the RateGroupDriver by @SMorettini in #2166
- Updating fprime-tools and fprime-gds versions by @LeStarch in #2344
- Remove Python 3.7 support by @thomas-bc in #2351
- Add F´ Software Architecture links by @thomas-bc in #2357
- Rename noop target to refresh_cache by @thomas-bc in #2361
- Improve linkage of CMake documentation by @thomas-bc in #2355
- Refactor locs, dependencies into generic sub build by @LeStarch in #2360
- Removing join after task failed creation. Fixes #1955 by @LeStarch in #2367
- Update/sloc cache by @LeStarch in #2366
- Update FPP version by @bocchino in #2374
- Remove .dockerignore by @thomas-bc in #2377
- Use GoogleTest as a submodule by @thomas-bc in #2371
- Update Doxygen config by @thomas-bc in #2370
- Adding FPRIME_TOOLCHAIN_NAME variable and restrict_platforms support by @LeStarch in #2388
- Fix static analysis warning in Serializable.cpp (#2385) by @bocchino in #2386
- Should fix random CMake build failures by @LeStarch in #2390
- Bumping versions for release v3.4.0 by @LeStarch in #2389
New Contributors
- @Chr1st1anSears made their first contribution in #2271
Full Changelog: v3.3.2...v3.4.0