F' - A flight software and embedded systems framework

F´: A Flight-Proven, Multi-Platform, Open-Source Flight Software Framework

Language grade: C++ Language grade: Python Language grade: JavaScript

F´ (F Prime) is a component-driven framework that enables rapid development and deployment of spaceflight and other embedded software applications. Originally developed at the Jet Propulsion Laboratory, F´ has been successfully deployed on several space applications. It is tailored but not limited to small-scale spaceflight systems such as CubeSats, SmallSats, and instruments.

F´ comprises several elements:

  • An architecture that decomposes flight software into discrete components with well-defined interfaces
  • A C++ framework that provides core capabilities such as message queues and threads
  • Modeling tools for specifying components and connections and automatically generating code
  • A growing collection of ready-to-use components
  • Testing tools for testing flight software at the unit and integration levels.

Quick Installation Guide

The following utilities are prerequisites to installing F´:

  • cmake
  • git
  • Python 3.5+ with pip

Once these utilities are installed, you can install F´ Python dependencies. Installing dependencies in a Python virtual environment prevents issues at the system level, but installing in a virtual environment is not required.

To install F´ quickly, enter:

git clone https://github.com/nasa/fprime.git
cd fprime
pip install --upgrade wheel setuptools pip
pip install Fw/Python Gds/

For full installation instructions, including virtual environment creation and installation verification, see INSTALL.md.

Example Deployments

F´ comes with two example deployments. The deployments represent working F´ applications to help you understand F´. You can use these examples for reference, or clone them to start a new project.

The next section links to more step-by-step tutorials, but it's a good idea to build and run at least the first example deployment to ensure that F´ is installed correctly.

Example one: Ref

The standard reference application demonstrates how most of the system components should be wired together. The reference application can build on Linux or Mac OSX, allowing you to get started immediately without the need for embedded hardware.

Example two: RPI

This Raspberry PI application shows how to run F´ in an embedded context by running on the Raspberry PI (a $35 embedded Linux computer). This application shows you how to get started on embedded projects with cross-compiling, drivers, and more. The Raspberry Pi was chosen because it is commercially available for a low price and runs Linux.

Tutorials

F´ provides several tutorials in order to help understand and develop within the framework. These tutorials cover basic component creation, system and topology design, tooling, and more. These tutorials are available at docs/Tutorials/README.md.

Getting Help with F´

As F´ becomes a community centered product line, there are more items available from the community at large.

You can join the mailing list at https://groups.google.com/d/forum/fprime-community.

The F´ community GitHub Organization contains third party contributions, more documentation of flight software development, and more! https://github.com/fprime-community.

You can open issues with this repository at: https://github.com/nasa/fprime/issues

F´ Features

F´ has the following key features that enable robust embedded system design.

Reusability

F´'s component-based architecture enables a high degree of modularity and software reuse.

Rapid Deployment

F´ provides a complete development ecosystem, including modeling tools, testing tools, and a ground data system. Developers use the modeling tools to write high-level specifications, automatically generate implementations in C++, and fill in the implementations with domain-specific code. The framework and the code generators provide all the boilerplate code required in an F´ deployment, including code for thread management, code for communication between components, and code for handling commands, telemetry, and parameters. The testing tools and the ground data system simplify software testing, both on workstations and on flight hardware in the lab.

Portability

F´ runs on a wide range of processors, from microcontrollers to multicore computers, and on several operating systems. Porting F´ to new operating systems is straightforward.

High Performance

F´ utilizes a point-to-point architecture. The architecture minimizes the use of computational resources and is well suited for smaller processors.

Adaptability

F´ is tailored to the level of complexity required for small missions. This makes F´ accessible and easy to use while still supporting a wide variety of missions.

Analyzability

The typed port connections provide strong compile-time guarantees of correctness.

F´ Release Notes

Release 1.0:

  • This is the initial release of the software to open source. See the license file for terms of use.

Release 1.01

  • Updated contributor list. No code changes.

Release 1.1

  • Created a Raspberry Pi demo. Read about it here
  • Added a tutorial here
  • Updated Svc/BufferManager with bug fix
  • Fixed a bunch of shell permissions

Release 1.2

  • Better MagicDraw Plugin
  • Prototype CMake build system. See: CMake Documentation
  • Mars Helicopter Project fixes migrated in
  • Python 3 support added
  • Gse refactored and renamed to Gds
  • Wx frontend to Gds
  • UdpSender and UdpReceiver components added
  • Purged inaccurate ITAR and Copyright notices
  • Misc. bug fixes

