Commit Graph
4672 Commits
Author SHA1 Message Date
JakubandClaude Opus 5.5 2beb18b217 docs: messages kept on the L1's flash (Keep messages, Delete after, Delete history), Powered off and the power switch on e-ink
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 11:03:26 +01:00
JakubandClaude Opus 5.5 9b04d15da4 feat(l1): older messages from the flash log, Delete after and Delete history
Past the oldest message in a conversation, Up reads the next 12 from the log.
Pages, not a longer list: the messages screen measures its whole list every
frame. Also from the full-screen view, and for a conversation the ring has lost.

Settings > Messages > Delete after hides older messages at once and frees the
flash a segment at a time, never with the clock unset or behind the log; Delete
history clears the log and the rings. A batch is also written after 12 new
messages, as a room's backlog could leave the ring unsaved.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 10:01:29 +01:00
JakubandClaude Opus 5.5 bf7b262645 feat(l1): messages kept on flash across a power-off, and "Powered off" on e-ink
Settings > Messages > Keep messages (Off, 500, 1000, 2500 in all; off by
default; HIST_FLASH, ui-core/HistoryLog.h). Two append-only logs on the QSPI
flash, channels and DMs, restored into the RAM rings at the start. A batch is
written a minute after the first unsaved change and at shutdown, as the L1's
power switch gives no warning. Each segment has a directory of its own: a
LittleFS 1.x commit erases one of a directory's two fixed blocks every time.

E-ink panels keep their last frame, so a shutdown now leaves "Powered off" on
it and puts the controller into deep sleep.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 09:46:43 +01:00
JakubandClaude Opus 5.5 751cbc1e79 fix(home): the title bar from the first frame when the Clock page is hidden
Home starts on page 0, the Clock. render() chose whether to draw the bar
before moving on from a hidden page, so that frame had none and the next
refresh came 5 s later or on a key press.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 09:46:43 +01:00
JakubandClaude Opus 5.5 6ce3ed0ff9 fix(settings): Time zone says it's the winter time, which summer time adds an hour to
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 17:06:55 +01:00
JakubandClaude Opus 5.5 3a26a8bee7 fix: review pass - Discover's late replies dropped and its way back usable, the Gallery's newest first and faster, the network clock's toast
- Discover: a reply after its try timed out, was stopped or was overtaken
  went on to the normal handling and became the contact's route (and sent
  a path back); the last tags sent are kept and a late reply is dropped.
  Leaving Route on the L2 stops a discovery as it stops a trace.
- Discover: a route whose reply came back another way offers that way too
  (L2 There / Back, L1 a Back row), turned round into a route there, so a
  trace checks it; the Discover button no longer sits on its group.
- Screenshots: numbered one past the highest (one pass over the folder,
  not a stat per number), so one taken after a delete is still the newest.
- Gallery: the newest 300 kept whatever order the folder lists them in;
  BMP rows read in the file's order and several at a time; the thumbnail
  buffer sized to the page; the folder read once per visit; a failed
  open frees or restores the picture.
- NTP: the slot the router's server goes in emptied before joining, so a
  cached address isn't taken for it; "Clock set from the network" judged
  against the clock a tick before (SNTP has set the system time already).
