# openipc/sbc-groundstations architecture

> Architecture diagram of the GitHub repository openipc/sbc-groundstations, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/openipc/sbc-groundstations
- Repository: https://github.com/openipc/sbc-groundstations

## Overview

This repository defines OpenIPC ground-station images for several supported boards, combining board-specific boot and system configuration with wireless-video, DVR/UI, and device-support components. The user-facing lifecycle is booting a selected image, using the ground-station services, then upgrading or resetting the installed system. The README documents flashing, boot-menu, gadget-mode, and upgrade behavior; source excerpts were unavailable, so internal component wiring is shown only where documented.

Main entry points: [`board/common/overlay/sbin/sysupgrade`](https://github.com/openipc/sbc-groundstations/blob/master/board/common/overlay/sbin/sysupgrade) (System upgrade), [`board/common/overlay/usr/sbin/gadget`](https://github.com/openipc/sbc-groundstations/blob/master/board/common/overlay/usr/sbin/gadget) (USB gadget mode), [`board/common/overlay/etc/samba/smb.conf`](https://github.com/openipc/sbc-groundstations/blob/master/board/common/overlay/etc/samba/smb.conf) (DVR storage), [`board`](https://github.com/openipc/sbc-groundstations/tree/master/board) (Board overlays)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_boot["Boot and boards"]
  node_board_overlays["Board overlays"]
  node_boot_config["Boot configuration"]
  node_boot_flow["Boot scripts<br/>[boot.cmd]"]
  node_build_configs["Board definitions"]
end

subgraph group_system["System services"]
  node_network["Network setup"]
  node_gadget["USB gadget mode"]
  node_firstboot["Factory reset"]
end

subgraph group_video["Ground-station features"]
  node_pixelpilot["Pixelpilot"]
  node_dvr_ui["DVR interface"]
  node_adaptive_link["Adaptive link"]
  node_wfb["Wi-Fi broadcast"]
  node_wfb_server["Broadcast server"]
  node_msposd["MSP OSD"]
end

subgraph group_lifecycle["Image lifecycle"]
  node_dvr_partition[("DVR storage<br/>[smb.conf]")]
  node_sysupgrade["System upgrade"]
  node_sd_card[("SD card")]
  node_emmc[("eMMC")]
end

node_operator(("Operator"))

node_operator -->|"provides image"| node_sd_card
node_sd_card -->|"boots from"| node_boot_flow
node_boot_flow -->|"writes image"| node_emmc
node_board_overlays -->|"configures boot"| node_boot_config
node_build_configs -->|"selects board"| node_board_overlays
node_operator -->|"uses ground station"| node_pixelpilot
node_operator -->|"accesses DVR"| node_dvr_partition
node_operator -->|"enables gadget mode"| node_gadget
node_gadget -->|"exposes DVR"| node_dvr_partition
node_operator -->|"requests reset"| node_firstboot
node_operator -->|"requests upgrade"| node_sysupgrade
node_sd_card -->|"supplies update"| node_sysupgrade
node_dvr_partition -->|"supplies update"| node_sysupgrade
node_sysupgrade -->|"updates system"| node_emmc
node_network -->|"configures networking"| node_gadget

click node_board_overlays "https://github.com/openipc/sbc-groundstations/tree/master/board"
click node_boot_config "https://github.com/openipc/sbc-groundstations/tree/master/board/common/overlay/boot"
click node_boot_flow "https://github.com/openipc/sbc-groundstations/blob/master/board/common/boot.cmd"
click node_network "https://github.com/openipc/sbc-groundstations/tree/master/board/common/overlay/etc/network"
click node_gadget "https://github.com/openipc/sbc-groundstations/blob/master/board/common/overlay/usr/sbin/gadget"
click node_firstboot "https://github.com/openipc/sbc-groundstations/blob/master/board/common/overlay/sbin/firstboot"
click node_pixelpilot "https://github.com/openipc/sbc-groundstations/blob/master/package/pixelpilot/files/pixelpilot"
click node_dvr_ui "https://github.com/openipc/sbc-groundstations/blob/master/package/dvrui/files/S99dvrui"
click node_adaptive_link "https://github.com/openipc/sbc-groundstations/blob/master/package/adaptive-link/files/adaptive-link"
click node_wfb "https://github.com/openipc/sbc-groundstations/tree/master/package/wifibroadcast-ng/files"
click node_wfb_server "https://github.com/openipc/sbc-groundstations/tree/master/package/wfb-server"
click node_msposd "https://github.com/openipc/sbc-groundstations/blob/master/package/msposd/files/msposd"
click node_dvr_partition "https://github.com/openipc/sbc-groundstations/blob/master/board/common/overlay/etc/samba/smb.conf"
click node_sysupgrade "https://github.com/openipc/sbc-groundstations/blob/master/board/common/overlay/sbin/sysupgrade"
click node_build_configs "https://github.com/openipc/sbc-groundstations/tree/master/configs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_board_overlays,node_boot_config,node_boot_flow,node_build_configs toneBlue
class node_network,node_gadget,node_firstboot toneAmber
class node_pixelpilot,node_dvr_ui,node_adaptive_link,node_wfb,node_wfb_server,node_msposd toneMint
class node_dvr_partition,node_sysupgrade,node_sd_card,node_emmc toneRose
class node_operator toneIndigo
```

## Components

### Boot and boards

- [Board overlays](https://github.com/openipc/sbc-groundstations/tree/master/board): `board`
- [Boot configuration](https://github.com/openipc/sbc-groundstations/tree/master/board/common/overlay/boot): `board/common/overlay/boot`
- [Boot scripts](https://github.com/openipc/sbc-groundstations/blob/master/board/common/boot.cmd): `board/common/boot.cmd`
- [Board definitions](https://github.com/openipc/sbc-groundstations/tree/master/configs): `configs`

### System services

- [Network setup](https://github.com/openipc/sbc-groundstations/tree/master/board/common/overlay/etc/network): `board/common/overlay/etc/network`
- [USB gadget mode](https://github.com/openipc/sbc-groundstations/blob/master/board/common/overlay/usr/sbin/gadget): `board/common/overlay/usr/sbin/gadget`
- [Factory reset](https://github.com/openipc/sbc-groundstations/blob/master/board/common/overlay/sbin/firstboot): `board/common/overlay/sbin/firstboot`

### Ground-station features

- [Pixelpilot](https://github.com/openipc/sbc-groundstations/blob/master/package/pixelpilot/files/pixelpilot): `package/pixelpilot/files/pixelpilot`
- [DVR interface](https://github.com/openipc/sbc-groundstations/blob/master/package/dvrui/files/S99dvrui): `package/dvrui/files/S99dvrui`
- [Adaptive link](https://github.com/openipc/sbc-groundstations/blob/master/package/adaptive-link/files/adaptive-link): `package/adaptive-link/files/adaptive-link`
- [Wi-Fi broadcast](https://github.com/openipc/sbc-groundstations/tree/master/package/wifibroadcast-ng/files): `package/wifibroadcast-ng/files`
- [Broadcast server](https://github.com/openipc/sbc-groundstations/tree/master/package/wfb-server): `package/wfb-server`
- [MSP OSD](https://github.com/openipc/sbc-groundstations/blob/master/package/msposd/files/msposd): `package/msposd/files/msposd`

### Image lifecycle

- [DVR storage](https://github.com/openipc/sbc-groundstations/blob/master/board/common/overlay/etc/samba/smb.conf): `board/common/overlay/etc/samba/smb.conf`
- [System upgrade](https://github.com/openipc/sbc-groundstations/blob/master/board/common/overlay/sbin/sysupgrade): `board/common/overlay/sbin/sysupgrade`
- **SD card**
- **eMMC**

### Other components

- **Operator**

## Connections

- Operator → SD card: provides image
- SD card → Boot scripts: boots from
- Boot scripts → eMMC: writes image
- Board overlays → Boot configuration: configures boot
- Board definitions → Board overlays: selects board
- Operator → Pixelpilot: uses ground station
- Operator → DVR storage: accesses DVR
- Operator → USB gadget mode: enables gadget mode
- USB gadget mode → DVR storage: exposes DVR
- Operator → Factory reset: requests reset
- Operator → System upgrade: requests upgrade
- SD card → System upgrade: supplies update
- DVR storage → System upgrade: supplies update
- System upgrade → eMMC: updates system
- Network setup → USB gadget mode: configures networking
