Skip to content

Bridge & Live Logging

Choose a tag to compare

@erickramer42 erickramer42 released this 23 Oct 06:11
· 300 commits to main since this release

The first release that streams data. A session-scoped callback API delivers frames from a transport's worker thread, a mock transport generates them, and the Qt bridge carries them to a live frame log.

What's new

Core

  • Frame callbacks per session: qttune_register_frame_callback and qttune_unregister_frame_callback, keyed by the (callback, user_data) pair. Duplicates are deduplicated, unregistering twice is safe, and dispatch runs from a snapshot of the list, so a callback can register or unregister itself without deadlocking.
  • A mock transport: a mock:// URI starts a worker thread that emits a synthetic 8-byte frame every 50 ms (20 frames a second). qttune_session_start begins streaming, so creating a session and starting it are separate steps, and qttune_session_close stops and joins the worker before the session goes away.

Bridge and UI

  • QtTuneBridge marshals each frame from the worker thread to the GUI thread through a queued call, into a frame model behind a sort proxy (newest or oldest first).
  • The Log page streams frames live, with the sort toggle, Clear and a dropped-frames count.
  • A dark theme (a Theme singleton), a Home page with a session status card and a Start session button, and themed buttons. The app uses Qt Quick Controls' Basic style, because the native Windows style discarded custom control backgrounds.

CI

  • Every job builds on Qt 6.12.0 LTS. Qt 6.8 and earlier reference the AGL framework, which the Xcode 26 SDK removed, so the macOS build needed the upgrade.
  • Windows installs Qt with aqtinstall from its master branch, because the 3.3.0 release mishandles Qt 6.11+'s Windows repository layout.

Tests

23 cases: 17 for the core (status strings, the version format, init and shutdown, argument checks, callback registration and deduplication, dispatch, mock delivery, the worker thread's identity, a callback unregistering itself mid-dispatch) and 6 for the bridge's frame path. CI builds and tests the core with no Qt installed on Ubuntu, and builds the full app on Windows and macOS; it was green on the tag commit (7dbdcec).

Known limitations

  • Mock data only: there's no real transport yet, and nothing decodes frames into values.
  • The per-frame GUI updates and the live sort keep up with the mock's 20 frames a second; faster buses will need coalesced updates.
  • Oldest-first mode doesn't follow new frames yet.
  • The session API expects one caller (the bridge).
  • No Android or iOS build has been attempted, and CI doesn't build the app on Linux.
  • Windows CI depends on the aqtinstall master pin until a release fixes the layout bug.

Full changelog: v0.1.0...v0.2.0