Skip to content

v0.0.4

Choose a tag to compare

@0x00001312 0x00001312 released this 27 Jun 10:23

Changelog

Added

  • Boot screen now opens with a short Cryptspeak intro animation: the speech-bubble/keyhole mark wipes in top-to-bottom, "CRYPTSPEAK" decrypts into place letter-by-letter through scrambled noise glyphs, then the subtitle/version/progress bar fade in together instead of popping in at full brightness. The mark is drawn with the live theme accent color, so it matches whatever preset is active. Adds a fixed one-time ~1s cosmetic delay at the very start of boot; nothing else in the boot sequence is reordered or delayed.
  • LoRa interface now defaults to Reticulum's roaming mode instead of the library default, matching this firmware's use as a mobile endpoint rather than a fixed gateway.

Fixed

  • Radio: image/PLL calibration was issued from the wrong standby mode (STDBY_XOSC instead of the datasheet-required STDBY_RC) whenever the configured LoRa region changed (e.g. Americas 915MHz → Europe 868MHz). This left the chip locked on the previously calibrated band until a happenstance no-op Settings save "fixed" it — a real bug that's been present since the radio driver was written.
  • Radio: isTxBusy() checked the timeout deadline before checking the TX-done IRQ flag, so a loop() call delayed past the deadline by UI rendering could discard a transmission that had actually completed successfully. The radio driver now checks the IRQ first, and a genuine TX timeout is retried once automatically instead of silently dropping the packet. Also logs if the SPI mutex fails to allocate, which previously failed silently.
  • Transport: TCPClientInterface's RX/TX frame buffers were static, shared across every instance under the assumption only one TCP hub connection runs at a time. Since up to 4 hub connections can run concurrently, two in-flight connections could silently corrupt each other's buffered bytes. Buffers are now per-instance. Also fixed Header2 hub transport_id learning, which was cached once from the first packet and never re-checked — if a hub later regenerated its identity without dropping the TCP socket, outgoing packets kept using the stale id.
  • UI: password/unlock screen had a dead backspace handler (an unreachable code path meant to return focus to the password field from an empty confirm field) and a layout bug where setup mode's two-field box overlapped the status/hint text. Both fixed, and field labels are now left-aligned to their box instead of floating centered above it.

Removed

  • The M5Launcher boot-mode chooser and the bundled GPLv3 RNode TNC firmware image, along with the dual-image OTA partition-switching code that supported them. This fork only ever ships the standalone LXMF messenger, so the dual-image infrastructure inherited from upstream was dead weight — and the OTA mode-switch code was actively harmful, since it unconditionally forced the boot partition back to slot 0 on every boot. Does not affect RNode on-air protocol compatibility; the SX1262 driver and LoRa transport used by standalone mode are untouched.
  • Dead code: an unused HotkeyManager tab-cycle callback that was never invoked, and a UIManager render flag that was written once and never read.

Docs

  • Added six technical docs covering the Reticulum/LXMF core, every network transport interface, the SX1262 radio driver, the hardware/peripheral layer, and the UI framework — filling in the gaps left by the existing encryption/storage docs.
  • Fixed the Makefile/merge_firmware.py build-and-package flow, which never actually worked under a pipx-installed PlatformIO. make package now produces dist/rscardputer-standalone.zip end to end.

Full diff: https://github.com/0x00001312/rsCardputer-CE/compare/v0.0.3...v0.0.4

Note: This is still Beta Software, some issues may occur. The TX-timeout/retry fix has not yet been verified on real hardware.