Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
5e73fd0
Zensical integration fprime/docs changes
Specky26846 Jun 24, 2026
945dda5
Merge branch 'devel' into zensical-integ
Specky26846 Jun 24, 2026
94d181d
restructure how-to, may need to fix more broken links
Specky26846 Jun 24, 2026
96117f4
change how-to landing page, somewhat automated, need to add one autom…
Specky26846 Jun 25, 2026
71b296d
fixed some styling issues
Specky26846 Jun 29, 2026
b26f849
Merge branch 'devel' into zensical-integ
Specky26846 Jun 29, 2026
77cea31
Add tab ordering to navigation tree
Specky26846 Jun 29, 2026
bf875b3
Restore how-to folder restructure and gen_indexes.py script
Specky26846 Jun 29, 2026
7ba47f7
Update index files and mkdocs config for restructured how-to
Specky26846 Jun 30, 2026
f2a3e4c
Simplify 'Getting Started' title in nav tree
Specky26846 Jun 30, 2026
2acdcc5
Merge branch 'devel' into zensical-integ
Specky26846 Jul 1, 2026
8a3a84d
removing site/ changes
Specky26846 Jul 1, 2026
52b1028
remove tutorials as submodules
Specky26846 Jul 1, 2026
ad872e2
remove overrides symlink
Specky26846 Jul 1, 2026
0acb4bf
reset mkdocs.yml to before zensical integration
Specky26846 Jul 1, 2026
f0ca161
move mkdocs.yml to docs folder
Specky26846 Jul 1, 2026
d3ee7d0
reinstating mkdocs.yml imrpovements
Specky26846 Jul 1, 2026
21bb88f
fixing scripts for tab ordering
Specky26846 Jul 1, 2026
e93d60f
fixing scripts for tab ordering
Specky26846 Jul 1, 2026
77576e4
fixing tutorials links
Specky26846 Jul 2, 2026
5b1c766
Merge branch 'devel' into zensical-integ
Specky26846 Jul 6, 2026
bad0fb2
Merge branch 'devel' into zensical-integ
Specky26846 Jul 6, 2026
4d14d2f
fix docs_nav_tree.py with working tutorial links
Specky26846 Jul 6, 2026
a33f46d
Merge branch 'devel' into zensical-integ
Specky26846 Jul 6, 2026
307257a
fix docs_nav_tree.py with working tutorial links
Specky26846 Jul 6, 2026
380037a
Merge branch 'zensical-integ' of https://github.com/Specky26846/fprim…
Specky26846 Jul 6, 2026
a1473f0
fix python3 version error for Jenkins
Specky26846 Jul 6, 2026
e96196b
fix python3 version error for Jenkins
Specky26846 Jul 6, 2026
6b7ac6d
change output file path
Specky26846 Jul 6, 2026
f95f9ad
fix output filepath error
Specky26846 Jul 6, 2026
746922b
Merge branch 'devel' into zensical-integ
Specky26846 Jul 7, 2026
cabdb18
fix how-to structure w awesome-nav
Specky26846 Jul 7, 2026
a42f73d
Merge branch 'zensical-integ' of https://github.com/Specky26846/fprim…
Specky26846 Jul 7, 2026
a2ae468
radio manager doc title
Specky26846 Jul 7, 2026
74d7458
one more how-to title fix
Specky26846 Jul 8, 2026
9614018
Merge remote-tracking branch 'nasa' into zensical-integ
Specky26846 Jul 8, 2026
056cfce
revert googletest changes
Specky26846 Jul 8, 2026
d36689a
fix python formatting errors with black
Specky26846 Jul 8, 2026
af6f90f
Merge branch 'devel' into zensical-integ
Specky26846 Jul 8, 2026
61d7898
attempt to get rid of broken reference index link
Specky26846 Jul 8, 2026
d146ee9
Merge branch 'devel' into zensical-integ
Specky26846 Jul 8, 2026
feefe1a
Merge branch 'devel' into zensical-integ
Specky26846 Jul 8, 2026
5154216
remove remnants of zensical specific changes
Specky26846 Jul 9, 2026
f6ee3af
Merge branch 'zensical-integ' of https://github.com/Specky26846/fprim…
Specky26846 Jul 9, 2026
089fcd9
Merge branch 'devel' into zensical-integ
Specky26846 Jul 9, 2026
7c73e74
Merge branch 'devel' into zensical-integ
Specky26846 Jul 9, 2026
221c8aa
empty
Specky26846 Jul 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/build-test-rhel8.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ name: CI [RHEL8]
# events but only for the master branch
on:
push:
branches: [ devel, release/** ]
branches: [ zensical-integ, release/** ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ devel, release/** ]
branches: [ zensical-integ, release/** ]
paths-ignore:
- 'docs/**'
- '**.md'
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/cmake-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ name: CMake Test
# events but only for the master branch
on:
push:
branches: [ devel, release/** ]
branches: [ zensical-integ, release/** ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ devel, release/** ]
branches: [ zensical-integ, release/** ]
paths-ignore:
- 'docs/**'
- '**.md'
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/codeql-jpl-standard.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ name: "Code Scan: JPL Coding Standard"

on:
push:
branches: [ devel, release/** ]
branches: [ zensical-integ, release/** ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ devel, release/** ]
branches: [ zensical-integ, release/** ]
paths-ignore:
- 'docs/**'
- '**.md'
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/codeql-security-scan.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ name: "Code Scan: CodeQL Security"

on:
push:
branches: [ devel, release/** ]
branches: [ zensical-integ, release/** ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ devel, release/** ]
branches: [ zensical-integ, release/** ]
paths-ignore:
- 'docs/**'
- '**.md'
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/config-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ name: "Config Test"

on:
push:
branches: [ devel, release/** ]
branches: [ zensical-integ, release/** ]
pull_request:
branches: [ devel, release/** ]
branches: [ zensical-integ, release/** ]
paths-ignore:
- 'docs/**'
- '**.md'
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/coverage-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ name: "Coverage Check"

on:
pull_request:
branches: [ devel, release/** ]
branches: [ zensical-integ, release/** ]
paths-ignore:
- 'docs/**'
- '**.md'
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/coverage-update.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ name: "Coverage Update"

on:
push:
branches: [ devel, release/** ]
branches: [ zensical-integ, release/** ]
tags: [ 'v*' ]
workflow_dispatch:

Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/cppcheck-scan.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ name: "Code Scan: CppCheck"

on:
push:
branches: [ devel, release/** ]
branches: [ zensical-integ, release/** ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ devel, release/** ]
branches: [ zensical-integ, release/** ]
paths-ignore:
- 'docs/**'
- '**.md'
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/ext-aarch64-linux-led-blinker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ name: "External Repo: AArch64 Linux LedBlinker"

on:
push:
branches: [devel, release/**]
branches: [zensical-integ, release/**]
pull_request:
# The branches below must be a subset of the branches above
branches: [devel, release/**]
branches: [zensical-integ, release/**]
paths-ignore:
- "docs/**"
- "**.md"
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/ext-build-examples-repo.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ name: "External Repo: fprime-examples"

on:
push:
branches: [ devel, release/** ]
branches: [ zensical-integ, release/** ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ devel, release/** ]
branches: [ zensical-integ, release/** ]
paths-ignore:
- 'docs/**'
- '**.md'
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/ext-build-hello-world.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ name: "External Repo: Tutorial: HelloWorld"

on:
push:
branches: [ devel, release/** ]
branches: [ zensical-integ, release/** ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ devel, release/** ]
branches: [ zensical-integ, release/** ]
paths-ignore:
- 'docs/**'
- '**.md'
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/ext-build-led-blinker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ name: "External Repo: Tutorial: LedBlinker"

on:
push:
branches: [ devel, release/** ]
branches: [ zensical-integ, release/** ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ devel, release/** ]
branches: [ zensical-integ, release/** ]
paths-ignore:
- 'docs/**'
- '**.md'
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/ext-build-math-comp.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ name: "External Repo: Tutorial: MathComponent"

on:
push:
branches: [ devel, release/** ]
branches: [ zensical-integ, release/** ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ devel, release/** ]
branches: [ zensical-integ, release/** ]
paths-ignore:
- 'docs/**'
- '**.md'
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/ext-cookiecutters-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ name: "External Repo: Cookiecutters Tests"

on:
push:
branches: [ devel, release/** ]
branches: [ zensical-integ, release/** ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ devel, release/** ]
branches: [ zensical-integ, release/** ]
paths-ignore:
- 'docs/**'
- '**.md'
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/ext-fprime-cfs-reference.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ name: "External Repo: cFS Reference"

on:
push:
branches: [ devel, release/** ]
branches: [ zensical-integ, release/** ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ devel, release/** ]
branches: [ zensical-integ, release/** ]
paths-ignore:
- 'docs/**'
- '**.md'
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/ext-fprime-zephyr-reference-pico2.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ name: "External Repo: Zephyr Reference (Pico 2)"

on:
push:
branches: [ devel, release/** ]
branches: [ zensical-integ, release/** ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ devel, release/** ]
branches: [ zensical-integ, release/** ]
paths-ignore:
- 'docs/**'
- '**.md'
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/ext-fprime-zephyr-reference-teensy41.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ name: "External Repo: Zephyr Reference (Teensy 4.1)"

on:
push:
branches: [ devel, release/** ]
branches: [ zensical-integ, release/** ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ devel, release/** ]
branches: [ zensical-integ, release/** ]
paths-ignore:
- 'docs/**'
- '**.md'
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/ext-raspberry-led-blinker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ name: "External Repo: RPI LedBlinker"

on:
push:
branches: [devel, release/**]
branches: [zensical-integ, release/**]
pull_request:
# The branches below must be a subset of the branches above
branches: [devel, release/**]
branches: [zensical-integ, release/**]
paths-ignore:
- "docs/**"
- "**.md"
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/format-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ name: "Code Format Check"

on:
push:
branches: [ devel, release/**, ci/** ]
branches: [ zensical-integ, release/**, ci/** ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ devel, release/** ]
branches: [ zensical-integ, release/** ]
paths-ignore:
- 'docs/**'
- '**.md'
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/fpp-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ name: "FppTest"

on:
push:
branches: [ devel, release/** ]
branches: [ zensical-integ, release/** ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ devel, release/** ]
branches: [ zensical-integ, release/** ]
paths-ignore:
- 'docs/**'
- '**.md'
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/fpp-to-json.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ name: "fpp-to-json Test"

on:
push:
branches: [ devel, release/** ]
branches: [ zensical-integ, release/** ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ devel, release/** ]
branches: [ zensical-integ, release/** ]
paths-ignore:
- 'docs/**'
- '**.md'
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/framework.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ name: "Framework"

on:
push:
branches: [ devel, release/** ]
branches: [ zensical-integ, release/** ]
pull_request:
branches: [ devel, release/** ]
branches: [ zensical-integ, release/** ]
paths-ignore:
- 'docs/**'
- '**.md'
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/markdown-link-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ name: Check Markdown links

on:
push:
branches: [devel, docs/new-website]
branches: [zensical-integ, docs/new-website]
pull_request:
branches: [devel]
branches: [zensical-integ]
# Cancel in-progress runs if a newer run is started on a given PR
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/python-format.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ name: Format Python

on:
push:
branches: [ devel, release/** ]
branches: [ zensical-integ, release/** ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ devel, release/** ]
branches: [ zensical-integ, release/** ]
# Cancel in-progress runs if a newer run is started on a given PR
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/ref.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ name: "Ref"

on:
push:
branches: [devel, release/**]
branches: [zensical-integ, release/**]
pull_request:
branches: [devel, release/**]
branches: [zensical-integ, release/**]
paths-ignore:
- "docs/**"
- "**.md"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# How-To: Generate Data Products
# Generate Data Products

This How-To describes **when to use data products**, **how to generate them in flight software**, **how to test them**, and provides guidance for **topology integration** and **ground decoding**. It is intended for engineers who are comfortable with F Prime components and want to add structured, store-and-forward mission data to their system.

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# How-To: Define State Machines in F Prime
# Define State Machines in F Prime

This guide shows how to define and use state machines in F Prime using the F Prime Modeling Language (FPP). State machines help capture component behavior by modeling modes (states) and transitions explicitly, making complex logic easier to implement, test, and maintain. FPP provides autocoding capabilities to allow users to quickly implement state-defined behavior.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ Before starting, you should have:

A "device driver" traditionally refers to the entire stack of software that manages a hardware device. In F´, the driver-manager pattern splits this in two components: the device manager component and the bus driver component. The bus driver handles the platform-specific implementation of communications on a specific bus (e.g., LinuxI2cDriver, LinuxUartDriver). The device manager handles the operations and logic for a specific device. This enhances modularity and reusability: for example the same device manager can be ported to different platforms by switching the bus driver component.

Please refer to the [Application Manager Driver pattern documentation](../user-manual/design-patterns/app-man-drv.md) for more details on the design pattern used in F Prime for device drivers.
Please refer to the [Application Manager Driver pattern documentation](../../user-manual/design-patterns/app-man-drv.md) for more details on the design pattern used in F Prime for device drivers.

### Example and reference

Expand Down Expand Up @@ -65,7 +65,7 @@ Use `fprime-util new --component` to create a new component for your device mana

This component will translate device-specific operations into bus transactions. Identify the bus type (I2C, SPI, UART, etc.) and the operations needed (read, write, configure, etc.). These should be reflected in the component's ports by mirroring the bus driver's interface.

For our `ImuManager` component, we are using an I2C bus, therefore we need to define ports that mirror the `Drv.I2c` interface (see [Drv/Interfaces/I2c.fpp](../../Drv/Interfaces/I2c.fpp)).
For our `ImuManager` component, we are using an I2C bus, therefore we need to define ports that mirror the `Drv.I2c` interface (see [Drv/Interfaces/I2c.fpp](../../../Drv/Interfaces/I2c.fpp)).
For example, a `Drv.I2c` component provides an ***input*** port of type `Drv.I2cWriteRead`, so we need to define an ***output*** port of that type in our component in order to connect to a bus driver component. We mirror each Bus Driver port that we need to use in our Device Manager.

```python
Expand Down Expand Up @@ -280,7 +280,7 @@ We learn the following:

### Step 2 - Define the Bus Driver Component

Use `fprime-util new --component` to create a new component for your bus driver. The set of ports that a bus driver needs to expose depends on the bus communication protocol (I2C, SPI, UART, etc.). F Prime provides standard interfaces for common bus types in the `Drv/Interfaces/` directory. For I2C, we can use the existing `Drv.I2c` interface (see [Drv/Interfaces/I2c.fpp](../../Drv/Interfaces/I2c.fpp)).
Use `fprime-util new --component` to create a new component for your bus driver. The set of ports that a bus driver needs to expose depends on the bus communication protocol (I2C, SPI, UART, etc.). F Prime provides standard interfaces for common bus types in the `Drv/Interfaces/` directory. For I2C, we can use the existing `Drv.I2c` interface (see [Drv/Interfaces/I2c.fpp](../../../Drv/Interfaces/I2c.fpp)).

```python
# In: ZephyrI2cDriver.fpp
Expand All @@ -292,7 +292,7 @@ passive component ZephyrI2cDriver {
```

> [!TIP]
> Our I2C bus driver will only be responding to read/write requests from a device manager, therefore we define it as a `passive component` and the `Drv.I2c` ports are sufficient. If your bus driver needs to perform scheduled tasks (e.g., polling, timeouts, etc.), you may consider adding a scheduling port (`Svc.Sched`) to hook to a [Svc.RateGroup](../../Svc/ActiveRateGroup/docs/sdd.md), and potentially switching to an `active` component. `queued` components can also be used but need careful design to ensure messages are dispatched.
> Our I2C bus driver will only be responding to read/write requests from a device manager, therefore we define it as a `passive component` and the `Drv.I2c` ports are sufficient. If your bus driver needs to perform scheduled tasks (e.g., polling, timeouts, etc.), you may consider adding a scheduling port (`Svc.Sched`) to hook to a [Svc.RateGroup](../../../Svc/ActiveRateGroup/docs/sdd.md), and potentially switching to an `active` component. `queued` components can also be used but need careful design to ensure messages are dispatched.

Run `fprime-util impl` to generate the component C++, including the port handler to fill out. In our case, we will need to implement the `write`, `read`, and `writeRead` port handlers.

Expand Down Expand Up @@ -405,9 +405,9 @@ void configureTopology() {

## Additional Resources

- [Application Manager Driver Pattern](../user-manual/design-patterns/app-man-drv.md)
- [Application Manager Driver Pattern](../../user-manual/design-patterns/app-man-drv.md)
- [fprime-sensors Repository](https://github.com/fprime-community/fprime-sensors) - A collection of ready-to-use device managers for specific devices
- [fprime-sensors-reference Repository](https://github.com/fprime-community/fprime-sensors-reference) - Reference project that uses sensors defined in fprime-sensors
- [F´ core Linux Bus Drivers](../../Drv/)
- [F´ core Linux Bus Drivers](../../../Drv)
- [fprime-zephyr package](https://github.com/fprime-community/fprime-zephyr) - F Prime support for Zephyr RTOS, including common bus drivers for Zephyr

Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ add_fprime_subdirectory("${CURRENT_CMAKE_LIST_DIR}/MyLibrary/MyTopology")

F´ libraries share F´ code through modules. These module directories are created by `fprime-util new --component` or by hand and may include any F´ code (Components, Ports, Topologies, Data Types, etc.). These types are made available to users of the library by ensuring that they are added to the `library.cmake` file. The only restriction is that these component should be placed under a namespacing directory for the library (e.g. `MyLibrary`) to avoid collisions with other libraries and F´ code.

Developing component, ports, topologies, etc. are the subject of our [tutorials](../tutorials/index.md).
Developing component, ports, topologies, etc. are the subject of our [tutorials](../../tutorials/index.md).


## Optional: Toolchain Folder and Toolchain Files
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
# Develop a Subtopology

Subtopologies are topologies for smaller chunks of behavior in F Prime. It allows for grouping bits of topology architecture that fit together, to then be imported into a base deployment's topology. The use case for this is seen when working with shareable components, specifically in the form of [libraries](./develop-fprime-libraries.md).
Subtopologies are topologies for smaller chunks of behavior in F Prime. It allows for grouping bits of topology architecture that fit together, to then be imported into a base deployment's topology. The use case for this is seen when working with shareable components, specifically in the form of [libraries](develop-fprime-libraries.md).

*Contents*
1. [Subtopology Structure](#subtopology-structure)
2. [Individual File Contents](#individual-file-contents)
1. [Example Scenario](#example-scenario)
3. [Integration into a "Main" Deployment](#integration-into-a-main-deployment)
4. [Subtopology Autocoder](#the-subtopology-autocoder)
4. [Adding Subtopology Configuration](#adding-subtopology-configuration)
5. [Conclusion](#conclusion)

## Subtopology Structure
Expand Down
Loading