High-Speed CubeSat Software built with NASA's F Prime (F´) framework.
This repository contains the flight software for the HS2 CubeSat project, developed using the F Prime framework. F Prime is a component-driven framework designed for rapid development and deployment of spaceflight and embedded software applications.
HS2-Software/
├── .github/
│ └── workflows/ # CI/CD workflows including cpplint
├── HS2/
│ ├── IN PROGRESS**
├── lib/
│ └── fprime/ # F Prime framework (submodule)
├── .clang-format # Code formatting rules
├── .clang-tidy # Static analysis configuration
├── CPPLINT.cfg # C++ style checking configuration
├── .pre-commit-config.yaml # Pre-commit hooks
├── CMakeLists.txt # Top-level CMake configuration
└── settings.ini # F Prime project settings
- Operating System: Linux, macOS, or Windows with WSL
- Build Tools:
- CMake 3.16+
- GCC/Clang compiler with C++11 support
- Python 3.9+
- F Prime Tools:
pip install fprime-tools fprime-gds
git clone https://github.com/UWCubeSat/HS2-Software.git
cd HS2-Softwaregit submodule add https://github.com/nasa/fprime.git lib/fprime
git submodule update --init --recursivepython3 -m venv fprime-venv
source fprime-venv/bin/activate # On Windows: fprime-venv\Scripts\activate
pip install -r lib/fprime/requirements.txt
pip install fprime-tools fprime-gdsfprime-util generatefprime-util buildThis project uses multiple linters to enforce F Prime design standards:
Automatically formats C++ code according to F Prime style guidelines:
fprime-util formatStatic analysis tool for C++ code quality and design patterns:
clang-tidy <file.cpp> -- -I<include-paths>Google C++ Style Guide checker:
cpplint --recursive .Install pre-commit hooks to automatically check code before commits:
pip install pre-commit
pre-commit installThe project uses GitHub Actions for automated code quality checks:
- Cpplint Scan: Runs on every push and pull request to ensure code style compliance
-
Component Design:
- Follow the Active Component or Queued Component pattern
- Use ports for all inter-component communication
- Avoid direct function calls between components
-
Port Usage:
- Use typed ports for data exchange
- Follow input/output port conventions
- Do not circumvent the port system
-
Manager-Worker Pattern:
- Implement manager components for orchestration
- Use worker components for specific tasks
- Follow the command-response pattern
-
Coding Standards:
- 120 character line limit
- 4-space indentation
- Use
nullptrinstead ofNULL - Include braces around all control statements
cd HS2/Components
fprime-util new --component <ComponentName>Run unit tests:
fprime-util checkRun integration tests:
fprime-util check --integration- Create a feature branch from
develop - Make your changes following the coding standards
- Run linters and tests
- Submit a pull request
This project follows the licensing of the F Prime framework. See LICENSE for details.
For questions or issues, please open an issue on GitHub or contact the UW CubeSat team.