Offline launcher appliance for Betaflight, iNav, and AM32 on Raspberry Pi OS.
- Fullscreen Python launcher (
launcher/main.py) with large touch-friendly buttons. - Mouse wheel / keyboard navigation support.
- Offline firmware cache + index generator.
- One-shot installer for fresh Pi OS (
scripts/install.sh). - Kiosk startup using systemd + Xorg + Chromium.
git clone <your-repo-url> ~/configapp
cd ~/configapp
sudo ./scripts/install.sh
sudo rebootInstaller tasks:
- Installs dependencies (Chromium, Tk, Xorg, dfu-util, etc.).
- Copies repo to
~/configappfor target user. - Creates and enables
field-configurator@<user>.service. - Adds udev rules and group memberships for USB serial/DFU access.
- Builds initial firmware index and runs first-run checks.
cd ~/configapp
git pull
sudo ./scripts/install.shThe installer is designed to be idempotent and safe to rerun.
This project does not bundle upstream configurators by default.
- Download official Betaflight Configurator offline/static release.
- Extract contents into
tools/betaflight/webapp/soindex.htmlexists. - Launch from the main launcher.
- Download official iNav Configurator offline/static release.
- Extract contents into
tools/inav/webapp/soindex.htmlexists. - Launch from the main launcher.
Use one of:
- Drop executable at
tools/am32/am32-toolandchmod +xit. - Or place static web app into
tools/am32/webapp/.
Directory layout:
firmware-cache/
betaflight/<target>/<version>/*.hex
inav/<target>/<version>/*.hex
Generate/update index:
python3 tools/firmware_indexer.pyThis writes firmware-cache/firmware_index.json with target/version/path/sha256 metadata.
The launcher includes Offline Firmware Manager to inspect cache and import files from mounted USB media.
Run:
./scripts/self_test.shChecks include compile validation, service unit sanity, tool artifact presence, dfu-util, and tty permission display.
- WebSerial/WebUSB browser prompts may still appear depending on Chromium policy.
- Upstream tool releases must be manually downloaded once and copied to local storage.
- Device naming can vary (
ttyACM*vsttyUSB*) by USB adapter/driver.
See docs/troubleshooting.md for common fixes.