Commit Graph
211 Commits
Author SHA1 Message Date
James RichandClaude Fable 5 ebcba96042 feat(debug): render MUI dirty-rect streams (Format.RGB565)
DisplayMirrorManager reassembles RGB565 rect chunks (sequence, geometry,
and panel-bound validation) and composites them into a persistent
little-endian RGB565 canvas emitted per completed rect; the renderer gains
a true-color branch using the same run-length row drawing. Mono frames are
untouched.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-09 11:19:43 -05:00
James RichandClaude Fable 5 21bc10affb refactor(debug): pre-PR review fixes for the mirror
Circular D-pad ring replaces the cross cluster (wedge hit-testing with a
radial dead band, hold-to-repeat, per-wedge semantics, haptics), keyboard
capture becomes an explicit chip with tap-to-toggle, and taps on touch
devices forward real panel coordinates (long-press = SELECT, matching the
physical touch driver). Manager gains reset() (wired to ViewModel creation
and disconnect), a palette region cap, and first-chunk geometry pinning;
renderer uses bit-replicated RGB565 and run-length row drawing with the
pixel resolver extracted pure and tested; KeyUp of captured keys is
consumed; ViewModel moved to its own file; all strings localized; the
stray .bak test file is gone.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-09 11:19:43 -05:00
James RichandClaude Fable 5 3c8e94b40b feat(debug): color-accurate mirror via DisplayPalette
DisplayMirrorManager reassembles FromRadio.display_palette chunks
(signature-keyed, defaults captured on the offset-0 chunk) into a
MirrorPalette; frames carry palette_signature and the renderer resolves
each pixel through the region table (last overlapping region wins,
matching firmware precedence) with RGB565 conversion, falling back to
monochrome when the referenced palette hasn't arrived. Renderer split
into MirrorFrameRenderer.kt.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-09 11:19:43 -05:00
James RichandClaude Fable 5 e34dea7ac1 refactor(debug): harden screen mirror from adversarial review
Manager: validate format (MONO_VLSB only) and geometry (width/height must
describe exactly total_size bytes) so malformed device input can't reach
aspectRatio and crash; unit tests for reassembly, drops, restarts.
AdminController: setDisplayMirror/sendInputEvent become non-suspend
immediate sends (teardown-safe, input never queues behind bulk admin) and
gain requestDisplayFrame. Mirror tab: render each frame once into a 1:1
ImageBitmap scaled with FilterQuality.None (kills the fractional-scale
seams), gate controls on connection state, reset the toggle on disconnect,
stop the stream on tab dispose and ViewModel clear, add a one-shot Refresh,
inject AdminController/ConnectionStateProvider instead of RadioController.
Dispatch: display_frame test coverage incl. revoked-session.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-09 11:19:43 -05:00
James RichandClaude Fable 5 c33fa4d225 feat(debug): PoC live device screen mirror + remote D-pad (Mirror tab)
Consumes the DisplayFrame PoC protobufs (2.99.0-screen-mirror-poc-SNAPSHOT
from mavenLocal, useMavenLocal committed on this branch): DisplayMirrorManager
reassembles FromRadio.display_frame chunks into MirrorFrame snapshots,
AdminController gains setDisplayMirror + sendInputEvent, and the Debug panel
gains a Mirror tab rendering the device's 1bpp framebuffer live with a D-pad
driving the firmware InputBroker. PoC: tab strings deliberately unlocalized.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-09 11:19:43 -05:00
James Rich 1fe80834e1 fix(network): never send heartbeat nonce 1, the firmware NodeInfo-ping trigger (#7078) 2026-09-08 22:56:12 +00:00
James Rich 0d15707f9a fix(firmware): move firmware artifact fetching onto the R2 hosts (#7073) 2026-09-08 15:06:06 -05:00
James Rich 5a0cb5cf41 feat: mark nodes not heard since the LoRa config changed (#7055) 2026-09-07 10:44:43 +00:00
James Rich a5f7c5d917 feat(firmware): factory erase through the OTAFIX bootloader when the drive advertises it (#7058) 2026-09-06 14:46:59 +00:00
Jeremiah K e2d033ae6f fix(connections): scope region warnings to the active connection (#7015) 2026-09-03 19:31:17 +00:00
James RichandClaude Sonnet 5 60019db962 feat(ui): blend noise floor into signal quality rating (design#15) (#7009)
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-02 20:21:51 +00:00
James Rich ca231c3db0 ci: clear the recurring warnings and dead job the workflow logs carry (#6982) 2026-08-31 17:08:38 +00:00
James Rich ab0c8d4dba fix(ai): bound assistant messages at what the send path will actually encode (#6970) 2026-08-30 23:35:04 +00:00
James RichandClaude Fable 5 ce137a7f5e feat(discovery): suppress beacon invitations for channels the radio already has (#6964)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-30 18:05:25 +00:00
James Rich f78268581e feat(messaging): mark unread, swipe row actions, and pinned conversations (#6857) 2026-08-24 20:44:07 +00:00
James Rich 1ab4da0fa6 feat(messaging): per-contact drafts and a quieter composer (#6851) 2026-08-24 10:43:59 -05:00
James Rich e549d24ea3 fix(messaging): clear and suppress notifications for the conversation on screen (#6849) 2026-08-24 15:01:46 +00:00
James RichandClaude Fable 5 5447674bb4 fix(connection): extend BLE handshake deadlines while config progress flows (#6848)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-24 06:18:42 -05:00
James RichandClaude Sonnet 5 99075c5dbe feat(hardware): fetch the maintenance UF2 manifest from the API, digest-pinned (#6803)
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-21 17:58:51 +00:00
James RichandClaude Sonnet 5 4651c85361 feat(hardware): fetch bootloader OTA quirks from the API, seeded from the bundled asset (#6802)
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-21 13:23:32 +00:00
James Rich 2df817db7a fix(node): make node-list search case-insensitive for non-ASCII names (#6753) 2026-08-17 17:37:23 +00:00
James RichandClaude Opus 5 19bb682c9c feat(firmware): add nRF52/RP2040 factory erase and OTAFIX bootloader upgrade over USB (#6526)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 16:43:07 +00:00
Jeremiah K e9d09a3380 fix(lifecycle): harden packet admission and transport ownership (#6716) 2026-08-15 21:44:17 +00:00
99c5be7858 fix(notifications): stop repeated protected position alerts (#6700)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Co-authored-by: James Rich <james.a.rich@gmail.com>
2026-08-14 13:08:40 +00:00
simulationstation 2f387369c1 fix(messaging): disambiguate sender-scoped packet IDs (#6624) 2026-08-13 13:50:37 +00:00
simulationstation b4bedd92fc fix(settings): restore channels from device profiles (#6618) 2026-08-13 12:10:18 +00:00
James RichandClaude Fable 5 b3e3804b78 fix(database): recover from Room's silent connection-pool wedge (#6608) (#6658)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 03:08:37 +00:00
James RichandClaude Opus 5 492afbde5c fix(telemetry): repoint 1-Wire temperature at per-channel fields, adopt ADC voltage (#6653)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-12 19:39:54 +00:00
James RichandClaude Fable 5 dda971b5ce fix(messaging): time out orphaned "Sending..." messages into a retryable failure (#6630)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 02:10:30 +00:00
James RichandClaude Opus 5 bfb66eb988 fix(data): stop "1 hour" log retention from wiping the MeshLog table (#6635)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 02:01:32 +00:00
simulationstation fd8414abe3 fix(database): delete nodes and metadata atomically (#6623) 2026-08-12 01:36:57 +00:00
simulationstation 7a7bc50a75 fix(messaging): wait for shared-contact routing ACK (#6603) 2026-08-11 15:35:07 +00:00
James RichandClaude Opus 5 1dac0f3ac9 fix(service): unwedge the inbound pipeline behind stale-Connected zombies (#6587)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-06 00:57:35 +00:00
Jeremiah K 2f191868e9 fix(database): recover wedged observer pools (#6540) 2026-08-01 21:39:16 +00:00
Jeremiah K 064c8c92d9 fix(nodes): suppress alerts during initial database sync (#6538) 2026-08-01 21:38:51 +00:00
James RichandClaude Opus 5 07d253130b refactor(di): replace Koin string qualifiers with distinct types (#6522)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-30 20:56:07 +00:00
James RichandClaude Opus 5 2d20cd8a47 fix(ui): give rx_snr real presence semantics end to end (#6523)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-30 16:40:41 +00:00
James RichandClaude Opus 5 d714b22571 chore(deps): bump protobufs to 2.7.26.140 (optional rx_time) (#6510)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-07-29 18:08:24 +00:00
James RichandClaude Fable 5 be320ec622 fix(mqtt): stop reporting transport failures as credential rejections (#6506)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-28 20:09:23 -05:00
James RichandClaude Fable 5 8a4e2e3567 fix(connections): send set_time_only at MyNodeInfo instead of onNodeDbReady (#6503)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-28 23:14:19 +00:00
James RichandClaude Opus 5 39139398e6 fix(model): rssi explicit presence for protobufs 2.7.26.138 (#6498)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-07-28 21:12:28 +00:00
James RichandClaude Opus 5 6c32af9a84 test: revive 80 dormant tests in eight abstract Common*Test classes (#6501)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-07-28 21:11:42 +00:00
James RichandClaude Opus 5 b4105e3e3f fix(event): honor disabled node events, gate brand URLs, observe the manifest (#6499)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-07-28 21:09:13 +00:00
James RichandClaude Opus 5 5235b8fc51 fix(logging): stop reporting expected conditions as crashes (#6470)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-07-27 18:53:54 +00:00
James RichandClaude Opus 5 2d63db8dd4 fix(mqtt): scope user-CA trust to the MQTT connection (#6464)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-07-27 16:35:32 +00:00
James RichandClaude Opus 5 01cd54907d chore: harden untrusted-input handling and diagnostic output (#6441)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-07-26 08:32:07 -05:00
James RichandClaude Opus 5 237c0674c4 fix(data): don't let coarse position reports overwrite precise coordinates (#6432)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 19:24:46 +00:00
James RichandClaude Opus 5 c75223c43a fix(messaging): use mesh time for message timestamps and grouping (#6422)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-07-24 22:12:13 +00:00
James RichandClaude Opus 4.8 bfbf74df1e fix(channels): store channel set per-device to stop cross-device duplicates (#4623) (#6409)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 13:57:39 -05:00
Jeremiah K 8cf8214162 fix(hardware): throttle repeated catalog refreshes for cache misses (#6399) 2026-07-24 16:29:10 +00:00