Directory Structure

The FSDK archive consists of several directories, each containing different Components and tools.

Root Directory

Show the Root Directory
fsdk-22.2
├── Documentation
├── GNDSW
├── Licences
├── OBSW
├── readme.txt
├── release.txt
├── Tooling
└── version.txt

The top level of the FSDK archive contains the following 5 main sub-directories.

The root directory structure
Directory Description

Documentation

Contains tutorials, how-to guides, feature guides, and reference material

GNDSW

'Ground Software' - contains the tmtclab ground software and Python API

Licences

Licences for 3rd Party Software

OBSW

Onboard software - contains pre-made Components, the FSDK framework, and several sample Deployments

Tooling

Contains the FSDK command-line interface tool, codegen

Documentation

The Documentation directory contains tutorials, how-to guides, feature guides, and reference material.

Show the Documentation Directory
Documentation/FSDK
├── Getting Started
├── Tutorials
├── How-to Guides
├── Feature Guides
└── Reference Material
The Documentation directory structure
Directory Description

Getting Started

A short guide helping you install and start using FSDK.

Tutorials

Comprehensive lessons designed to teach you how to use FSDK. It contains several basic tutorials, Hello World, and intermediary tutorials, Developing Components.

How-to Guides

Step-by-step instructional documents that help you to achieve a specific task.

Feature Guides

Detailed documentation that explain how to use specific features of the FSDK anatomy.

Reference Material

Contains reference docs such as the FSDK User Manual, Component Type and Deployment anatomies, and Service definitions.

GNDSW

The GNDSW directory contains the tmtclab distribution and Python API. The Python API is used to interface with FSDK.

GNDSW/
├── python
└── TMTCLab
The GNDSW directory structure
Directory Description

python

Python client library for tmtclab

TMTCLab

tmtclab distribution

Licences

The Licences directory contains the licences for third-party software used in FSDK.

Show the Licence Directory
Licences/
├── Args4j.txt
├── CException.txt
├── CMock.txt
├── Freemarker.txt
├── FreeRTOS.txt
├── GCC.txt
├── HMAC-SHA.txt
├── JNA.txt
├── LittleFS.txt
├── purejavacomm_jtermios.txt
├── SHA.txt
├── tiny-AES-c.txt
├── UFFS.txt
└── Unity.txt

OBSW

The OBSW directory contains the onboard software source code, toolchains, and tools.

Show the OBSW Directory
OBSW/
├── Source
├── Toolchains
└── Tools
The OBSW directory structure
Directory Description

Source

Onboard software source code: framework, pre-madeComponents, and sample Deployments

Toolchains

Toolchains for specific platforms. Contains arm-none-eabi by default

Tools

Scripts, tools, and utilities. Contains the CMock and Unity test framework software from ThrowTheSwitch.org

Source

Source contains the onboard software source code comprising platform support packages, the framework, libraries of Components and example Deployments.​

Show the Source Directory
OBSW/Source/
├── aardvark
├── acs_adcs_deployment
├── acs_adcs_interface
├── amos
├── app
├── build_system
├── core
├── demo_aardvark
├── demo_bbb
├── demo_gs_a3200
├── demo_kryten
├── demo_linux
├── demo_linux_dist_1
├── demo_linux_dist_2
├── demo_linux_server
├── demo_nanoobcv2
├── demo_na_pc15
├── demo_pi
├── demo_sirius
├── framework
├── freertos
├── fs
├── gs_a3200
├── kryten
├── kryten_failsafe
├── kryten_primary
├── legacy_tutorial1
├── legacy_tutorial2
├── legacy_tutorial3
├── linux
├── littlefs
├── nanoobcv2
├── na_pc15
├── na_pc15_bootloader
├── posix
├── rtems
├── sirius
└── unity
The Source directory structure
Directory Description Type

Aardvark

I2C interface for Linux platforms using the Aardvark host adapter from Total Phase.

Component Library

acs_adcs_deployment

This Deployment can be used to generate symbols for interacting with the ACS ADCS2020 subsystem.

There is no need to generate source code from this Deployment as it’s not intended to be built to a binary.

Rather, its generated ext/acs_adcs_deployment.h header allows access to the ADCS2020’s `InterfaceProxy Parameters and Actions.

Sample Deployment

acs_adc`s_interface

This directory contains a Component interface to the AAC Clyde Space ADCS2020 subsystem.

The included source code implementation only exists to help with maintenance and allow automated Component generation.

The contained InterfaceProxy Component Type shouldn’t be instantiated.

Component Library

amos

This directory contains AMOS: a simple cooperative multi-tasking scheduler. This is intended for low-resource systems or systems that require a high-level of control.

Component Library

app

This directory contains pre-made application Components. It contains:

  • Architecture-agnostic high-level Components

  • Subsystem interfacing components

  • Data handling and automation components

Component Library

build_system

Make files for building to binary files for different targets, e.g. Linux, RTEMS, FreeRTOS

Configuration

core

This directory contains the core definitions for GenerationOne.

Although core does not contain any code, it must be built to an empty library for consistency.

Component Library

demo_aardvark

This Deployment for Linux demonstrates the use of a Total Phase Aardvark device for I2C interfacing. By default, the Deployment provides access to a Clyde Space 3U EPS.

Sample Deployment

demo_bbb

Pre-made Deployment for the Beagle Board Black

Sample Deployment

demo_gs_a3200

This directory contains a demonstration Deployment for the GomSpace Nanomind A3200 with a range of key software Components.

Sample Deployment

demo_kryten

Kryten OBC sample Deployment.

Tools for programming this Deployment onto an ACS Kryten OBC are available in the kryten/tools directory.

