Skip to content

System architecture

flowchart TB
  subgraph apps [Applications]
    UI[Gateway dashboard]
    VPN[kaonic-vpn TUN]
    PTT[Audio PTT plugin]
    ATAK[ATAK bridge plugin]
    MAV[rns-mavlink FC or GC]
  end

  subgraph mesh [Mesh]
    RNS[Reticulum Transport]
    KR[kaonic-reticulum KaonicCtrlInterface]
  end

  subgraph radio [Radio service]
    CTRL[kaonic-ctrl UDP 9090]
    GRPC[gRPC 50051 Device and Radio]
    COMMD[kaonic-commd]
  end

  subgraph phy [PHY]
    RF215[AT86RF215 modules 0 and 1]
  end

  UI --> RNS
  VPN --> RNS
  PTT --> RNS
  ATAK --> RNS
  MAV --> RNS
  RNS --> KR
  KR --> CTRL
  UI --> COMMD
  GRPC --> COMMD
  CTRL --> COMMD
  COMMD --> RF215

Layers

  1. Applications talk Reticulum (embedded Transport) and/or HTTP. They do not bit-bang SPI.
  2. kaonic-reticulum serializes Reticulum packets, LDPC-encodes them into up to three radio frames, and calls RadioClient::transmit.
  3. kaonic-ctrl is a UDP MessagePack protocol (CTRL_PATTERN = 0xBACE), default server 0.0.0.0:9090.
  4. kaonic-commd owns the HAL (kaonic-radioradio-rf215) and also serves gRPC on 50051.
  5. Radio channels are configured through RadioConfig (frequency, spacing, and channel number).

Process topology on a shipped image

Yocto image kaonic-st-image-core installs kaonic-init, kaonic-comm (kaonic-commd, kaonic-factory, Wi-Fi mode), and kaonic-gateway (kaonic-gateway, kaonic-installer).

Typical systemd units:

  • kaonic-init.service — serial, hostname, SSID
  • kaonic-commd.service — radios
  • kaonic-factory.service — factory API
  • kaonic-wifi-mode.service — AP/STA
  • hostapd.service — AP
  • kaonic-gateway.service — dashboard + mesh + VPN
  • kaonic-installer.service — plugin/OTA HTTP on 8682

Development vs device

On a host without /etc/kaonic/kaonic_serial (or non-Linux), the gateway can run webapp-only and skip radio/transport init. Dummy radio backends exist in kaonic-radio for GUI/iperf work.