Release 1.3

  • New prototype HTML GUI
  • Python packages Fw/Python and Gds
  • Refined CMake and fprime-util helper script
  • Better ground interface component
  • Integration test API
  • Baremetal components

Release 1.4

  • Ref app no longer hangs on Linux exit
  • GDS improvements:
    • File Uplink and Downlink implemented
    • GDS supports multiple active windows
    • Usability improvements for EVRs and commands
  • CMake improvements:
    • Baremetal compilation supported
    • Random rebuilding fixed
    • Missing Cheetah templates properly rebuild
    • Separate projects supported without additional tweaks
  • Updated MemAllocator to have:
    • "recoverable" flag to indicate if memory was recoverable across boots
    • size variable is now modifiable by allocator to indicate actual size
    • This will break existing code that uses MemAllocator
  • Updated CmdSequencer
    • Uses new MemAllocator interface

Release 1.5

  • Documentation improvements
  • F´ Project restructuring
  • Refactored fprim-util
    • Replaced redundant targets with flags e.g. build-ut is now build --ut
    • Added info command
    • Bug and usability fixes
  • GDS Improvements
    • Prototype GDS CLI tool
    • Project custom dashboard support
  • Array, Enum type support and examples
  • Code linting and bug fixes
Owner
NASA
Read about NASA's Open Data initiative here: https://www.nasa.gov/open/ & Members Find Instructions here: http://nasa.github.io/
NASA
Comments
  • Errors Issue

    Errors Issue

    I am working on the testing section of my CLEMOps component, and I get this error when I try to run make ut. I haven't started working on the tests themselves, but I think I have everything setup, including the blank testing functions. https://github.com/brhs17/fprime/tree/MOpAgg makeUTCLEMOps

  • make impl Command Not Recognized

    make impl Command Not Recognized

    My name is Benjamin and I am a new member on Cornell Cislunar Explorers. I have been working thorough the math component tutorial, and at step 2.4.1 I cannot get the make impl command to create any stubs.

    I run the command in the Ref/MathSender directory, and get the result:

    make: *** No rule to make target 'impl'. Stop.

    I built the component without any problems, and have failed to find anything like misnamed files.

  • RPI Demo ./runBoth.sh

    RPI Demo ./runBoth.sh

    I am having an issue running the runBoth.sh file after compiling the RPI demo.

    I have made the RPI demo successfully, and am now trying to run the script runBoth.sh in the RPI directory. However, this is giving me the following error:

    ./scripts/run_pi.sh: 31: ./scripts/run_pi.sh: Syntax error: end of file unexpected (expected "fi")

    And then the program just hangs and does not terminate. I looked at the run_pi.sh file and could not find the problem. Any ideas what I should do to fix the script or if I may have installed something incorrectly setting up?

  • lestarch: installing dependencies where necessary, checking for other…

    lestarch: installing dependencies where necessary, checking for other…

    … dependencies

    | | | |:---|:---| |Originating Project/Creator| | |Affected Component| | |Affected Architectures(s)| | |Related Issue(s)| | |Has Unit Tests (y/n)| | |Builds Without Errors (y/n)| | |Unit Tests Pass (y/n)| | |Documentation Included (y/n)| |


    Change Description

    Installs:

    1. SBT, when needing to build fpp

    Checks for (existing installation:

    1. fprime-util (for autocoder dependencies)
    2. python3
    3. java
  • lestarch: integrate FPP and CMake

    lestarch: integrate FPP and CMake

    | | | |:---|:---| |Originating Project/Creator| | |Affected Component| | |Affected Architectures(s)| | |Related Issue(s)| | |Has Unit Tests (y/n)| | |Builds Without Errors (y/n)| | |Unit Tests Pass (y/n)| | |Documentation Included (y/n)| |


    Change Description

    Initial CMake + FPP refactor. CMake cleanup. Autocoder subsystem drafted.

    Rationale

    FPP for the win.

    Testing/Review Recommendations

    Only the build works, other functions will come soon!

    Future Work

    impl testimpl dict ... ...

  • Import/tlm packetizer

    Import/tlm packetizer

    | | | |:---|:---| |Originating Project/Creator| @timcanham | |Affected Component| Svc/TlmPacketizer | |Affected Architectures(s)| All | |Related Issue(s)| | |Has Unit Tests (y/n)| y | |Builds Without Errors (y/n)| y | |Unit Tests Pass (y/n)| y | |Documentation Included (y/n)| y |


    Change Description

    This PR contains the Svc/TlmPacketizer component and updates to the autocoder scripts to support generating packet C++ code. It is not the final delivery; there are some dependency issues to sort out, and the packetizer script isn't fully complete. This is meant to deliver the component and scripts to avoid diverging too much.

    Rationale

    This is a useful alternative to Svc/TlmChan if fixed packets make more sense.

    Testing/Review Recommendations

    The Ref application is tested to show it runs normally. You can exercise the SET_LEVEL command with a 0 argument and see the LevelSet evr and SendLevel channel.

    Future Work

    The dependency issues discovered during development need to be fixed, and the full end-to-end testing would need to be completed.

  • fixed handling of redefined messages field types in Gds and GroundInterface

    fixed handling of redefined messages field types in Gds and GroundInterface

    | | | |:---|:---| |Originating Project/Creator|GT1/Georgia Tech | |Affected Component| Svc/GroundInterface | |Affected Architectures(s)| None | |Related Issue(s)| None | |Has Unit Tests (y/n)| N | |Builds Without Errors (y/n)| Y | |Unit Tests Pass (y/n)| Y | |Documentation Included (y/n)| Y |


    Change Description

    Edited the GroundInterface component to use the compilation flags defining the Packet Descriptor. Edited the Gds to use the configuration manager's types when encoding and decoding commands, events, telemetry, parameters, and packet headers.

    Rationale

    Fixes bug where configuring message fields in deployments causes the Gds to be unable to communicate with the deployment. The compilation flags for configuring message fields are necessary on certain platforms with limited memory to reduce memory usage.

    Testing/Review Recommendations

    A deployment should be made that edits the (compilation flag, config manager field) pairs described in the included Gds/docs/README.md file are changed. This deployment should be able to have successful exchanges of commands, events, parameters, and telemetry. There should also be builds containing individual changes to each flag to ensure that all fields are set correctly.

    Future Work

    The FwEnumStoreType flag is confirmed to break the communications with the Gds when it is changed from an I32. I do not know how to change the way this type is serialized since it is defined in the fprime/common/models/serialize/enum_type.py file which I don't believe has access to the configuration manager from the Gds.

    There may be additional fields that can be configured with compilation flags, but will still cause issues with encoding and decoding that will need to be handled correctly to avoid broken communications.

  • MagicDraw18 SP6 on Windows velocity runtime failure

    MagicDraw18 SP6 on Windows velocity runtime failure

    Hello,

    We are running the fprime magicDraw plugin on MagicDraw18 SP6 Windows. We installed the JPL plugin and got the Component Autocoder to appear on toolbar. However when pressing Auto Generate Component/Port/Topology XML we get the following error:

    screen shot 2019-02-02 at 1 12 37 pm

    All of the XML files in AutoXML are generated but empty. Have you seen this issue before? What do you suggest we do next?

    Any help is greatly appreciated. Thank you!

  • lestarch: refactored IPv4 drivers

    lestarch: refactored IPv4 drivers

    | | | |:---|:---| |Originating Project/Creator| Infrastructure | |Affected Component| Drv | |Affected Architectures(s)| N/A | |Related Issue(s)| | |Has Unit Tests (y/n)| y | |Builds Without Errors (y/n)| y | |Unit Tests Pass (y/n)| y | |Documentation Included (y/n)|y |


    Change Description

    Refactors SocketIpDriver into 3 specific drivers TcpClient, TcpServer, and Udp.

    Rationale

    More reusability.

    Testing/Review Recommendations

    Future Work

    Need to fix re-connection code.

  • Installation Guide Clarifications (Virtual Env Troubleshooting, Werkzeug Import Error)

    Installation Guide Clarifications (Virtual Env Troubleshooting, Werkzeug Import Error)

    A couple clarifications/additions I thought might be helpful after running through the installation guide myself (I don't think any of these changes are urgent):

    Possible Clarifications

    • Changing cd <path/to/fprime/checkout> to cd <path to fprime checkout>, to be clear that there isn't a folder called fprime/checkout
      • This should already be clear to most Git users but IMO would be slightly clearer if changed

    Errors Encountered (Add to Troubleshooting?)

    I ran the tutorial on a Ubuntu 18.04 VM (run via Vagrant/VirtualBox on a Windows 10 machine). The VM was run in headless mode (i.e. without a GUI, used via SSH).

    • While installing F', I ran into an error when trying to create the virtual environment via python3 -m venv ./fprime-venv in a shared folder. The error read as follows:

      Error: [Errno 71] Protocol error: 'lib' -> '/vagrant_data/<...folder path...>/fprime-venv/lib64'
      

      I eventually solved this by following this StackOverflow post and moving to the (non-shared) home directory; I'm not sure if this error is Vagrant-specific or not, but creating the virtual environment folder in a non-shared folder fixed the error.

      It might be worth noting to not try running this command in a shared folder if problems arise.

    • While testing the installation by running fprime-gds -g html -d <path/to/fprime/checkout>/Ref after a successful build, I encountered the following error:

      Error: While importing "fprime_gds.flask.app", an ImportError was raised:
      
      Traceback (most recent call last):
      File "/home/vagrant/fPrimeTut/fprime-venv/lib/python3.6/site-packages/flask/cli.py", line 240, in locate_app
      __import__(module_name)
      File "/home/vagrant/fPrimeTut/fprime-venv/lib/python3.6/site-packages/fprime_gds/flask/app.py", line 12, in <module>
      import flask_uploads
      File "/home/vagrant/fPrimeTut/fprime-venv/lib/python3.6/site-packages/flask_uploads.py", line 26, in <module> from werkzeug import secure_filename, FileStorage
      ImportError: cannot import name 'secure_filename'
      
      [ERROR] Failed to run application: python3 -u -m flask run. Error: python3 stopped with code 2 sooner than 2 seconds.
      

      I'm still not sure what the solution to this is (updating requirements.txt didn't fix it).

  • Segmentation fault when running RPI demo

    Segmentation fault when running RPI demo

    After completing the RPI demo step by step: https://github.com/nasa/fprime/blob/master/RPI/README.md

    I get an immediate segmentation fault error when running the RPI binary on the raspberry pi. Ground station is running successfully when I do this and does not register any messages/telemetry from the RPI. Here is the output:

    Screen Shot 2020-01-30 at 4 55 20 PM
  • PRI* macros not defined for VxWorks

    PRI* macros not defined for VxWorks

    | | | |:---|:---| |F´ Version| 55c199d4ddeffdce15c2d4e446c156954770aa3e| |Affected Component| VxWorks 7.0 |

    Problem Description

    Receive several of these errors when compiling for VxWorks 7.0

    ~/fprime/Fw/Types/PolyType.cpp: In member function 'void Fw::PolyType::toString(Fw::StringBase&, bool) const':
    ~/fprime/Fw/Types/PolyType.cpp:617:66: error: expected ')' before 'PRIu8'
                     (void) snprintf(valString, sizeof(valString), "%" PRIu8 " ", this->m_val.u8Val);
                                    ~                                 ^~~~~~
                                                                      )
    

    How to Reproduce

    1. Compile for VxWorks 7.0

    Expected Behavior

    Compile without these errors.

  • lestarch: adding rate group documentation

    lestarch: adding rate group documentation

    | | | |:---|:---| |Originating Project/Creator| | |Affected Component| | |Affected Architectures(s)| | |Related Issue(s)| | |Has Unit Tests (y/n)| | |Builds Without Errors (y/n)| | |Unit Tests Pass (y/n)| | |Documentation Included (y/n)| |


    Change Description

    Adding rate group documentation to fix: #1291

  • Unanticipated Regenerations

    Unanticipated Regenerations

    | | | |:---|:---| |F´ Version| | |Affected Component| |

    Problem Description

    Ref occasionally regenerates the build-cache between the build and the installation step. Why?

    Reports of regeneration of AC files if they are touched. Why?

  • Recover Seed File for CI

    Recover Seed File for CI

    | | | |:---|:---| |F´ Version| | |Affected Component| |

    Problem Description

    Randomized test seed-history files are not recovered making debugging and reproduction difficult or impossible.

  • CI All Things!

    CI All Things!

    | | | |:---|:---| |F´ Version| | |Affected Component| |

    Feature Description

    More improvements that can be made to CI!

    • [ ] Various FW_CONFIG options
    • [ ] Baremetal support
    • [ ] RPI CI reboot on failure: the RPI CI setup often fails for reasons unknown that a reboot of the pi fixes. It could auto reboot on failure and require less hand-holding.

    ...more will be added

  • FileUplink packet sequence repeat and CRC

    FileUplink packet sequence repeat and CRC

    | | | |:---|:---| |F´ Version| 3.0 | |Affected Component| Svc/FileUplink |

    Feature Description

    Add duplicate packet detection based on sequence number and don't add to CRC computation

    Rationale

    If the radio link is marginal, a radio can do a retry and send the same packet. In that case, you get the following warning:

    FileUplink_PacketOutOfOrder: Received packet 342 after packet 342
    

    The repeated packet still gets added to the CRC computation, so even with a successful retry, you get this warning at the end:

    FileUplink_BadChecksum: Bad checksum value during receipt of file XXXXX: computed 0x6A4F6972, read 0x92A51AAA
    

    The update would to be to not update the CRC only in the case of a repeated packet sequence number. This wouldn't be to try to track all cases of dropped and retried packets.

