feat(reticulum): complete messaging, calls, and P4 support

Add official Sideband/LXST messaging and telephony flows, realtime resource ownership, call and ping UI, durable unread state, and bounded Nomad/Micron browsing.

Integrate ESP32-P4/C6 gateway transport, TinyUSB CDC, ES8311 audio, shared Codec2 call media, Reticulum defaults, compatibility settings, and conformance coverage.
This commit is contained in:
liu weikai
2026-07-14 22:36:07 +08:00
parent 427f610a5c
commit f7d6599310
122 changed files with 10954 additions and 1046 deletions
@@ -18,7 +18,7 @@ void apply_reply_label(lv_obj_t* label);
// message row + bubble
void apply_message_row(lv_obj_t* row);
void apply_bubble(lv_obj_t* bubble, bool is_self);
void apply_bubble(lv_obj_t* bubble, bool is_self, bool source_unverified = false);
void apply_bubble_text(lv_obj_t* label);
void apply_bubble_time(lv_obj_t* label);
void apply_bubble_status(lv_obj_t* label);
@@ -7,6 +7,7 @@ namespace ui::screens::network::micron
{
constexpr std::size_t kMaxAnchorNameBytes = 48;
constexpr std::size_t kMaxLinkTargetBytes = 160;
constexpr std::size_t kMaxTableCells = 6;
enum class Align : std::uint8_t
@@ -47,9 +48,28 @@ struct LinkFields
char anchor[kMaxAnchorNameBytes] = {};
};
struct ColorToken
{
bool valid = false;
std::uint32_t rgb = 0;
std::size_t consumed = 0;
};
struct PartialReference
{
bool valid = false;
bool has_display_hint = false;
std::uint16_t display_hint = 0;
LinkTargetKind target_kind = LinkTargetKind::Unknown;
char target[kMaxLinkTargetBytes] = {};
};
bool anchor_name_char(char ch);
void slug_from_text(const char* text, char* out, std::size_t out_len);
bool parse_color_text(const char* text, std::size_t len, std::uint32_t* out);
ColorToken parse_color_token(const char* line, std::size_t len, std::size_t index);
TableOpenOptions parse_table_opening_tag(const char* line);
std::size_t parse_table_cells(const char* row_text,
Span* cells,
@@ -64,7 +84,9 @@ bool append_anchor_to_target(const char* target,
char* out,
std::size_t out_len);
LinkTargetKind classify_link_target(const char* target);
const char* link_target_kind_label(LinkTargetKind kind);
bool extract_partial_url(const char* line, char* out, std::size_t out_len);
PartialReference parse_partial_reference(const char* line);
} // namespace ui::screens::network::micron
@@ -78,6 +78,8 @@ enum class SettingId : std::uint16_t
RtWifiPort,
RtWifiAuto,
RtAnonymousPeer,
RtCallWire,
RtLocationRequests,
NetUsePreset,
NetPreset,
NetBw,
@@ -252,6 +254,8 @@ struct SettingsData
bool rt_wifi_gateway_enabled = true;
bool rt_wifi_auto_connect = true;
bool rt_anonymous_peer = false;
int rt_call_wire = 0;
bool rt_location_requests = false;
char rt_display_name[32] = "--";
char rt_identity_hash[36] = "--";
char rt_lxmf_address[36] = "--";
@@ -12,6 +12,7 @@ enum class Slot : std::uint8_t
I18nFontLoad,
RouteImage,
SettingsAction,
ReticulumPing,
Count,
};
@@ -0,0 +1,25 @@
#pragma once
#include "chat/domain/reticulum_identity.h"
#include <cstdint>
namespace ui::widgets::reticulum_ping
{
void show_loading(
const std::uint8_t destination_hash[::chat::kReticulumPeerHashSize],
const char* display_name);
void show_send_failure(const char* detail);
void show_delivered(
const std::uint8_t destination_hash[::chat::kReticulumPeerHashSize],
std::uint32_t latency_ms,
std::uint8_t hops);
void show_timeout(
const std::uint8_t destination_hash[::chat::kReticulumPeerHashSize],
std::uint32_t elapsed_ms);
void dismiss();
bool active_for(
const std::uint8_t destination_hash[::chat::kReticulumPeerHashSize]);
} // namespace ui::widgets::reticulum_ping