- Sim: sim_scroll up stops at the top.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 16:30:19 +01:00
JakubandClaude Opus 5.5 e154a4e721 feat(l2): Gallery app (screenshots as thumbnails, full view with swipe and delete, the saved trails), the clock from NTP while WiFi is up (the router's server from DHCP first), tabs switch on release, Home apps out of Settings
- Gallery: thumbnails 30 to a page, built only while the screen is still (a decode held the loop and a scroll read as a tap)
- segmented(): CLICK_TRIG, so a swipe starting on a screen's tabs doesn't switch them
- Settings > Device > Home apps removed (hold an app on Home instead)
- platformio.ini: a note that the L2 has no microphone on GPIO15 (verified on hardware)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 15:39:56 +01:00
JakubandClaude Opus 5.5 cdc2ff25c9 feat: summer time - Settings > Summer time (Europe, North America, Australia, New Zealand) puts the clock an hour ahead and back by itself; every local time goes through tzHoursAt(), the alarm keeps its time across the change (a skipped time rings an hour later, a repeated one once)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 14:09:25 +01:00
JakubandClaude Opus 5.5 c46a0a2b55 feat(l2): keyboard - a second symbols page behind #+= with the brackets and the rest of ASCII ([ ] { } < > \ | ~ ^ ` $ and a few more)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 14:09:25 +01:00
JakubandClaude Opus 5.5 cce2798d2d feat(route): Discover - path discovery from the device, 1/3/5 tries 20 s apart, the routes found to use in the route editor
MyMesh::sendPathDiscovery() shares the request with the app's
CMD_SEND_PATH_DISCOVERY_REQ and hands the reply (the way there and back)
to the UI; PathEditor keeps up to 4 distinct routes with how often each
came. L2: Find the route under Route; L1: Discover row in Path / trace.
Docs: Discover, message routes on the map, Ask status and discovery.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 23:09:23 +01:00
JakubandClaude Opus 5.5 f4ad1bd643 feat(l2): recent packets on the map - the flow legend's tap lists the last 10 placed packets, a tap plays one again, Play all plays them in turn
PacketFlow keeps them (each with up to 3 ways it came, contacts by key
prefix) once a frontend asks, in PSRAM; the map frames a replay that's off
screen. Back on the map closes a popup first.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 22:40:30 +01:00
JakubandClaude Opus 5.5 e8553d276d fix(bot): !hops / {hops} say 'known route' as !path does, a route followed by ':' is found, {rssi} among the L2's placeholders
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 22:40:30 +01:00
JakubandClaude Opus 5.5 c1af501cc4 fix(l2): a map line starts from the middle of the own-position and node dots
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 20:42:36 +01:00
JakubandClaude Opus 5.5 80580ead54 fix: review pass - options menu room for Show route, 'known route' for a direct-routed !path, 3-byte hashes, a channel's route not from here, bot sender looked up once, no decimal times as routes
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 20:06:03 +01:00
JakubandClaude Opus 5.5 8aec54b7e5 feat(bot): a Log tab with the bot's last 32 replies (ESP32 and the L2 sim)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 19:59:19 +01:00
JakubandClaude Opus 5.5 be03297e41 test(sim): sim_test_bot and sim_test_contact_hash hooks for the bot and route checks
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 19:54:02 +01:00
JakubandClaude Opus 5.5 30ebef765f feat(bot): {path} !path (#55), {snr} {rssi} !snr, !dist, Actions by All/Fav
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 19:46:28 +01:00
JakubandClaude Opus 5.5 81c551425e feat(ui): a route written in a message shown on the map (L2 Route, L1 Show route)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 19:46:28 +01:00
JakubandClaude Sonnet 5.5 009bde0db4 fix(ui): the empty channel list says 'Fav only' when that filter hides every channel (#54)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-26 12:35:31 +01:00
JakubandClaude Sonnet 5.5 2ae55e97ac fix: review pass - storage unmount timeout, nav dial animates, dial text room, nearby name width, Simpson Enter with another key, GPS chip
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
v2.0.2
2026-10-26 10:12:56 +01:00
JakubandClaude Sonnet 5.5 e03fa7c084 fix(l2): no bright bar on the dark screen at power-on
The first frame (the sprite's default white background, black dots) came out as
a bright bar across the middle of the screen. A plain black frame now, and the
backlight stays off until it's sent: dark through the panel's reset and init
(the LP5814 keeps its state across a restart), lit with the first frame.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-25 21:33:59 +01:00
JakubandClaude Sonnet 5.5 e6ae1d63b8 fix(l2): the top button wakes the screen at once, switches it off on letting go
A press that silenced the alarm, took a screenshot or woke the screen doesn't
also switch the screen off when it's let go.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-25 21:33:59 +01:00
JakubandClaude Sonnet 5.5 9c40c83f4a fix(l2): the chat rows' preview isn't cut at the bottom
The font's line is 18 px (emoji and fallback glyphs), the subtitle label was a
fixed 15: the tails of y, g, j and emoji were cut. Now 18, the title and the
subtitle 1 px further apart; the row stays 44.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-25 21:33:59 +01:00
JakubandClaude Sonnet 5.5 52812d8235 feat(ui): a turn dial / compass rose on narrow navigation screens
navview::draw (Waypoints, trail back, Nearby, a message's location) shows a
dial beside the lines, or under them on a tall screen (portrait e-ink) where
that makes it larger: with a course a turn dial (the top is where you're
heading, the arrow points at the target, "Turn R 55"), without it the compass
rose. The 4.2" screens keep theirs. On a short screen (the 64 px OLED) the
gap under the distance and the pitch of the lines give way so the ETA is not
cut off at the bottom.

sim_nav_waypoint() opens a waypoint's navigate view from the simulator page.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-25 14:47:51 +01:00
JakubandClaude Sonnet 5.5 15ac4d8f83 feat(l2): a turn dial in the navigation bar
An arrow at the target on a round dial whose top is the way you're heading:
turn until it points up. It turns green and the ring doubles when you're
within 12 degrees. The text says how far to turn ("turn right 55") instead of
two bearings to subtract. Standing still there's no course: the arrow greys
out, the top is north and marked red, and the text keeps the bearing.

sim_nav_target() sets a target from the simulator page.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-25 14:47:51 +01:00
JakubandClaude Sonnet 5.5 c5da3ecdea fix(l2): a banner or toast doesn't wait on a sleeping screen to be hidden
LVGL's timers stand still while the screen sleeps, so a message that arrived
with wake-on-message off (or in quiet hours, or with a client connected) left
its banner up until the next wake. No banner is shown while asleep now, and
sleep() hides a banner or toast that was up.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-24 19:29:00 +02:00
JakubandClaude Opus 5.5 1552ca4383 fix(l2): the battery shows an icon, a percentage or a voltage, not the icon too
Battery display's percent and voltage modes still drew the icon before
the number. Each mode now shows one thing; the title bar no longer has a
battery level to fold away, so only the button words give way to a title.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 23:00:52 +02:00
JakubandClaude Opus 5.5 b44ee6a599 feat(status): the path hash size on Status > Radio (L2: Diag > Radio)
Bytes per repeater in a path we send (Settings > Radio > Advanced), next
to the TX power.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 23:00:52 +02:00
JakubandClaude Opus 5.5 24156769f0 fix(bot): !temp and {temp} fall back to the chip's temperature
Same gap as the screens had: the bot reply, a typed message's {temp} and
the placeholder lists read only the sensors, so a board without one (the
L1) answered !temp with n/a while its telemetry carried a temperature.
The fallback moves to LocalSensors.h, shared by the screens, expandMsg()
and sensorPlaceholders(); the latter now takes the chip's temperature.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 22:55:19 +02:00
JakubandClaude Opus 5.5 21feec0972 fix(l2): wait out the tile being read before the SD card is unmounted
USB drive and Format card closed the open map pack and unmounted, while the
tile task could still be reading a tile off the card (a map left open, a
prefetch). Both now wait for it first, as the map's own redraw does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 22:52:11 +02:00
JakubandClaude Opus 5.5 a69ecd9d14 feat(ui): UI_NO_HIBERNATE hides the Hibernate row
Upstream's flag (meshcore-dev/MeshCore#3290, already set on the L1 OLED
builds) did nothing in the Solo UI. The L1 has a power switch; a pocket
could hibernate it by mistake from the Shutdown page.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 22:33:52 +02:00
JakubandClaude Opus 5.5 d2e1f086e2 fix(ui): the chip's temperature when no sensor reads one
The telemetry reply adds the MCU temperature, the screens read only the
sensors: on a board without a temperature sensor (the L1) the app showed
a temperature and the clock field '--'. The clock, Status and the L2's
Home now fall back to the chip's, like the reply. The bot's !temp and
{temp} still read only the sensors.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 22:33:52 +02:00
JakubandClaude Opus 5.5 467d64af40 fix(nearby): a node's name takes the room its row leaves
The name column always reserved 7-9 characters on the right, though a scan
row shows only 11 px of signal bars: names got about half the OLED.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 22:33:33 +02:00
JakubandClaude Opus 5.5 c85e53a094 fix(settings): Home pages listed in their order, numbered 1-10
The rows kept a fixed order while their numbers came from page_order,
which still has slots for retired pages (Recent, GPS, Sensors): numbers
skipped, and Left/Right could swap a page with a slot that has no row, so
nothing seemed to happen. Rows now show the pages in Home's order; a move
skips retired slots and the highlight follows the page.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 22:33:33 +02:00
JakubandClaude Opus 5.5 a67b0fa025 fix(simpson): PR #53 follow-up - LF endings, no MESHCORE_VERSION, a long Enter wakes the screen first
The keypad files came back with CRLF endings; MESHCORE_VERSION is the
MeshCore base on the splash (1.18.0), not the Solo version, which comes
from the tag; ENV_INCLUDE_GPS is already set by the ProMicro base. A long
Enter with the screen off acted on the dark screen: it now only wakes it,
like every other key, and restarts the screen-off timer.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 22:33:33 +02:00
JakubandClaude Opus 5.5 0cb28480ff Merge pull request #53 from sim1988son/main
Simpson: Enter long-press on the keypad, GPS skyview; the last position kept
while GPS duty-cycling sleeps.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 22:27:21 +02:00
SimpSonandGitHub 2d2360fc75 Add files via upload 2026-10-22 23:03:44 +02:00
SimpSonandGitHub b751956466 Add files via upload 2026-10-22 23:01:17 +02:00
SimpSonandGitHub fd10ac6a40 Add files via upload
during GPS duty-cycle sleep, displays the cached position, adds long-press Enter handling
2026-10-22 22:05:33 +02:00
SimpSonandGitHub 323a9819a2 Add files via upload
Preserves the last GPS fix
2026-10-22 22:01:54 +02:00
SimpSonandGitHub 564ffe0659 Add files via upload
add -D GPS_SKYVIEW
2026-10-22 21:59:45 +02:00
SimpSonandGitHub b416b4dd13 Add files via upload
keypad improvements
2026-10-22 21:58:30 +02:00
JakubandGitHub 615e71b98d Merge pull request #52 from sim1988son/simpson-dev
Fix Simpson Enter with keyboard visible
2026-10-21 13:01:37 +02:00
sim1988son 7073f1ebc2 Fix Simpson Enter with keyboard visible 2026-10-20 22:07:52 +02:00
MarekZegare4andClaude Sonnet 5.5 1683be63ca fix(l2): title bar fits its title - the battery level, then button words, give way
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
v2.0.1
2026-10-19 12:58:04 +02:00
MarekZegare4andClaude Sonnet 5.5 e2c50062b6 feat(ui): UI_ENTER_DOUBLE_BACK - double-click Enter goes back, off by default
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 12:58:04 +02:00
JakubandClaude Opus 5.5 5bee64ef3b build(watch13): the Latin/Greek/Cyrillic 6x9 OLED font
Same gap as the ProMicro: an SSD1306 solo build without
OLED_MISC_FIXED_FONT, non-Latin text as filled squares. Flash 75%.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 15:40:37 +02:00
JakubandClaude Opus 5.5 136c87f990 build(promicro): the Latin/Greek/Cyrillic 6x9 OLED font
The only SSD1306 solo build without OLED_MISC_FIXED_FONT: non-Latin text
showed as filled squares. ~14 KB flash (70.3% -> 72.3%).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 15:38:26 +02:00
JakubandClaude Opus 5.5 0ea17f0414 fix(nearby): the ping popup scrolls to its last result row
The OLED popup fits 3 rows, a finished ping has 4; UP/DOWN were swallowed
so SNR back stayed hidden. Enter on any row sends. Fixes #50.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 15:38:26 +02:00
JakubandClaude Opus 5.5 9dbf4501a3 fix(cardkb): no background poll task when the CardKB shares the display's I2C bus
On the ProMicro the CardKB sits on Wire with the SSD1306. The poll task,
active while a frame goes out, read the keyboard mid-transfer: frozen
screen and a boot loop since rc3. Fixes #51.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 15:38:26 +02:00