Embedded, self-hosted swagger-ui for go servers

swaggerui Embedded, self-hosted Swagger Ui for go servers This module provides swaggerui.Handler, which you can use to serve an embedded copy of Swagg

Apr 13, 2022
Embedded javascript server-side renderer for Golang

v8ssr Embedded javascript server-side renderer for Golang. Useful for static server-side rendering. This does not attempt to polyfill node or browser

Jan 13, 2022
godesim Simulate complex systems with a simple API.

godesim Simulate complex systems with a simple API. Wrangle non-linear differential equations while writing maintainable, simple code. Why Godesim?

Mar 5, 2022
Moby Project - a collaborative project for the container ecosystem to assemble container-based systems
Moby Project - a collaborative project for the container ecosystem to assemble container-based systems

The Moby Project Moby is an open-source project created by Docker to enable and accelerate software containerization. It provides a "Lego set" of tool

May 14, 2022
IBus Engine for GoVarnam. An easy way to type Indian languages on GNU/Linux systems.

IBus Engine For GoVarnam An easy way to type Indian languages on GNU/Linux systems. goibus - golang implementation of libibus Thanks to sarim and haun

Feb 10, 2022
Distributed Systems 2021 -- Miniproject 3

Mini_Project3 == A Distributed Auction System == You must implement a distributed auction system using replication: a distributed component which hand

