Bluetooth LE transport + accuracy/UX enhancements (v2.1) - #5
Merged
Conversation
Firmware (flipper/rf_logger.c, application.fam): - Stream the CSV telemetry over BLE serial (ble_profile_serial) alongside USB. - Advertising keepalive that self-heals after a BLE stack restart. - On-screen BT status (BT:off / BT:adv / BT:ok); requires the `bt` service. Android — new BLE transport (android/plugin/FlipperBlePlugin.java): - GATT serial bridge mirroring FlipperSerialPlugin's connect/disconnect/data/ status API so the web UI treats USB and BLE as interchangeable. - Correct little-endian service/TX UUIDs, TX bound by indication (not the flow-control notify char), GATT cache refresh before discovery, API 33+ characteristic callback, LE-forced pairing, device picker with remembered address for one-tap reconnect. Android — solver/UX: - Transport picker (USB / Bluetooth); RSSI exponential smoothing; selectable environment / path-loss exponent n; leave-one-out outlier rejection; live capture-geometry hint; session persistence. - Fix: the live stream no longer forces the Allocation tab, so the Triangulator view stays put while data streams. Docs / CI: - README, SETUP, SECURITY, CONTRIBUTING updated for dual-transport; stale Build/ paths corrected. Added CHANGELOG, CODE_OF_CONDUCT, CI workflow (python compile + spectrum.csv validate + JS syntax + ufbt FAP build), and dependabot (github-actions). - Rebuilt artifacts: rf_logger.fap (v2.1) and RF_Triangulator.apk. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- flipper/README.md: remove the removed v1 StateMenu preset flow; document the two-state machine, BLE serial streaming, and the BT status line. - android/README.md: add FlipperBlePlugin; replace the inaccurate plugin method table (startStream/stopStream/getLatestRssi never existed) with the real connect/disconnect/isConnected + data/status API shared by both transports; document the transport picker and BLE UUID/indication details. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds a Bluetooth LE transport so the Flipper streams to the Android app fully wirelessly (no cable), plus a batch of accuracy/UX enhancements and repo hardening. USB remains the default; BLE is additive and shares the exact same data path.
Verified end-to-end on real hardware (Flipper Zero "flip_Rpaneor" + Android 16 / API 36): sustained 5 Hz CSV streaming over BLE with the ordered sample counter incrementing losslessly.
Firmware (
flipper/rf_logger.c)ble_profile_serial) alongside USB CDC, simultaneously.BT:off/BT:adv/BT:ok); now requires thebtservice; FAP → v2.1.Android — new BLE transport (
android/plugin/FlipperBlePlugin.java)GATT serial bridge mirroring
FlipperSerialPlugin'sconnect/disconnect/data/statusAPI, so the web UI treats USB and BLE as interchangeable. Getting this reliable required fixing, in order:onCharacteristicChanged(…, byte[])callback (the deprecated one returns null on Android 13+).Android — solver / UX
n, leave-one-out outlier rejection, live capture-geometry hint, session persistence.Docs / CI
Build/…paths corrected.CHANGELOG.md,CODE_OF_CONDUCT.md, CI workflow (Python compile +spectrum.csvvalidation + JS syntax +ufbtFAP build),dependabot.yml.artifacts/rf_logger.fapandartifacts/RF_Triangulator.apk.🤖 Generated with Claude Code