Modeling GlobalInterface

cyber_range was drawing into a mosaic cell, which means a slider was eating a plot slot. There was no concept of “above the grid” in Superluminal, so I added one: Superluminal::GlobalInterface(), a full-width panel whose height is measured and reserved so it never overlaps the mosaic. CyberEther #289, still open.

The first version worked and was still wrong. It did the ImGui window management on the gr-cyberether side and handed a height back to CyberEther the responsibility on the wrong side of the boundary, and not how CyberEther already handles Type::Interface. Rewrote it so Superluminal owns the window and the caller only supplies widgets. Our call site went from about twenty lines of ImGui setup to a callback body, and the upstream diff got small enough to actually review.

Windows

Five CI runs, five failures, every one a different cause:

  • Git-for-Windows’ link.exe shadowing MSVC’s
  • the Vulkan SDK installed, but not on INCLUDE
  • PKG_CONFIG_PATH joined with a Unix : on a platform where paths hold D:\
  • pkgconf treating backslashes as escape characters
  • conda activate silently overwriting PKG_CONFIG_PATH at the start of every step

None of these are findable by reading. It passes now and publishes an archive.

Installing it

The archives were a prefix tree with no instructions, which is not an install. Now each one carries install.sh: it finds your GNU Radio, checks that the bundled Python binding matches the Python your GNU Radio actually runs, installs, verifies, and can uninstall from a manifest.

Where this leaves the repo

  • v0.9.1, with archives for Linux, macOS and Windows.
  • Two upstream PRs, one merged, one open.
  • A dependency pin that means what it says.

Next: the final work product.

Repo: gr-cyberethermain Mentors: Luigi Cruz (CyberEther), Håkon Vågsether (GNU Radio).