dev
feat/638-top-toast
fix/589-late-reply-log-only
fix/663-triage-internal-actors
fix/652-release-prerelease-flag
feat/610-contact-card-receive
feat/619-contact-identity-uri
fix/581-ack-adoption
epic/568-export-import
fix/580-caplog-partial
release/1.5.0-beta.1
task/501-deviceui-logging
chore/542-assets2
chore/542-assets
docs/519-claudemd-web
main
release/1.4.0
feat/483-button-buzzer-ui
fix/497-mention-verbatim
fix/279-send-width
docs/478-docs-home-research
release/1.3.0
fix/443-battery-optimization-warning
fix/447-close-labeler
fix/445-windows-sqlite3-native-assets
feat/429-companion-sync
fix/395-dm-channel-send-wedge
feat/427-localize-log-share
feat/393-app-log-share
fix/share-icon-android
fix/389-back-nav
feat/385-storage-health
release/1.2.2
feat/367-store-consolidation
chore/365-cut-1.2.1
fix/363-pin-db-path
feat/351-contact-settings-menu
feat/349-window-geometry
feat/355-migration-merge
integration/290-306-335
release/1.1.2-rc.3-allplatforms
fix/309-path-len-decode
chore/298-path-logging
fix/285-ingest-timelog
fix/252-block-outgoing-dm
feat/64-observer-config
feat/batch1-ux
chore/offband-rebrand
v1.5.0-beta.1
v1.4.0
v1.3.0
v1.2.2
v1.2.1
v1.2.0
v1.1.2-rc.3-allplatforms
v1.1.2-rc.3
v1.1.2-rc.2
v1.0.0
observer-g2-rc3
observer-g2-rc4
observer-g2-rc5
observer-g2-rc6
observer-g2-rc7
observer-g2-rc8
observer-g2-rc9
v1.1.0-rc.1
v1.1.0-rc.2
v1.1.0-rc.3
v1.1.2-beta.1
v1.1.2-beta.2
v1.1.2-beta.3
v1.1.2-ble-test
v1.1.2-queuediag
v1.1.2-rc.1
v1.1.2-rc.1-b45-nearbyrep
v1.1.2-rc.1-b46-pathhash
v1.1.2-rc.1-b47-tracewidth
v1.1.2-rc.1-b48-repeatertrace
v1.1.2-rc.1-b49-maptrace
v1.1.2-rc.1-b50-tracefix
v1.1.2-rc.1-b51-originstrip
v1.1.2-rc.1-b52-channelqr
v1.1.2-rc.1-b53-viarepeater
v1.1.2-rc.1-b54-rxfed
v1.1.2-rc.1-b55-topology
v1.1.2-rc.1-b57-routeux
v1.1.2-rc.1-b58-toporeadout
v1.1.2-rc.3-b59-pathlen
${ noResults }
2 Commits (dev)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
8920cf928f |
feat(#439): read per-message RSSI from reserved2 and show it on the Path screen
Firmware #465 now writes RX RSSI into reserved2 (byte[3]) of the v3 contact-msg-recv frame as a clamped int8 dBm, 0 when unset (MyMesh.cpp:550-551). Read it in the parse instead of skipping: gate on != 0 (RSSI is always negative for a real RX, so 0 = no data), null for device-composed outgoing messages. reserved1 (byte[2]) is untouched — that's #429's outgoing flag; RSSI lives in byte[3] after the res1/res2 collision fix (#464/#465). The Message.rssi field, persistence, param-passing, and the (hidden- while-null) RSSI row on the Packet Path screen were all staged in #438, so this is just the wire read + 3 gate tests. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> |
2 months ago |
|
|
f935a48ef0 |
feat(#438): show path type + SNR on the message Path screen
Tapping a DM opens the Path screen; it now shows the RF details the app was already receiving but discarding: - SNR: captured from the v3 contact-msg-recv frame (was skipBytes(1)). Firmware sends (int8)(snr_dB*4), so dB = byte/4.0 (MyMesh.cpp:512) — the old commented-out code multiplied by 4, which was 16x wrong. - Path type: firmware sends path_len 0xFF for a direct/routed frame and the hop count for a flood (MyMesh.cpp:545). The app collapsed 0xFF->0, colliding "direct" with "flood, 0 hops". Capture the distinction into Message.isFloodRoute so the Path row reads "direct (routed)" vs "flood, N hops". - RSSI: row wired to Message.rssi but left null — the wire byte is a hardcoded reserved 0 today; populated once firmware ships it (#439). Message gains snr/rssi/isFloodRoute (nullable, additive, persisted like rxTime). 10 tests cover scaling, the 0xFF discriminator, and copyWith. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> |
2 months ago |