Torlando d39a2b75f1 fix(nomadnet): preserve images across partial refresh; cancel media on new page
Greptile P1 fixes on PR #98:

1. Partial refresh dropped images: assign_replacing_partial() cleared
   _images but never re-copied them, so every image block (retained and
   in-fragment) lost its image_index and fell back to alt-text after any
   dynamic refresh. Image records are now preserved: base images are
   re-copied in original order (stable compact index — decode slots and
   loader entries are keyed by it), fragment images are appended after
   the base records with an offset remap and render as placeholders
   (the reference scans for images only at full page load).

2. Navigation retained media requests: nomad_cancel_images() was
   defined but never called, so an in-flight /media receipt survived
   into the next page and blocked its image transport. The cancel is
   wired at nomad_advance_navigation_generation() — the exact new-page
   boundary (open/home/back-empty/leave-route). Deliberately not in
   nomad_supersede_transport/nomad_stop_transport, which same-page
   partial refreshes also use.

Tests: partial-core native test now asserts image record survival and
index stability across a refresh (fails on the unpatched code);
structural test pins the cancel at the generation boundary and asserts
it is NOT in the transport teardown paths.
2026-09-21 21:45:26 +00:00
2026-02-07 11:49:21 -05:00

Pyxis logo

Pyxis

An LXMF and LXST client firmware for T-Deck, built on a highly modified fork of microReticulum

Very much WIP, don't expect stability :)

Features

Reticulum transport over:

  • RNode-compatible LoRa
  • AutoInterface (local wifi)
  • TCP Client
  • BLE Interface (barely working if at all)

Other features:

  • GPS-synced time
  • One really annoying beep when you get a new message (user toggle)
  • View the announce stream
  • Choose a propagation node (and sync with it) (fixed in v0.2.1)
  • Set auto announce timer
  • Light up keyboard (user toggle)
  • Will crash in about 5 minutes of normal use (sorry) I had 5d uptime on v0.2.0 with BLE disabled
  • Make LXST voice calls (codec2 only, quality sounds horrible coming out the other end in Columba, needs work)

Flashing

The easiest way to get Pyxis running is the web flasher, which downloads release firmware from this repository's releases and verifies each image's SHA-256 digest against the release metadata.

For esptool (or any other tool that writes raw flash), each release also publishes a merged binary (pyxis-<tag>-merged.bin) that contains the bootloader, partition table, OTA selector, and application at their fixed offsets. Provision a T-Deck Plus (8 MB flash) with:

esptool.py --chip esp32s3 erase_flash
esptool.py --chip esp32s3 write_flash 0x0 pyxis-<tag>-merged.bin

Merged binaries are for first install / provisioning. Flashing one overwrites every flash region, including NVS (settings, identity) and the LittleFS partition (messages, paths, maps). To update an existing device without losing data, flash firmware.bin to 0x10000 only, or use the Columba-compatible pyxis-<tag>.pyxis.zip update package.

Why "Pyxis"

Pyxis, latin for "compass," is a constellation in the southern sky depicting a mariner's compass. Small but essential, the compass ensures every message finds its destination - even when the path is uncertain.

S
Description
No description provided
Readme GPL-3.0
311 MiB
0 Stars 1 Watchers 0 Forks
Languages
C++ 47%
C 40.3%
Python 10.7%
JavaScript 1%
mupad 0.7%
Other 0.2%