Skip to content

ssc338q_waybeam_generic: wfb-ng with waybeam in place of majestic - #185

Merged
openipc-ai merged 2 commits into
masterfrom
ssc338q-waybeam
Oct 7, 2026
Merged

openipc-ai merged 2 commits into
masterfrom
ssc338q-waybeam

Conversation

@openipc-ai

Copy link
Copy Markdown
Contributor

The first image to ship waybeam (OpenIPC/waybeam), the open-source SigmaStar encoder. Firmware packages it as general/package/waybeam, but no defconfig in firmware or here selects it: it depends on !BR2_PACKAGE_MAJESTIC, and every SigmaStar defconfig has Majestic. openipc.org's /low-latency describes Waybeam and gives no way to try it. With this, the installer offers it on SSC338Q (OpenIPC/website#390, OpenIPC/website#404).

The profile

devices/ssc338q_waybeam_generic is the ssc338q wfb-ng build with these changes:

  • Out: MAJESTIC, MAJESTIC_FONTS, MAJESTIC_WEBUI. Waybeam serves its own page and HTTP API on :80. Also out: ADAPTIVE_LINK (see below) and the UBI rootfs (NOR only for the MVP).
  • In: BR2_PACKAGE_WAYBEAM=y, BR2_OPENIPC_VARIANT="waybeam".
  • /etc/waybeam.json (overlay over the package default): outgoing.server is unix://rtp_local. That is the abstract unix datagram socket S98wifibroadcast starts wfb_tx -U rtp_local on, per wfb-ng's open_unix_socket_for_rx. RTP, 60 fps, 8000 kbps.
  • S94unixqlen raises net.unix.max_dgram_qlen to 256 before S95waybeam and S98wifibroadcast. waybeam's README requires this for unix://: the default of 10 datagrams is less than one 60 fps frame, and the depth is fixed when wfb_tx creates its socket. The package's own S95waybeam doesn't do it; I'll send that upstream to firmware separately.
  • The excludes list is the ssc338q wfb-ng one. A smoke target is added, since this is the one variant without Majestic.
  • Published as ssc338q_waybeam_generic-nor.tgz. The customizer pins that as the upgrade URL.

Not verified yet: needs a camera

CI proves it builds and fits. Before calling it usable, on an SSC338Q with IMX335 or IMX415 check:

  • waybeam starts, /tmp/waybeam.log is clean, and wfb_tx runs.
  • a wfb-ng ground station shows H.265.
  • the :80 page answers.
  • msposd. wifibroadcast asks localhost/api/v1/config.json for the frame size, which is Majestic's path; waybeam serves /api/v1/config. msposd gets an empty -z until that is reconciled.
  • adaptive-link. It was left out until it is shown to drive waybeam's /api/v1/set?video0.bitrate=. The alink_drone & line wifibroadcast adds to rc.local then finds no binary and does nothing.

Independent of #184 (the fpv→wfbng rename); either can land first.

@qodo-free-for-open-source-projects

Copy link
Copy Markdown

PR Summary by Qodo

Add an SSC338Q Waybeam wfb-ng firmware profile

✨ Enhancement ⚙️ Configuration changes 🕐 20-40 Minutes

Grey Divider

AI Description

• Adds a NOR-only SSC338Q wfb-ng image using Waybeam instead of Majestic.
• Routes Waybeam RTP to wfb_tx and raises the Unix datagram queue limit before startup.
• Adds CI smoke coverage and pins the profile’s upgrade URL; camera validation remains outstanding.
Diagram

graph TD
  Profile["SSC338Q profile"] --> Queue["Queue setup"] --> Encoder["Waybeam encoder"] --> Socket(["RTP socket"]) --> Transmitter["wfb_tx"] --> Ground["Ground station"]
  Encoder --> Web["Web API"]
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Make the existing SSC338Q profile encoder-selectable
  • ➕ Could reduce duplication of the SSC338Q package list and excludes.
  • ➖ Complicates mutually exclusive package selection and makes a separately discoverable, publishable image harder to maintain.

Recommendation: A separate profile is the better fit for an independently published Waybeam edition and leaves the Majestic image unchanged. Reconcile the msposd API path and adaptive-link behavior before presenting it as hardware-validated; moving the queue setup into the upstream Waybeam package can follow separately.

Files changed (6) +217 / -0

Enhancement (1) +67 / -0
ssc338q_waybeam_generic_defconfigDefine the SSC338Q Waybeam NOR image +67/-0

Define the SSC338Q Waybeam NOR image

• Selects Waybeam and wfb-ng in place of Majestic and adaptive-link, sets the Waybeam variant, and omits UBI rootfs output.

devices/ssc338q_waybeam_generic/br-ext-chip-sigmastar/configs/ssc338q_waybeam_generic_defconfig

Other (5) +150 / -0
ci-matrix.pyAdd Waybeam profile to CI smoke targets +1/-0

