Commit Graph
57 Commits
Author SHA1 Message Date
vicliuandGitHub bf7068b02b 0.1.26-alpha release
* refactor: render chat rows from presentation state

* Fix Meshtastic channel sync and add MeshCore CN preset

* Add granular chat notification settings

* Add SD settings backup and restore

* Prepare 0.1.26-alpha release

---------

Co-authored-by: vicliu624 <vicliu@outlook.com>
2026-05-19 16:04:42 +08:00
vicliuandGitHub 7bade6ab9c Gat562 mesh evb pro (#12)
* feat(gat562): wire nrf52 board runtime and bluetooth stack

* refactor(chat): align shared BLE cores and nrf meshtastic routing

- extract Meshtastic and MeshCore phone/business flows into shared core_chat BLE cores with owner hook seams for ESP and nRF backends

- replace nrf-specific lite adapters with board/platform adapters that consume shared cores and shared storage contracts

- extend nrf Meshtastic radio path with packet history dedupe, flooding rebroadcast, route discovery/traceroute responses, routing ACK/error handling, observed relay learning, retransmit queueing, and next-hop persistence

- persist nrf device identity and node metadata more explicitly, including next-hop state and node-id initialization support

- move nrf chat/contact/blob storage further toward InternalFS-backed persistence and update contact/node store behavior accordingly

- wire gat562 protocol/app facade pieces to the concrete nrf stores/adapters and add supporting app time-sync hooks used by platform runtimes

- add owner-hook split files and planning/status docs to document the ongoing alignment with the reference meshtastic-firmware multi-platform structure

* Add NRF Fusion Pixel font and fix Meshtastic RX

Integrate Fusion Pixel 8px as the NRF mono UI font stack and switch the mono runtime to a dedicated MonoFont/TextRenderer path that can render ASCII, CJK, and symbols from one asset set.

Add the generated NRF font assets and generator script, including the compact font format with per-glyph advance support, and fix the BDF bitmap parsing bug that previously produced blank ASCII glyphs on device.

Move the LVGL Noto CJK font asset out of shared modules into the ESP-specific platform tree and update the related build/config references so the ESP-only font boundary is explicit and NRF does not compile the LVGL asset by accident.

Update the mono UI runtime to use the new renderer, normalize major menu and title labels to uppercase, and wire the GAT562 UI runtime to the Fusion Pixel font.

Fix the core mesh adapter router so Meshtastic and MeshCore backends can coexist without overwriting each other, and ensure active protocol selection is applied before mesh config changes are pushed into the runtime.

Improve GAT562 runtime diagnostics by mirroring debug output to both Serial and Serial2, logging startup radio configuration, and logging raw RX packets with RSSI/SNR so radio-path issues are visible during bring-up.

Relax SX1262 receive polling so it no longer hard-gates RX handling on DIO1 state alone, avoiding a failure mode where the board appeared alive but never delivered packets into the receive path.

Align the NRF Meshtastic adapter with the working ESP behavior for channel handling: use the default expanded public PSK for an unconfigured primary channel, compute channel hashes from the active preset name or Custom label instead of a hard-coded Primary string, and apply the same logic to self-announcement/NodeInfo packets.

Add protocol-layer Meshtastic RX diagnostics for parse, decrypt, decode, text queueing, app-data queueing, unknown-channel, and dedup events to make packet flow visible while validating interoperability.

Fix early duplicate handling for relayed packets so the first valid packet is still delivered into text processing while later relays are correctly suppressed, which restores Broadcast conversation creation and message visibility in the CHATS page.

* feat(gat562): align nrf ui and meshtastic behavior

* Refine mono UI GPS pages and board diagnostics

* refactor: align board runtimes, GAT562 app shell, and BLE integrations

- migrate ESP board-specific implementations and runtime adapters into boards/*
- continue GAT562/Tab5/UI runtime alignment across app and board layers
- sync BLE and runtime integrations, and apply repository clang-format rules

* Refine gat562 mono UI and persist UI settings

* Fix settings persistence and GNSS UI behavior

* Improve mono UI paging and Meshtastic RX fallback

* Align nRF52 Meshtastic BLE and PKI behavior

* Refine mono UI node and chat interactions

* Fix deferred config persistence on gat562 BLE

* Refine mono node compass and GPS layouts

* Include node position in Meshtastic phone info

* Refactor shared board contracts out of ESP platform layer

* Persist node positions across restarts

* Ignore local compile commands database

* Sync README acknowledgements updates

* Apply CI formatting
2026-03-24 16:09:14 +08:00
vicliuandGitHub d320b6511d Unify PlatformIO and ESP-IDF around a shared UI/runtime shellRefactor/repo structure (#11)
* Unify PlatformIO and ESP-IDF around a shared UI/runtime shell
2026-03-12 01:17:46 +08:00
liu weikai 76d83ef7bf feat(ble,ui): align mesh BLE flows and extract shared two-pane UI
- improve MeshCore BLE security, pairing, MTU handling and passkey popup behavior

- align Meshtastic ack, traceroute and MQTT proxy handling with companion expectations

- extract shared two-pane nav/layout/style components and migrate chat, contacts and settings

- simplify tracker and contacts list interaction, scrolling and visual consistency
2026-03-08 10:41:15 +08:00
vicliuandGitHub e429db9797 Feature ble (#10)
* Implement TDeck touch-friendly home grid and power management updates

* Add initial M5Stack Tab5 ESP-IDF environment and board skeleton

* BLE/Meshtastic: apply config at runtime and fix Admin/Telemetry for app compatibility

Meshtastic Admin set_* immediate responses:
- After set_channel: respond with get_channel_response (echo applied channel).
- After set_config: respond with get_config_response for the config type that was set.
- After set_module_config: respond with get_module_config_response after saveModuleConfig().
- After store_ui_config: respond with get_ui_config_response.
This prevents the Meshtastic app from marking these operations as failed when the device applied config but did not send a reply.

DeviceMetrics and Telemetry:
- Add buildDeviceMetrics() in meshtastic_ble (battery from board, uptime_seconds from millis).
- Set has_device_metrics and device_metrics in buildSelfNodeInfo() so the app receives battery and uptime for the local node.
- Give Telemetry module config explicit defaults in loadModuleConfig() (device_update_interval, device_telemetry_enabled, etc.) so get_module_config returns a valid structure.

Apply config at runtime (so BLE-written config takes effect):
- Add AppContext::applyPositionConfig() to push gps_interval_ms and gps_mode to GpsService (setCollectionInterval, setGnssConfig). Call it from BLE set_config when position config is written.
- Add screen_sleep.h with getScreenSleepTimeout() / setScreenSleepTimeout() declarations (implemented in main.cpp). BLE display, device_ui, and store_ui_config now call setScreenSleepTimeout() instead of writing Preferences only, so the in-memory screen timeout updates immediately without reboot.
- Settings UI includes screen_sleep.h and uses the same API.

Other:
- BLE topbar asset and icon when BLE is enabled (ble_topbar.png/c, ui_status, LV_Helper).
- Node store: PersistedNodeEntry and INodeStore gain hw_model; mt_adapter and contact_service pass/store it for Meshtastic app compatibility.
- Variant env tweaks (tlora_pager, tdeck). Event bus and minor cleanups.

* feat: align Meshtastic BLE/iOS flow and add T-Deck keyboard support

- add BLE pairing popup and align more Meshtastic admin/status behavior with iOS expectations
- complete BLE MQTT client proxy bridge and persist OK-to-MQTT / ignore-MQTT channel settings
- add native T-Deck I2C keyboard input, backlight control, and SPACE-to-menu behavior
- fix chat bubble wrapping, contact removal sync, and pager wake/menu regressions

* fix: restore lilygo_twatch_s3 build

- remove duplicate M5Tab5Board isGPSReady declaration
- exclude M5Tab5Board.cpp from T-Watch S3 source filters to avoid duplicate board singletons
- verified with pio run -e lilygo_twatch_s3
2026-03-06 21:01:35 +08:00
liu weikai 6e71362cb7 Merge branch 'main' of github.com:vicliu624/trail-mate 2026-02-24 01:40:16 +08:00
liu weikai 3b7355fea7 Add boot splash screen and update assets 2026-02-24 01:39:10 +08:00
liu weikai 8c6fa6e10e fix(settings): persist mesh protocol switch across reboot 2026-02-23 21:41:04 +08:00
liu weikai a7c54419f3 HostLink: switch mesh backend at runtime and expose protocol context
Add a thread-safe mesh adapter router and route AppContext through it so MeshProtocol can switch backend adapters at runtime without stale state.\n\nWire CMD_SET_CONFIG MeshProtocol updates to runtime backend switching before persisting config, emit EV_STATUS immediately after HELLO handshake, and document protocol-aware decode guidance for HostLink clients.
2026-02-22 20:09:58 +08:00
liu weikai 78a89bfa7a chore(font): add compressed CJK bitmap font pipeline assets 2026-02-22 11:11:20 +08:00
liu weikai aff2787019 feat(settings): add system speaker volume control with tone preview 2026-02-22 11:09:15 +08:00
liu weikai 40fac02439 feat(audio): add protocol-agnostic message prompt tones for pager and tdeck 2026-02-22 10:20:05 +08:00
liu weikai bbd5b8c08c style: reformat sources with clang-format 14.0.6 2026-02-22 09:42:58 +08:00
liu weikai 6f126458d8 style: apply clang-format to satisfy CI format check 2026-02-22 09:37:41 +08:00
liu weikai c948461269 feat(mesh): align MeshCore behavior and unify discovery UX
- complete MeshCore protocol alignment work across chat/team/hostlink paths

- refactor Contacts Discover into a mode-based action list for consistent UI behavior

- add MeshCore identity/crypto persistence plumbing and related protocol handlers

- document Meshtastic + MeshCore dual-compatibility in README (EN/CN)
2026-02-22 09:33:38 +08:00
liu weikai f54fd44fb6 style: apply clang-format to energy sweep header 2026-02-21 11:04:51 +08:00
liu weikai a9e28c352a feat: add Energy Sweep app with region-based scan range 2026-02-21 10:57:17 +08:00
liu weikai 7a06f2152b hostlink: accept extended CMD_TX_APP_DATA layout 2026-02-19 00:32:41 +08:00
liu weikai 6a0895e7f2 Fix team location icon scaling and picker focus restore 2026-02-19 00:31:23 +08:00
liu weikai 91f665bc0d feat: finalize pending integration and UI/runtime stability updates
Apply remaining cross-module updates covering HostLink bridge handling, chat/contact storage and event-flow tuning, GPS/track recorder SPI coordination, and USB mode Wi-Fi behavior.

Complete UI refinements for contacts, team, GPS, and GNSS skyplot interactions, including T-Deck layout/input behavior improvements and related state plumbing.
2026-02-18 21:33:57 +08:00
liu weikai a0614ae690 fix(tdeck): enable touch input and reduce SD-induced UI stalls
Enable LVGL touchpad input for the T-Deck environment and wire GT911 touch initialization/point reading in TDeckBoard (with orientation mapping aligned to LilyGo reference behavior).

Improve runtime smoothness after SD insertion by raising T-Deck SD init SPI speed from 800kHz to 4MHz while keeping fallback retries, and reduce periodic SD pressure by caching Team UI snapshot reads in ui_status.

Also harden T-Deck board runtime behavior by enabling PMU battery measurement channels, adding ADC-based battery fallback/anti-drop guards, and tightening RTC readiness to require a sane epoch.
2026-02-18 20:18:27 +08:00
liu weikai 832a215e4a feat(team-hostlink): add semantic team location flow and HostLink CMD_TX_APP_DATA
This commit closes the PC-to-device app-data send path and wires team location semantics end to end across protocol, service, and UI.

HostLink protocol and runtime:

- Add CMD_TX_APP_DATA (0x15) frame type and CapTxAppData capability bit.

- Implement command parsing for portnum/to/channel/flags/payload and validate payload bounds.

- Add a pending command queue and process commands from AppContext::update() to keep IO task light and avoid direct service execution in the USB thread.

- Route Team app portnums (300..304) to TeamController send paths, including Team mgmt wire decoding and plain/encrypted mgmt selection via flags.

- Preserve generic mesh sendAppData fallback for non-Team app portnums.

- Update hostlink protocol docs with CMD_TX_APP_DATA payload, flags, and Team source mapping/compat notes.

Team service/controller send path:

- Extend TeamController and TeamService send APIs with dest and want_ack parameters for mgmt/chat/position/waypoint/track.

- Add explicit send error mapping for hostlink result reporting and improve last_send_error assignment on encode/encrypt/mesh failures.

UI and data model for semantic location markers:

- Add TeamLocationMarker icon enum helpers and integrate source->icon mapping in UI rendering.

- Update team chat compose Position action to open a marker picker dialog with icon choices and cancel flow.

- Encode selected marker in TeamChatLocation.source, auto-fill label, and send as TEAM_CHAT location payload.

- Extend ChatMessage model with team_location_icon and geo fields so conversation and map can render marker semantics.

- Show semantic icon in team conversation message bubble when location source is a known marker.

- Add GPS map overlay for recent semantic team location markers with member/time labels and lifecycle cleanup.

Assets and docs:

- Add LVGL image assets for AreaCleared/BaseCamp/GoodFind/Rally/SOS markers and source PNGs.

- Update TEAM/HostLink docs with source enum mapping and unknown-value fallback guidance for PC clients.

Other platform-specific input adjustment:

- Refine T-Deck LVGL encoder data reset path to avoid stale state interactions in the input callback.
2026-02-18 00:41:51 +08:00
liu weikai 368e75e730 fix(tdeck): make screen sleep actually turn off backlight
Implement a real TDeckBoard::setBrightness() path instead of only updating an in-memory value.

Code changes:

- Move setBrightness override in TDeckBoard.h from inline stub to cpp implementation.

- In TDeckBoard.cpp, persist brightness state, guard on display readiness, and drive DISP_BL pin HIGH/LOW so brightness=0 physically disables backlight.

- Keep LilyGoDispArduinoSPI brightness state in sync via LilyGoDispArduinoSPI::setBrightness(level).

- Refine trackball rotary handling to edge-based detection with lower debounce/repeat latency, and re-arm click on stable release to avoid sticky one-shot behavior.

Impact:

- Auto sleep in screenSleepTask now has visible effect on T-Deck because setBrightness(0) controls hardware backlight.

- Rotary input behavior remains responsive while reducing mixed-direction/sticky states.
2026-02-18 00:37:49 +08:00
liu weikai 3ddd75a620 fix(gps): keep manual pan until [P] position recenter 2026-02-17 12:19:46 +08:00
vicliuandGitHub 4c16f765db map (#9)
* feat: maps
2026-02-17 11:40:19 +08:00
vicliuandGitHub 3ed34fbbc6 Sstv (#8)
* feat: add SSTV docs and fix chat compose input
2026-02-12 16:23:01 +08:00
vicliuandGitHub 27bc13c920 feat: sky plot (#7)
* feat: sky plot
2026-02-09 01:51:08 +08:00
vicliuandGitHub b4a5055092 Feature aprs (#6)
* feat: PA adjust

* feat: topbar status icon

* fix: settings bug

* feat: unify UI theme and node info link stats

* Improve mesh handling, input back actions, and keyboard alt symbols

- add IRQ/NVS diagnostics for radio and persistence
- refresh link stats and adjust NodeInfo/Position reply handling
- handle Backspace to trigger page back actions
- make Alt act as symbol modifier and rename GPS menu to Map
* fix: hostlink
* style: format
2026-02-08 20:21:51 +08:00
liu weikai 727cffd380 Release 0.1.6-alpha 2026-02-06 17:21:51 +08:00
vicliuandGitHub 0e3e7800f8 Feature walkie talkie (#5)
* feat: walkie talkie
2026-02-06 15:59:33 +08:00
liu weikai 5cba4d30e6 fix: tdeck 2026-02-05 19:24:10 +08:00
liu weikai cffab9e535 fix: team info 2026-02-05 18:05:14 +08:00
liu weikai f9cfc5a7c0 feat: usb host 2026-02-05 16:13:16 +08:00
liu weikai 7bd6a16f43 feat: route 2026-02-05 10:27:34 +08:00
liu weikai e57bc7b478 fix: ui flex error 2026-02-04 23:06:04 +08:00
liu weikai f8b6072c04 fix: ui flex error 2026-02-04 22:22:06 +08:00
liu weikai d9da762065 fix: ui flex error 2026-02-04 22:07:51 +08:00
liu weikai 56e879139f fix: tracker page crash 2026-02-04 21:45:08 +08:00
liu weikai 36007f5120 fix: tracker page 2026-02-04 20:50:59 +08:00
liu weikai 74a30c8df8 fix: tracker page 2026-02-04 20:31:02 +08:00
liu weikai e61f16abc7 fix: tracker page 2026-02-04 20:08:02 +08:00
liu weikai 4d5f3902b6 fix: route fix 2026-02-04 19:19:06 +08:00
liu weikai 03afe5fc88 fix: settings 2026-02-04 19:12:41 +08:00
liu weikai 45aa9fba54 fix: settings 2026-02-04 15:25:34 +08:00
liu weikai b9aec915f1 fix: settings 2026-02-04 15:09:17 +08:00
liu weikai 6fbcbce48c feat: team tracker 2026-02-04 11:06:53 +08:00
liu weikai b8b99db920 Fix GPX overlay sampling stability 2026-02-03 10:32:45 +08:00
liu weikai 4b68c2f565 chore: format codebase and update changelog 2026-02-02 15:04:17 +08:00
vicliuandGitHub 4d941c5ca6 fix: ui (#4)
* feat: join team

* fix: ui
2026-02-02 03:46:17 +08:00
liu weikai 2a91fc3aec fix: error node id 2026-01-29 11:19:15 +08:00