Files
wadamesh/variants/tanmatsu/target.cpp
T
Kaj SchittecatandClaude Fable 5 8eb63a7edd touch: beta_29 — clock floor for room-server replay guards, BLE repeats-heard, deep SD history, one-screen popups
- ClockFloorRTC on all boards: persisted monotonic send-timestamp floor (touchPrefs v32),
  garbage-set rejection, trusted-backstep cap; Join no-reply watchdog + server clock
  skew warning from the LOGIN_OK timestamp prefix (issue #89 follow-up)
- BLE repeats-heard: own-echo RX-log frames pass to BLE one-shot; the #46/#54
  congestion skip stays for everything else (issue #94)
- Mirror app-sent channel messages on-device (was Tanmatsu-only from birth)
- Chat delete: persist the ring purge; mesh-channel drop prefers the pinned slot
- Deep SD history (5000-msg ring) + date separators; chat-list rows restyled compact
- Popup unification: popupClose() + k_popup_registry drive dismiss/count/swipe-block
- Thread/channel sheet as one-screen 2-col grid (contact-sheet layout)
- Keypad nav: strip LVGL SCROLL_ON_FOCUS from collected widgets (About-page jump);
  update dot no longer focusable; verchk waits for an IP + retries with backoff
- Tanmatsu: FIRMWARE_RELEASE_TAG from git describe (drop the hand-bumped hardcode)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-05 10:07:16 +02:00

30 lines
1.2 KiB
C++

#include <Arduino.h>
#include "target.h"
#include <helpers/ArduinoHelpers.h> // StdRNG lives here (there is no StdRNG.h)
#include <TanmatsuDisplay.h>
#include <helpers/SensorManager.h>
TanmatsuBoard board;
TanmatsuLoraRadio radio_driver; // the coprocessor LoRa bridge (no RadioLib Module)
DISPLAY_CLASS display; // global LVGL flush target + boot/shutdown DisplayDriver
SensorManager sensors; // base (no telemetry yet); EnvironmentSensorManager later
ESP32RTCClock fallback_clock;
ClockFloorRTC rtc_clock(fallback_clock);
bool radio_init() {
fallback_clock.begin();
// TODO(device): if the Tanmatsu exposes a hardware RTC over I2C, do
// rtc_clock.begin(Wire) + Wire.begin(<sda>,<scl>) here like the S3 boards.
return radio_driver.init(); // lora_init_remote() + push PHY config
}
mesh::LocalIdentity radio_new_identity() {
// S3 boards seed from RadioLib radio noise (RadioNoiseListener). The remote LoRa
// has no equivalent, so seed a fresh identity from the same StdRNG the app uses,
// keyed off getRngSeed() (esp_random ^ instantaneous RSSI noise).
StdRNG rng;
rng.begin(radio_driver.getRngSeed());
return mesh::LocalIdentity(&rng);
}