Add Waybeam profile to CI smoke targets

• Includes the new, Majestic-free profile in representative smoke builds.

.github/scripts/ci-matrix.py

S94unixqlenIncrease the Unix datagram queue before streaming starts +15/-0

Increase the Unix datagram queue before streaming starts

• Sets net.unix.max_dgram_qlen to 256 before Waybeam and wfb_tx start so their RTP socket is created with sufficient queue depth.

devices/ssc338q_waybeam_generic/general/overlay/etc/init.d/S94unixqlen

waybeam.jsonConfigure Waybeam video and wfb-ng transport +114/-0

Configure Waybeam video and wfb-ng transport

• Enables 60 fps, 8 Mbps RTP output to the local rtp_local Unix socket and serves Waybeam's page and API on port 80.

devices/ssc338q_waybeam_generic/general/overlay/etc/waybeam.json

customizer.shPin upgrades to the Waybeam NOR release +6/-0

Pin upgrades to the Waybeam NOR release

• Sets the device upgrade URL to the dedicated ssc338q_waybeam_generic-nor.tgz artifact.

devices/ssc338q_waybeam_generic/general/overlay/usr/share/openipc/customizer.sh

ssc338q_waybeam.listApply SSC338Q wfb-ng image exclusions +14/-0

Apply SSC338Q wfb-ng image exclusions

• Excludes the same unused sensor binaries and kernel modules as the existing SSC338Q FPV profile.

devices/ssc338q_waybeam_generic/general/scripts/excludes/ssc338q_waybeam.list

@qodo-free-for-open-source-projects

qodo-free-for-open-source-projects Bot commented Oct 7, 2026 •

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (2) 📎 Requirement gaps (0) 🎨 UX issues (0) 🔗 Cross-repo conflicts (0) 📜 Skill insights (0)

Grey Divider


Action required

1. Waybeam profile breaks device naming 📘 Rule violation ⚙ Maintainability
Description
devices/ssc338q_waybeam_generic uses generic where the device naming convention requires a -
component. Its matching defconfig registers that name as a device target, leaving the new profile
outside the per-device naming scheme.
Code

devices/ssc338q_waybeam_generic/br-ext-chip-sigmastar/configs/ssc338q_waybeam_generic_defconfig[R39-42]

+BR2_OPENIPC_SOC_VENDOR="sigmastar"
+BR2_OPENIPC_SOC_MODEL="ssc338q"
+BR2_OPENIPC_SOC_FAMILY="infinity6e"
+BR2_OPENIPC_VARIANT="waybeam"
Evidence
The new defconfig registers a device directory whose name has no vendor-model component; the
repository's registration guidance specifies that component for per-device directories.

CLAUDE.md: Use the Required Device Directory and Defconfig Naming: CLAUDE.md: Use the Required Device Directory and Defconfig Naming: CLAUDE.md: Use the Required Device Directory and Defconfig Naming: CLAUDE.md: Use the Required Device Directory and Defconfig Naming: CLAUDE.md: Use the Required Device Directory and Defconfig Naming: CLAUDE.md: Use the Required Device Directory and Defconfig Naming: CLAUDE.md: Use the Required Device Directory and Defconfig Naming: CLAUDE.md: Use the Required Device Directory and Defconfig Naming
devices/ssc338q_waybeam_generic/br-ext-chip-sigmastar/configs/ssc338q_waybeam_generic_defconfig[39-42]
README.md[156-175]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The new device directory and matching defconfig use `generic` instead of a vendor-model component.
## Fix Focus Areas
- devices/ssc338q_waybeam_generic/br-ext-chip-sigmastar/configs/ssc338q_waybeam_generic_defconfig[39-42]
## Recommended Fix
If this targets a named board, rename the device directory and defconfig to a matching `<soc>_<flavor>_<vendor>-<model>` name and update references to the target. If it is board-agnostic, register it through the repository's generic-profile layout.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Waybeam defaults are copied into the overlay ✓ Resolved
Description
etc/waybeam.json replaces the package configuration with a full copy, although outgoing.server
is the device-specific socket setting identified by this profile. When firmware defaults change, the
copied system, sensor, audio, and other unrelated settings remain pinned in this device overlay.
Code

devices/ssc338q_waybeam_generic/general/overlay/etc/waybeam.json[R2-5]

