Commit Graph
275 Commits
Author SHA1 Message Date
James Rich 399c66504d fix(mirror): keep the palette region list a val for type-resolved detekt 2026-10-02 19:25:23 -05:00
James Rich 0005e2ba28 Merge remote-tracking branch 'origin/main' into screen-mirror-poc 2026-10-02 19:14:34 -05:00
James Rich 455083c246 feat(remote-shell): mesh terminal for the firmware DMShell module (#6862) 2026-10-02 20:16:57 +00:00
James Rich ca9a6317dd style(mirror): apply spotless to the mirror manager test 2026-10-02 13:16:06 -05:00
James Rich 250fe78ca9 Merge remote-tracking branch 'origin/main' into screen-mirror-poc 2026-10-02 12:39:52 -05:00
James Rich 850e2d3112 test(data): cover stalled session normalization racing a newer session (#7508) 2026-09-30 20:06:47 +00:00
James Rich 364fd9d9dd fix: audit leftovers (neighbor-info interval unit, shared constants) (#7481) 2026-09-30 04:44:33 +00:00
James Rich 9617eb46c0 chore: drop audit leftovers (dead preview, unused Koin, duplicated code) (#7477) 2026-09-30 03:24:54 +00:00
James Richandgithub-merge-queue ad9f4afe9c chore: Scheduled updates (Graphs, Baseline Profile) (#7479)
Co-authored-by: github-merge-queue <118344674+github-merge-queue@users.noreply.github.com>
2026-09-30 03:08:24 +00:00
James Rich 54f2bd6dc5 fix(service): keep the last-heard write off the inbound lock (#7474) 2026-09-30 02:36:25 +00:00
James Rich 461e215a2d fix(service): stop the inbound pipeline waiting on node writes (#7464) 2026-09-29 23:47:46 +00:00
James Rich 733647bcbe refactor(data): page the log export, remove dedupe leftovers (#7449) 2026-09-29 20:58:28 +00:00
James Rich 9567583cbb fix: run type-resolved detekt in CI and stop swallowing cancellation (#7431) 2026-09-29 18:22:01 +00:00
James Rich e6cf616bdb refactor: keep one copy of shared code across platforms (#7432) 2026-09-29 15:56:05 +00:00
James Rich 693ee19f3f refactor: tighten module boundaries and trim expect/actual (#7436) 2026-09-29 14:24:34 +00:00
James Rich f77bc3d07a fix: data correctness fixes from the Android audit (#7429) 2026-09-29 11:29:30 +00:00
James Rich b63e566280 fix: keep WiFi credentials, addresses and coordinates out of app logs (#7419) 2026-09-29 11:27:47 +00:00
James Rich 1b128ffc78 build: clear Kotlin warnings, time out hung tests, drop dead config (#7435) 2026-09-29 10:48:55 +00:00
James Rich 6279d660d3 fix(database): delete old mesh logs in bounded batches (#7423) 2026-09-29 10:11:25 +00:00
James Rich 1da95127f1 fix(discovery): keep an unheard node's SNR distinct from 0 dB (#7422) 2026-09-29 10:11:24 +00:00
James Rich c7ff9b4ef0 fix(settings): stop profile import dropping Mesh Beacon settings (#7416) 2026-09-29 10:11:16 +00:00
James Rich a78e7b8ac6 feat(auto): notification messaging on Android Auto (#7417) 2026-09-28 21:18:22 +00:00
James Rich 667d9f34dc fix(notifications): put every notification on its own channel and tap target (#7415) 2026-09-28 18:49:27 +00:00
James Rich a7d74d2261 fix(position): send no coordinates with a position request when we have none (#7361) 2026-09-25 15:43:30 -05:00
James Rich 5f82d40914 feat(messaging): record signing and ack proof on reactions (#7339) 2026-09-24 22:56:05 +00:00
James Rich 9f5d5c6a21 fix(messaging): clarify the message filter controls (#7324) 2026-09-24 09:37:46 +00:00
James Rich f38732aa21 feat(messaging): show whether a delivery receipt was proven (#7284) 2026-09-24 09:03:15 +00:00
James Rich 1cfb857703 refactor(connections): give Demo Mode its own section (#7326) 2026-09-23 21:55:20 +00:00
James Rich 7b73301385 feat(mqtt): surface a refused subscription from the broker (#7290) 2026-09-21 18:06:37 +00:00
James Rich 6f99bab842 fix(connection): name the transport in handshake stall reports (#7276) 2026-09-20 17:44:49 +00:00
James Rich 185be53ad4 fix(mirror): follow main after merge 2026-09-19 17:03:00 -05:00
James Rich 720c4c246f Merge remote-tracking branch 'origin/main' into screen-mirror-poc
# Conflicts:
#	core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/FromRadioPacketHandlerImplTest.kt
#	gradle/libs.versions.toml
2026-09-19 17:02:26 -05:00
James Rich 8bd80e9852 fix(nodes): the direct filter no longer returns MQTT nodes (#7256) 2026-09-19 20:33:54 +00:00
James Rich 5f242f6505 feat(telemetry): surface lightning, PM status and soil-water metrics (#7237) 2026-09-19 17:36:36 +00:00
James Rich bf4cf1c88b refactor: construct protos through Builder for buildersOnly protobufs (#7115) 2026-09-18 04:08:03 +00:00
James Rich 92adb816f9 fix(messaging): key conversations to channel identity, not slot index (#7162) 2026-09-15 15:18:36 +00:00
James Rich 91b6adc340 fix(storeforward): dedupe a router replay by original_id (#7158) 2026-09-14 20:32:51 +00:00
James Rich 8f4723cbb2 fix(node): keep a contact's public key when a different one arrives (#7118) 2026-09-11 16:20:25 +00:00
James RichandClaude Opus 5 db83c03df6 refactor(mirror): harden rect reassembly and extract the compositor
Third adversarial review pass over the client side.

Rect reassembly moves out of DisplayMirrorManagerImpl into
MirrorRectCompositor: the manager was carrying two unrelated state
machines and 14 methods. Every rect field is now validated before
anything is allocated (total_size is device-controlled), geometry is
latched from the chunk at offset 0 so a later chunk cannot transpose
the blit, continuations must match the buffer that was actually
allocated rather than their own claim, and bounds use the subtraction
form because rect_x + rect_width overflows for hostile values. A rect
that omits width or height covers the full panel in that axis.

remoteKeyInput no longer swallows modified keys, so Cmd+Q, Ctrl+C and
Alt+Tab stay with the desktop instead of being forwarded to the device.

MirrorFrameRenderer tracks colorized runs as a raw Int with a sentinel
rather than a boxed Color?, and MirrorFrame.hashCode includes the
format so a mono and an RGB565 frame of the same size cannot collide.

Drops mirror_view_only, orphaned since MUI gained remote input.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 11:19:43 -05:00
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