The process is described in detail in the ACS Kryten Platform Guide section of the FSDK User Manual.

Sample Deployment

demo_linux

This directory contains a demonstration Deployment for Linux with a range of key software Components.

Sample Deployment

demo_linux_dist_1

Based off of the demo_linux, this Deployment covers distributed systems. dist_1 is used as the Initator Deployment.

Sample Deployment

demo_linux_dist_2

Based off of the demo_linux, this Deployment covers distributed systems. dist_2 is used as the Target Deployment.

Sample Deployment

demo_linux_server

Based off of the demo_linux, this Deployment contains a TCP Server Component

Sample Deployment

demo_nanoobcv2

Skylabs Nano-OBCv2 sample Deployment

Sample Deployment

demo_na_pc15

Nanoavionics PC-15 sample Deployment

Sample Deployment

demo_pi

Raspberry Pi I2C interfacing​ sample Deployment

Sample Deployment

demo_sirius

ACS Sirius OBC sample Deployment

Sample Deployment

framework

This directory contains the abstraction framework software. This library is used by onboard software images to permit software portability.

It contains:

  • The underlying framework for handling Components and Services

  • Low-level Components for interfacing and protocol handling

Many Components are architecture specific

This is dependent on:

  • an operating system support library (e.g. FreeRTOS, POSIX)

  • a board support library (e.g. Nanomind, Linux)

  • the core library

Component Library

freertos

This directory contains the FreeRTOS operating system with ports for supported target platforms.

Currently, FreeRTOS 9.0.0 is being used.

This is dependent on:

  • Core

  • A suitable platform (e.g. the kryten library for ACS Kryten targets)

It includes: - The operating system support library for FreeRTOS - The FreeRTOS source (including platform-specific ports)

Component Library

fs

Scripts, tools and utilities.

Component Library

gs_a3200

Onboard software source code: framework, Components, sample Deployments

Component Library

kryten

This directory contains the platform support library for the ACS Kryten OBC

Dependencies:

  • Core

Component Library

kryten_failsafe

Kryten OBC failsafe sample Deployment.

Tools for programming this Deployment onto an ACS Kryten OBC are available in the kryten/tools directory.

The process is described in detail in the ACS Kryten Platform Guide section of the FSDK User Manual.

Sample Deployment

kryten_primary

Kryten OBC primary sample Deployment.

Tools for programming this Deployment onto an ACS Kryten OBC are available in the kryten/tools directory.

The process is described in detail in the ACS Kryten Platform Guide section of the FSDK User Manual.

Sample Deployment

legacy_tutorial1

Deprecated tutorial Deployment. This has been replaced by the hello_world_1 tutorial located at: Documentation/Tutorials/the_basics/hello_world_1

Tutorial

legacy_tutorial2

Deprecated tutorial Deployment. This has been replaced by the hello_world_2 tutorial located at: Documentation/Tutorials/the_basics/hello_world_2

Tutorial

legacy_tutorial3

Deprecated tutorial Deployment. This has been replaced by the hello_world_3 tutorial located at: Documentation/Tutorials/the_basics/hello_world_3

Tutorial

linux

This directory contains the support library for the generic Linux platform. GenerationOne treats Linux as a "hardware platform" rather than an OS. The "OS" for Linux is usually POSIX.

Dependencies:

  • Core

Component Library

littlefs

This directory contains the support library for the LittleFS file system.

Component Library

nanoobcv2

This directory contains the platform support library for the Skylabs Nano-OBCv2

Component Library

na_pc15

This directory contains the platform support library for the NanoAvionics PC1.5

Dependencies:

  • Core

Component Library

na_pc15_bootloader

Bootloader for the NanoAvionics PC1.5. This Deployment is required for bootloading images on the NA PC1.5 platform. It hosts the bootloader Component and the static configuration store Components that the bootloader Component needs.

Sample Deployment

posix

This directory contains the support library for the generic POSIX OS. GenerationOne treats POSIX as an operating system as it provides tasking and synchronisation services.

Dependencies:

  • Core

  • A suitable platform (e.g. Linux)

Component Library

rtems

This directory contains the OS support project for RTEMS. This includes tailoring for each of the different platforms.

This is dependent on:

  • core

  • The underlying platform

Component Library

sirius

This directory contains the platform support project for Sirius. At the moment this is empty as there is nothing necessary to support the platform.

This is dependent on:

  • (Nothing)

Component Library

unity

This directory contains the CMock and Unity test framework software from ThrowTheSwitch. The CMock and Unity frameworks are located in ../../Tools/CMock and ../../Tools/Unity directories (relative to the unity directory).

The copy2lib.sh script in the ../../Tools directory will copy the latest source from CMock, Unity, and CException to the source directories in this library project.

This is dependent on:

  • the GOMspace driver library (for Nanomind builds)

Component Library

Anatomy of a GenerationOne Project

A typical GenerationOne project can have the following directory structure:

Show the Framework Directory Structure
framework/
├── arch
├── bin
├── build
├── config`
├── doc
├── inc
├── jtag
├── lib
├── make
├── src
├── test
├── Makefile
└── readme.txt

This is an example project structure. Some projects may differ.

For example arch and jtag may be missing from a newly created project as they are not a requirement.

The framework directory structure
Directory Description

arch

Architecture-specific source trees

bin

Output directories for binaries (e.g. unit tests), per target

build

Intermediate build files, generated by build, per target

config

Build configuration files, one per target

doc

Generated documentation

inc

Main include (header) file tree

jtag

Files to support programming targets

lib

Output directories for libraries, per target

make

Files to support the build system

src

Main source (code) file tree

test

Unit test file tree, code only