Dec 1, 2021
A simple tool to send binary data over a serial port. Designed for use with my retro computer systems.

Colin's Transfer Tool This is a really basic tool to transfer firmware files to my retro computer systems over a serial port. This removes the need fo

Dec 21, 2021
Ghdl - A much more convenient way to download GitHub release binaries on the command line, works on Win & Unix-like systems

ghdl Memorize ghdl as github download ghdl is a fast and simple program (and als

Apr 24, 2022
Software of development with Golang
Software of development with Golang

Go-Simple-Rest-Api Description This repository is a Software of Development with Go,Mux,etc Installation Using Go 1.16.3 Server preferably. DataBase U

Dec 13, 2021
Core Brightgate Software Stack

Brightgate Product Software Directories Directory Description base/ Resource and Protocol Buffer message definitions build/ Scripts to do with buildin

Sep 25, 2021
software keyboard for TinyGo
software keyboard for TinyGo

tinykb tinykb is a software keyboard for TinyGo. To use tinykb, it is necessary to implement the driver.Displayer interface. It is still an alpha vers

Jan 14, 2022
The Bhojpur BSS is a software-as-a-service product used as an Business Support System based on Bhojpur.NET Platform for application delivery.

Bhojpur BSS - Business Support System The Bhojpur BSS is a software-as-a-service product used as an Business Support System based on Bhojpur.NET Platf

Dec 30, 2021
Antch, a fast, powerful and extensible web crawling & scraping framework for Go

Antch Antch, inspired by Scrapy. If you're familiar with scrapy, you can quickly get started. Antch is a fast, powerful and extensible web crawling &

Apr 6, 2022
Entitas-Go is a fast Entity Component System Framework (ECS) Go 1.17 port of Entitas v1.13.0 for C# and Unity.

Entitas-Go Entitas-GO is a fast Entity Component System Framework (ECS) Go 1.17 port of Entitas v1.13.0 for C# and Unity. Code Generator Install the l

Feb 7, 2022
Tanzu Framework provides a set of building blocks to build atop of the Tanzu platform and leverages Carvel packaging

Tanzu Framework provides a set of building blocks to build atop of the Tanzu platform and leverages Carvel packaging and plugins to provide users with a much stronger, more integrated experience than the loose coupling and stand-alone commands of the previous generation of tools.

May 6, 2022
Highly customizable archive and index framework for EPITA
Highly customizable archive and index framework for EPITA

epitar.gz Highly customizable archive and index framework for EPITA. Get started

Apr 12, 2022
GoC2 - MacOS Post Exploitation C2 Framework
GoC2 - MacOS Post Exploitation C2 Framework

goc2 c2 client/server/paylod GoC2 - MacOS Post Exploitation C2 Framework Custom C2 for bypassing EDR and ease of use.

Jan 14, 2022
The High Code Framework (low-code for devs)

hof - the high code framework The hof tool tries to remove redundent development activities by using high level designs, code generation, and diff3 wh

May 4, 2022
A toaster component for hogosuru framework
A toaster component for hogosuru framework

Toaster component for hogosuru Toaster implementation for hogosuru How to use? Create a hogosurutoaster.Toaster or attach it to a hogosuru container a

Mar 24, 2022