+  "system": {
+    "webPort": 80,
+    "overclockLevel": 1,
+    "verbose": false
Evidence
The added JSON includes extensive settings unrelated to the socket integration, while the repository
requires common configurations to remain in firmware and device overlays to contain only necessary
files.

CLAUDE.md: Keep Device Overlays Limited to Necessary Per-Device Files: CLAUDE.md: Keep Device Overlays Limited to Necessary Per-Device Files: CLAUDE.md: Keep Device Overlays Limited to Necessary Per-Device Files: CLAUDE.md: Keep Device Overlays Limited to Necessary Per-Device Files: CLAUDE.md: Keep Device Overlays Limited to Necessary Per-Device Files: CLAUDE.md: Keep Device Overlays Limited to Necessary Per-Device Files: CLAUDE.md: Keep Device Overlays Limited to Necessary Per-Device Files: CLAUDE.md: Keep Device Overlays Limited to Necessary Per-Device Files
devices/ssc338q_waybeam_generic/general/overlay/etc/waybeam.json[2-45]
devices/ssc338q_waybeam_generic/general/overlay/etc/waybeam.json[46-113]
README.md[156-160]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The device overlay copies Waybeam's reusable configuration to change its outgoing socket.
## Fix Focus Areas
- devices/ssc338q_waybeam_generic/general/overlay/etc/waybeam.json[1-114]
## Recommended Fix
Keep the common Waybeam defaults in firmware and apply the device-specific `outgoing.server` value through a small supported override or configuration step, rather than replacing the whole JSON file.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. New Waybeam profile lacks an inventory row 📘 Rule violation ⚙ Maintainability
Description
The new ssc338q_waybeam_generic defconfig adds a registered build target without a corresponding
entry in the README device table. The table still lists other SSC338Q devices but gives readers no
entry identifying this newly offered profile.
Code

devices/ssc338q_waybeam_generic/br-ext-chip-sigmastar/configs/ssc338q_waybeam_generic_defconfig[R39-43]

+BR2_OPENIPC_SOC_VENDOR="sigmastar"
+BR2_OPENIPC_SOC_MODEL="ssc338q"
+BR2_OPENIPC_SOC_FAMILY="infinity6e"
+BR2_OPENIPC_VARIANT="waybeam"
+BR2_OPENIPC_FLASH_SIZE="16"
Evidence
The defconfig creates a new SSC338Q Waybeam target, but the README inventory lists other SSC338Q
entries and contains no Waybeam entry.

CLAUDE.md: Document New Devices in the README Tables: CLAUDE.md: Document New Devices in the README Tables: CLAUDE.md: Document New Devices in the README Tables: CLAUDE.md: Document New Devices in the README Tables: CLAUDE.md: Document New Devices in the README Tables: CLAUDE.md: Document New Devices in the README Tables: CLAUDE.md: Document New Devices in the README Tables: CLAUDE.md: Document New Devices in the README Tables
devices/ssc338q_waybeam_generic/br-ext-chip-sigmastar/configs/ssc338q_waybeam_generic_defconfig[39-43]
README.md[17-120]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The newly registered Waybeam profile has no row in the README device inventory.
## Fix Focus Areas
- devices/ssc338q_waybeam_generic/br-ext-chip-sigmastar/configs/ssc338q_waybeam_generic_defconfig[39-43]
- README.md[17-120]
## Recommended Fix
Add a row identifying the supported SSC338Q Waybeam target and its applicable hardware in the README device table.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Tip of the day
💡 Did you know, you can route each severity your way: inline, summary, both, or drop

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

Comment thread devices/ssc338q_waybeam_generic/general/overlay/etc/waybeam.json Outdated
The first image to ship waybeam (OpenIPC/waybeam), the open-source
SigmaStar encoder firmware packages as general/package/waybeam and no
defconfig selected: it depends on !MAJESTIC, and every SigmaStar
defconfig has majestic. This one is the ssc338q wfb-ng build with
majestic, its fonts and the WebUI out (waybeam serves its own page and
API on :80) and waybeam in, so /low-latency can offer it
(OpenIPC/website#390).

- /etc/waybeam.json sends RTP to unix://rtp_local, the abstract socket
  S98wifibroadcast starts wfb_tx on (-U rtp_local), at 60 fps, 8 Mbps.
- S94unixqlen raises net.unix.max_dgram_qlen to 256 before waybeam and
  wfb_tx start: the default 10 is less than one frame, and the depth is
  fixed when the receiving socket is created.
- adaptive-link is left out until it is shown to drive waybeam's
  /api/v1/set; the rc.local line wifibroadcast adds for it then finds
  no alink_drone and does nothing.
- NOR only, published as ssc338q_waybeam_generic-nor.tgz, which
  openipc.org's installer offers as the waybeam edition.
- A smoke target, since it is the one variant without majestic.
…r, not a copy of the whole config

A full /etc/waybeam.json in the overlay pinned every package default,
so a change to them in firmware would never reach this build. The
customizer now sets only what the build changes -- the wfb_tx socket,
RTP, 60 fps, 8 Mbps -- with waybeam's own json_cli, at first boot and
before S95waybeam.
@openipc-ai
openipc-ai merged commit c31fe75 into master Oct 7, 2026
130 of 133 checks passed
@openipc-ai
openipc-ai deleted the ssc338q-waybeam branch October 7, 2026 20:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant