Commit Graph
37 Commits
Author SHA1 Message Date
torlando-techandClaude Opus 4.6 6dbdd4854b LXST voice TX: link routing fix, frame batching, TX diagnostics
- Fix link packet routing in microReticulum to only transmit on the
  link's attached interface (was flooding all interfaces including LoRa)
- Batch up to 8 Codec2 frames per Reticulum packet to reduce per-packet
  encryption/transport overhead (~3 packets/sec instead of 25)
- Add TX diagnostics: hex dump of first 2 packets, per-interval stats
  with link status, idle/drop warnings
- Audio now reaches remote end (TX=325 frames in 12s test call)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 02:11:13 -05:00
torlando-techandClaude Opus 4.6 06743635eb Fix ES7210 mic capture: use LilyGO library with slave mode
Replace custom ES7210 register-level driver with the verbatim LilyGO
T-Deck Plus ES7210 library. The custom driver was writing MODE_CONFIG
and clock doubler registers (master mode path) which broke the ES7210's
clock chain, causing all-zero PCM output. The LilyGO library in slave
mode leaves those registers at power-on defaults, which is correct since
the ESP32 I2S master provides MCLK/BCLK/LRCK.

Also includes LXST voice call protocol improvements:
- LXST IN destination for receiving calls
- Announce handler for tracking voice-capable peers
- Path request before outgoing calls
- Throttled SPIFFS saves in microReticulum (dirty flag)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 01:42:47 -05:00
torlando-techandClaude Opus 4.6 f73fbb2568 Fix LXST voice call interop with Python LXST/Columba
- Fix thread safety: defer Reticulum link callbacks (packet, link_closed)
  to call_update() which runs under LVGL lock, preventing crashes from
  concurrent LVGL access across cores
- Fix outgoing call signal handling: store link reference and re-register
  packet/link_closed callbacks in on_call_link_established so signals
  are actually received
- Fix call answer screen freeze: update UI before blocking audio init
  (I2S/ES7210/Codec2 setup) so screen renders immediately
- Fix audio direction: use startPlayback() (speaker RX) instead of
  startCapture() (mic TX) so received audio is actually heard
- Add msgpack wire format for LXST signalling and audio frames
- Add LXST IN destination for receiving calls + announce support
- Add incoming call UI (Answer/Reject buttons) on CallScreen
- Add path request before outgoing call link establishment
- Add LXST announce handler registration

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 21:00:07 -05:00
torlando-techandClaude Opus 4.6 c1af11d75e LXST audio hardware config: ES7210 mic pins, tone helpers, platformio deps
- Add ES7210 I2C address and I2S mic capture pin definitions
- Add ring/hangup tone helpers to Tone library
- Add lxst_audio library scaffold
- Add Codec2 dependency to platformio.ini

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 16:41:47 -05:00
torlando-techandClaude Opus 4.6 8f265da0bb LXST voice call UI and state machine
- Add CallScreen with ring/active/ended states and call controls
- Add call state machine to UIManager (link establish, identify, ring, answer)
- Add call button to ChatScreen header
- Add call initiate/hangup with Reticulum Link management
- Add StatusScreen call status display

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 16:41:40 -05:00
torlando-techandClaude Opus 4.6 beb122606d Screen wake fix, memory monitor poll, crash breadcrumbs
- Fix slow screen wake: track screen_off_time and wake on any activity
  newer than when screen turned off (was requiring activity <1s ago)
- Add MEMORY_MONITOR_POLL() to main loop for deferred logging
- Add NVS crash breadcrumb system for LXST call debugging
- Update microReticulum submodule (memory stability fixes)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 16:41:32 -05:00
torlando-techandClaude Opus 4.6 de5002d347 Route NimBLE memory allocations to PSRAM
Enable CONFIG_BT_NIMBLE_MEM_ALLOC_MODE_EXTERNAL to move NimBLE's
internal buffer pools (~35-45KB) from internal heap to PSRAM.
Fixes heap exhaustion crash during BLE operations.

Before: free=17952 max_block=11252 (crash)
After:  free=97396 max_block=86004 at boot, stable ~38KB during operation

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 00:26:44 -05:00
torlando-techandClaude Opus 4.6 ec181e18f8 BLE interop fixes: pools, keepalive tracking, data buffering
- Replace std::map and std::vector with fixed-size pools in
  BLEInterface (fragmenters, pending handshakes, pending data)
- Track keepalive failures and disconnect after 3 consecutive
- Force-disconnect zombie peers detected by BLEPeerManager
- Add periodic advertising refresh (every 60s) to combat silent stops
- Buffer incoming data when identity not yet mapped instead of dropping
- Subtract ATT_OVERHEAD from MTU in NimBLEPlatform connection setup

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 00:18:02 -05:00
torlando-techandClaude Opus 4.6 a50eafde41 Move Transport pools from BSS to PSRAM
Update microReticulum submodule: static pool arrays (~20 pools) moved
from BSS segment to PSRAM via heap_caps_aligned_alloc at startup.

Before: boot heap ~116KB, steady-state max_block 7.6KB, constant skipped announces
After:  boot heap ~161KB, steady-state max_block 65KB, zero skipped announces

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 21:18:55 -05:00
Astra b1a4f3582c Use after free fixes 2026-02-11 21:41:18 +09:00
Astra c30dba58e6 Display blackout debugging 2026-02-11 21:41:09 +09:00
Astra 66f50c91be LINKIDENTIFY inverted logic fix 2026-02-11 19:49:40 +09:00
Astra 9cecce2f0d Bump timer stack size 2026-02-11 19:49:24 +09:00
Astra 5f2c076e90 Fix SX1262 SPI Mutex
Start receive mode before releasing the mutex, otherwise it can interfere with the display since they're on the same bus
2026-02-11 19:28:56 +09:00
Astra 9740419cde Proper MTU sizes
Fixes being unable to talk over DIRECT links on LoRa
2026-02-11 19:27:51 +09:00
Astra 512cfb27ec Don't crash when no wifi network is configured 2026-02-11 14:37:39 +09:00
Astra a5a7b79e7d Don't crash on garbled announce packets 2026-02-11 13:29:09 +09:00
Torlando 74227f962b Add LICENSE file 2026-02-07 11:49:21 -05:00
torlando-techandClaude Opus 4.6 4aad90932e chore: update microReticulum submodule
Includes:
- Link operator== / operator!= for correct pool lookups
- activate_link null guard and copy-before-remove
- Known destinations pool increased to 2048 slots
- Proactive culling at 90% threshold
- Low-memory guard for resource retries on ESP32

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 11:12:49 -05:00
torlando-techandClaude Opus 4.6 1c5b714284 fix: increase loop task stack to 48KB for large DIRECT messages
32KB was insufficient for the deep call chain when receiving large
messages over links (transport → link → resource → LXMF unpack →
crypto → msgpack). Crashed with StoreProhibited on 935-byte messages.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 11:12:44 -05:00
torlando-techandClaude Opus 4.6 6ffafb9242 fix: auto-start TCP interface when WiFi connects after boot
TCP interface was never created if WiFi wasn't connected at boot time.
The settings-changed handler tried to restart it but the objects didn't
exist. Extract TCP creation into start_tcp_interface() helper and call
it from boot, settings changes, and a WiFi state-change detector in
the main loop.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 00:52:54 -05:00
torlando-techandClaude Opus 4.6 d0528591c0 fix: increase loop task stack to 32KB to prevent stack overflow
The 16KB stack was insufficient for deep call chains during message
delivery proof handling (transport → crypto → proof callback → app
callback → SPIFFS I/O → msgpack unpack), causing crashes every few
minutes. Also adds the stack size flag to tdeck-bluedroid env which
was missing it entirely.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 00:41:19 -05:00
torlando-techandClaude Opus 4.6 dd361be825 fix(flasher): add esptool.js to repo for gh-pages deployment
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
v0.1.0
2026-02-06 23:31:45 -05:00
torlando-techandClaude Opus 4.6 80baf98d52 feat: auto-inject firmware version from git tags at build time
Add version.py PlatformIO pre-build script that reads version from
`git describe --tags --always` and defines FIRMWARE_VERSION as a build
flag. Local builds without tags fall back to "dev". Also rename
FIRMWARE_NAME from "microReticulum" to "Pyxis".

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 23:26:09 -05:00
torlando-techandClaude Opus 4.6 e2a62e6701 fix(flasher): clarify full install is required for first-time installs
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 23:00:22 -05:00
torlando-techandClaude Opus 4.6 1b2705d8fe fix(flasher): use esploader.hardReset() for reliable post-flash reset
Replace manual DTR toggle with esploader's built-in hardReset() which
uses RTS (EN pin) to properly reset the ESP32-S3 after flashing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 22:58:47 -05:00
torlando-techandClaude Opus 4.6 826c69695c fix(flasher): disable tracing and fix flash params to match rnode-flasher
Transport tracing and missing enableTracing flag caused timing issues
with ESP32-S3 USB-Serial/JTAG during bootloader sync. Also fixes
flashMode/flashFreq format, routes esptool output to on-page log,
and adds firmware binaries.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 22:52:49 -05:00
torlando-techandClaude Opus 4.6 8c6a6d2ee5 fix(flasher): update footer links to pyxis repo
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 21:27:25 -05:00
Torlando dae8f33a16 Fix typo in README regarding propagation node sync 2026-02-06 20:21:52 -05:00
Torlando ac32d43366 Document crash issue in README
Added a note about potential crash during normal use.
2026-02-06 20:21:31 -05:00
torlando-techandClaude Opus 4.6 3dbb67f320 fix(ci): add tag_name for workflow_dispatch and make releases draft
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 20:11:05 -05:00
Torlando c7dd7d30ed Add explanation for 'Pyxis' in README
Added a section explaining the meaning of 'Pyxis'.
2026-02-06 20:04:10 -05:00
Torlando 69edf390a9 Update README with modified fork details
Added a note about the modified fork of microReticulum.
2026-02-06 19:59:20 -05:00
Torlando 6111ad49c1 Add new feature to README for message notification 2026-02-06 19:57:56 -05:00
Torlando ee15c6c6db Add additional features to README 2026-02-06 19:57:28 -05:00
Torlando cce6e3a685 Create README.md for Pyxis project
Add initial README with project description and features
2026-02-06 19:57:03 -05:00
torlando-techandClaude Opus 4.6 ac6ceca9f8 Initial commit: standalone Pyxis T-Deck firmware
Split T-Deck firmware from microReticulum examples/lxmf_tdeck/ into its
own repo. microReticulum is consumed as a git submodule dependency pinned
to feat/t-deck. All include paths updated from relative symlinks to bare
includes resolved via library build flags.

Both tdeck (NimBLE) and tdeck-bluedroid environments compile successfully.
Licensed under AGPLv3.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 19:48:33 -05:00