Files
btd700linux/docs/VALIDATION.md
T
Justin 3de4ca48e0
AppImage / build (push) Has been cancelled
AppImage / release (push) Has been cancelled
Tests / unit (de, 3.10) (push) Has been cancelled
Tests / unit (de, 3.14) (push) Has been cancelled
Tests / unit (en, 3.10) (push) Has been cancelled
Tests / unit (en, 3.14) (push) Has been cancelled
Ship AppImage with bundled GTK runtime and automated releases
2026-09-05 21:32:30 +02:00

3.9 KiB
Raw Permalink Blame History

Validation — 5 September 2026

This document separates observed hardware behavior from simulated tests. The project was developed using AI (OpenAI Codex); these results are not a warranty.

Environment

Bazzite / GNOME, Python 3.14, GTK 4.22, libadwaita 1.9. Connected BTD 700: USB 3542:3001, firmware 3.11.0.

Observed on the real device

  • Correct control-interface discovery and opening without detaching audio drivers.
  • Successful state, mode, codec, quality, transport, Auracast configuration/name and firmware-version reads. See PROTOCOL.md for response bytes.
  • Reported live state: Gaming, aptX Adaptive, 24-bit / 48 kHz, audio playing.
  • Native GTK window and registered GNOME tray item with a live status tooltip.
  • A second USB client is rejected with a clear message while the app owns the device.
  • The device owner subsequently confirmed that the app works. The individual functions exercised by the owner were not enumerated.

Automated verification

  • Protocol/controller/transport tests: command allowlist, malformed frames, response correlation, event acknowledgements, readback, capability checks, input validation, reset confirmation and password handling using a simulated device.
  • Localization tests: English/German detection, explicit CLI override, message placeholders, localized status/errors and unchanged numeric protocol data.
  • Desktop integration tests: isolated installation/uninstallation and autostart behavior without changing the real user's launchers.
  • tools/check_gui.py exercised English and German windows and actual D-Bus menu events against a demo device: modes, codec, transport, connection, broadcast discovery/quality, name/password saving, encryption, closing/reopening and preserving/discarding unsaved edits.
  • Window layouts rendered and inspected at 620 × 800 and 420 × 600 pixels.
  • README screenshots captured from the real English GTK window at 620 × 880 with fictional demo data. No real USB access or generated mockups were used.
  • Extraction helper output matched the SHA256 of the original assembly used for protocol research. No vendor binaries were added to the distribution.

AppImage 0.3.0

  • Built an x86-64 image from Ubuntu 24.04 runtime packages, with bundled Python 3.12, GTK, libadwaita, libdbusmenu, SVG loading, MIME data, icons and fonts.
  • Normal FUSE startup and APPIMAGE_EXTRACT_AND_RUN=1 startup both displayed a working demo window and registered the tray on Bazzite/GNOME.
  • The bundled runtime passed the English and German form and D-Bus menu checks.
  • The AppImage read the real BTD 700 status successfully: firmware 3.11.0, Gaming, aptX Adaptive, 24-bit / 48 kHz, audio playing. No device settings changed.
  • Menu installation/removal uses isolated temporary XDG directories. Autostart tests cover persistent AppImage paths/icons, extracted AppDirs and no-FUSE mode.
  • A minimal Ubuntu test container without Python, GTK, libadwaita or libdbusmenu exercises the packaged CLI, SVG decoding, both GUI languages and D-Bus tray controls with simulated hardware. The release workflow repeats these checks.

The unit-test CI workflow runs on Python 3.10 and 3.14, in both languages. It does not run real hardware tests or claim that a particular receiver works.

Not yet systematically verified

  • Hardware writes across different firmware revisions and all individual commands.
  • Real Auracast receiver compatibility, audio quality and reconnect behavior.
  • Interactive desktops other than Bazzite/GNOME; Ubuntu GUI checks use Xvfb and a private test tray watcher, not a full GNOME or KDE desktop.

tools/check_hardware.py --run has not been executed. It deliberately interrupts audio, changes settings including the broadcast password, and attempts to restore the original values. It does not perform a factory reset and cannot perform firmware updates. Unplugging midway can prevent restoration.