Commit Graph
21 Commits
Author SHA1 Message Date
drkhsh a8da0d8918 Add Power::forceScreenOff() for manual screen-off triggers
New public method that transitions to SCREEN_OFF on demand. A
_justWokeFromOff flag is set in activity() and cleared at the end
of loop() so a single keypress that woke the screen can't immediately
re-blank it via a hotkey/long-press handler running in the same tick.

Pure infrastructure — no UI binding included; consumers can wire it
to whatever input event they want (long-press, hotkey, etc.).
2026-04-26 02:50:54 +02:00
DeFiDude 037af2a6ac - Brightness adjustments 2026-04-06 23:02:40 -06:00
dude.ethandGitHub 675ae47b4d Merge pull request #18 from scotty007/feature/keyboard-backlight
Add keyboard backlight config and control
2026-04-06 22:39:25 -06:00
DeFiDude 0c47e2204f Touch screen capability (closes #19) 2026-04-03 00:06:48 -06:00
Belousov Oleg ba4a729d16 The touch work has been completed 2026-04-02 18:42:50 +03:00
Scotty 51dbfa1a4e Add keyboard backlight config and control
- Add user config for brightness and auto-on/off control.
- Auto-switch backlight on/off according to power state.
2026-04-02 09:04:33 +02:00
DeFiDude 7bf1be2724 Fix GPS time not showing without satellite lock (LoRa-only boot)
Two-layer fix:
- NMEAParser: parse time fields from RMC sentences even when status
  is void ('V'). The MIA-M10Q's battery-backed RTC provides time in
  every sentence — we were discarding it along with the void location.
- GPSManager: allow first time sync without satellite lock. Subsequent
  syncs still require sats>0 for accuracy. Year/epoch validation still
  guards against garbage data from uninitialized modules.

Previously, time only appeared after WiFi connection (NTP via
configTzTime). Now the clock shows within seconds of boot using the
GPS module's RTC, then corrects when satellites lock.
2026-03-28 15:16:57 -06:00
DeFiDude a77fb594a2 Fix screen wake on idle, add regional frequency presets and Hz input
Screen idle:
- Remove powerMgr.activity() from radio yield callback — screen no
  longer wakes on LoRa RX, auto-announce, or RSSI polls
- Add [POWER] state transition logging for on-device diagnostics

Radio regions:
- Add 4-region system: Americas (915), Europe (868), Australia (915),
  Asia (923) with timezone-to-region mapping
- Region picker in Radio settings (always visible)
- Presets now apply region-appropriate frequency + modulation params
- Timezone change warns if it suggests a different radio region

Frequency input (developer mode):
- Hz-precision input (9 digits) displayed as MHz with trimmed decimals
- Left/right arrows step by 125 kHz, digit keys for direct entry
- Inspired by @strijar in https://github.com/ratspeak/ratdeck/pull/12
2026-03-28 14:06:31 -06:00
DeFiDude b2fcfe526e v1.7.1: GPS time sync, timezone picker, status bar clock
- GPS time sync via UBlox MIA-M10Q (38400 baud auto-detect)
- Custom zero-dependency NMEA parser with XOR checksum validation
- Only trust GPS time when satellites > 0 (no stale RTC cache)
- DST-aware timezone picker at first boot (21 cities, POSIX TZ strings)
- Timezone also configurable in Settings > GPS/Time
- GPS Time on by default, GPS Location off by default (opt-in)
- Status bar: clock (top-left), Ratspeak.org (center), battery (right)
- 12h time default (no AM/PM), configurable 24h in settings
- NVS persistence of GPS time for approximate timestamps across reboots
- Fix factory reset Enter key bleed-through (600ms input guard)
- Fix hardcoded UTC-5 NTP timezone (now uses DST-aware POSIX TZ)
2026-03-25 02:42:18 -06:00
DeFiDude 311c5ad3df GPS time sync, status bar clock, configurable UTC offset
- Enable UBlox MIA-M10Q GPS on T-Deck Plus (HAS_GPS true)
- Custom zero-dependency NMEA parser (NMEAParser.h) with XOR checksum
- GPSManager: baud auto-detect (115200/38400/9600, 10s timeout),
  settimeofday() sync every 60s, NVS time/position persistence
- GPS Time enabled by default, GPS Location disabled by default
  (user must explicitly opt in via Settings)
- Replace status bar connectivity bars with clock display (top-left)
- Default 12h format without AM/PM, configurable 24h in Settings
- Add GPS/Time settings category: GPS Time, GPS Location,
  UTC Offset (-12 to +14), 24h Time toggle
- Fix hardcoded UTC-5 NTP timezone to use configurable utcOffset
- Change status bar brand text to "Ratspeak.org"
2026-03-25 01:36:56 -06:00
DeFiDude 8c0b0853e4 Fix GT911 touch coordinate axes for T-Deck Plus display orientation
Swap X/Y axes and invert Y so (0, 0) maps to the top-left corner,
matching the physical display orientation on the T-Deck Plus.
Patch suggested by scotty007 in PR #10.
2026-03-23 17:57:34 -06:00
Scotty 3b1772147b Fix register address and size of GT911 point data 2026-03-22 09:20:43 +01:00
Scotty 67a682080d Store and use I2C address at which GT911 was found 2026-03-22 09:05:41 +01:00
DeFiDude 8b8a9b572f Add link-based LXMF delivery, fix display SPI contention
Display: switch pushPixelsDMA to blocking pushPixels to prevent SPI bus
contention between the display and SX1262 radio on the shared FSPI bus.

LXMF: add opportunistic-first delivery with background link upgrade.
First message to a peer sends immediately via opportunistic packet. A
link is established in the background; subsequent messages use the link
when active (prepending dest_hash for Python DIRECT format), falling
back to opportunistic otherwise. No user-facing delay.
2026-03-19 13:07:19 -06:00
DeFiDude fc91f8214e TCP scaling, GUI pooling, dev mode, protocol improvements
- TCP: wider drain budgets, TCP_NODELAY, no flush, PSRAM buffers, queue announces until hub ID
- GUI: object pool Messages/Contacts screens, partial MessageView status, targeted tab refresh
- LVGL throttled to 5fps when dimmed, non-blocking RSSI monitor, bounded I2S writes
- LXMF batch drain, BLE frame mutex, LoRa interrupt-driven RX, name cache cap 300
- Developer mode in settings: custom radio params (freq/txp/SF/BW/CR/preamble) behind warning
2026-03-15 12:25:29 -06:00
DeFiDude 4687bc9d38 Remove legacy dead code: pre-LVGL screens and unused stubs
Delete 24 files (2487 lines):
- 18 legacy screen files (BootScreen, HomeScreen, NodesScreen,
  MessagesScreen, MessageView, SettingsScreen, HelpOverlay,
  NameInputScreen, MapScreen) replaced by Lv-prefixed LVGL versions
- PowerManager (superseded by hal/Power)
- hal/Audio (ES7210 stub, working audio is audio/AudioNotify)
- hal/GPS (stub, GPS deprioritized)

Move shared types (SettingType, SettingItem, SettingsCategory) from
deleted SettingsScreen.h into LvSettingsScreen.h.

Clean main.cpp: remove legacy includes, instances, and tab mapping.

Note: StatusBar and TabBar retained — still used by UIManager/main.cpp.
2026-03-08 16:52:36 -06:00
DeFiDude 07025bfa23 v1.4.0: LVGL UI, async radio TX, live TCP management, input fixes
- Migrate all screens to LVGL v8.4 widget system
- Non-blocking radio TX (async endPacket via LoRaInterface)
- Live TCP server switching with transient node cleanup
- Fix UI freeze during radio transmit
- Trackball long-press delete, deferred click with debounce
- Pin microReticulum to 392363c, fix list_directory API
- Fix CI build: portable include path, remove hardcoded local path
2026-03-07 13:00:59 -07:00
DeFiDude d518921eed v1.2.2: Fix trackball, add display name support, announce with app_data
- Fix trackball completely dead: remove gpio_reset_pin() calls that
  prevented GPIO interrupts from registering on ESP32-S3
- Add trackball left/right tab cycling when screen doesn't consume event
- Add NameInputScreen: Ratspeak-branded first-boot name input
- Add display name to all announces as MessagePack app_data
- Add TEXT_INPUT setting type; expose Display Name in Settings
- HomeScreen Enter key sends announce with toast notification
- Bump version to 1.2.2
2026-03-06 16:28:18 -07:00
DeFiDude 5d038aec9e Fix trackball dead after USB web flash
After ESP32-S3 USB download mode, GPIO peripheral state may persist
across soft reset. The trackball interrupts silently fail because
pins are in an unknown state from the bootloader.

Fix: call gpio_reset_pin() and detachInterrupt() before configuring
the trackball GPIOs, ensuring a clean state regardless of how the
device was reset (power cycle, RTS toggle, or software reset).
2026-03-06 15:43:13 -07:00
DeFiDude 80d4cd45f6 v1.1.0: UI polish, LXMF messaging fixes, keyboard cleanup
- Remove boot display test (color bars + 1.5s delay)
- Show identity hashes on NodesScreen (colon-formatted, matching own identity display)
- Show node names in MessagesScreen and MessageView instead of raw hex
- Add message status indicators in chat (*/!/~ for sent/failed/queued)
- Fix LXMF send: retry Identity::recall() up to 5 times before failing
- Add LXMF logging throughout send/receive/queue drain
- Remove Alt+IJML arrow key mapping (obsolete with trackball)
- Filter own node from discovered nodes list
- Update troubleshooting docs with SetModulationParams STDBY fix
2026-03-06 13:34:15 -07:00
DeFiDude 1255f0db51 Initial release: Ratdeck v1.0.0
Reticulum transport node + LXMF encrypted messenger for LilyGo T-Deck Plus.
ESP32-S3, 16MB flash, SX1262 LoRa, LovyanGFX display, NimBLE BLE.
2026-03-06 12:40:34 -07:00