Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
240 commits
Select commit Hold shift + click to select a range
cf9bc7a
First try at multimessage storage and display
HarukiToreda Sep 21, 2025
d779821
Nrf built issue fix
HarukiToreda Sep 21, 2025
abcc166
Message view mode
HarukiToreda Sep 22, 2025
3d8b4a6
Add channel name instead of channel slot
HarukiToreda Sep 23, 2025
8040bb2
trunk fix
HarukiToreda Sep 23, 2025
4e61016
Fix for DM threading
HarukiToreda Sep 23, 2025
6ead5c0
fix for message time
HarukiToreda Sep 23, 2025
3780290
rename of view mode to Conversations
HarukiToreda Sep 23, 2025
ea7638b
Reply in thread feature
HarukiToreda Sep 23, 2025
8333ceb
rename Select View Mode to Select Conversation
HarukiToreda Sep 23, 2025
91e1029
dismiss all live fix
HarukiToreda Sep 23, 2025
4d10026
Merge remote-tracking branch 'upstream/develop' into multi-message-St…
HarukiToreda Sep 23, 2025
46a8a9a
Merge remote-tracking branch 'upstream/develop' into multi-message-St…
HarukiToreda Sep 24, 2025
dd7a5cf
Messages from phone show on screen
HarukiToreda Sep 26, 2025
ebbb8a6
Decoupled message packets from screen.cpp and cleaned up
HarukiToreda Sep 26, 2025
07d3726
Cannedmessage cleanup and emotes fixed
HarukiToreda Sep 26, 2025
28502c9
Ack on messages sent
HarukiToreda Sep 26, 2025
3e4f654
Ack message cleanup
HarukiToreda Sep 28, 2025
e3553c4
Dismiss feature fixed
HarukiToreda Sep 28, 2025
4ae5e8a
removed legacy temporary messages
HarukiToreda Sep 28, 2025
34bb858
Emote picker fix
HarukiToreda Sep 28, 2025
7f1dc4e
Merge remote-tracking branch 'upstream/develop' into multi-message-St…
HarukiToreda Sep 28, 2025
526c7f8
Merge remote-tracking branch 'upstream/develop' into multi-message-St…
HarukiToreda Sep 28, 2025
7642d0c
Memory size debug
HarukiToreda Sep 30, 2025
0476eee
Merge remote-tracking branch 'upstream/develop' into multi-message-St…
HarukiToreda Oct 2, 2025
65bb78b
Build error fix
HarukiToreda Oct 2, 2025
4e84094
Sanity checks are okay sometimes
Xaositek Oct 5, 2025
13eb53f
Lengthen channel name and finalize cleanup removal of Broadcast
Xaositek Oct 5, 2025
bebb1e9
Change DM to @ in order to unify on a single method
Xaositek Oct 5, 2025
8860f61
Continue unifying display, also show message status on the "isMine" l…
Xaositek Oct 5, 2025
bbec517
Add context for incoming messages
Xaositek Oct 5, 2025
c9314c7
Better to say "in" vs "on"
Xaositek Oct 5, 2025
b8d33a3
crash fix for confirmation nodes
HarukiToreda Oct 6, 2025
0b96486
Fix outbound labels based to avoid creating delays
Xaositek Oct 6, 2025
9b57b21
Merge branch 'develop' into multi-message-Storage
Xaositek Oct 6, 2025
383d95a
Eink autoscroll dissabled
HarukiToreda Oct 6, 2025
103f73e
gating for message storage when not using a screen
HarukiToreda Oct 6, 2025
b549786
revert
HarukiToreda Oct 6, 2025
e7cdc7c
Merge branch 'develop' into multi-message-Storage
Xaositek Oct 6, 2025
67c0000
Build fail fix
HarukiToreda Oct 6, 2025
9f62007
Merge branch 'multi-message-Storage' of https://github.com/meshtastic…
HarukiToreda Oct 6, 2025
993e874
Don't error out with unset MAC address in unit tests
jp-bennett Oct 6, 2025
cb8a8a2
Merge branch 'develop' into multi-message-Storage
HarukiToreda Oct 6, 2025
d5ce469
Provide some extra spacing for low hanging characters in messages
Xaositek Oct 6, 2025
def5018
Merge branch 'develop' into multi-message-Storage
Xaositek Oct 7, 2025
9e520d0
Reorder menu options and reword Respond
Xaositek Oct 7, 2025
974b3e6
Merge branch 'develop' into multi-message-Storage
Xaositek Oct 7, 2025
541e050
Reword menus to better reflect actions
Xaositek Oct 7, 2025
20e9703
Merge branch 'develop' into multi-message-Storage
Xaositek Oct 8, 2025
7970a32
Go to thread from favorite screen
HarukiToreda Oct 9, 2025
e93b657
Reorder Favorite Action Menu with simple word modifications
Xaositek Oct 9, 2025
334089a
Consolidate wording on "Chats"
Xaositek Oct 9, 2025
e609353
Mute channel fix
HarukiToreda Oct 10, 2025
6069dc2
trunk fix
HarukiToreda Oct 10, 2025
6d899c9
Clean up how muting works along with when we wake the screen
Xaositek Oct 10, 2025
84cef67
Fix builds for HELTEC_MESH_SOLAR
Xaositek Oct 10, 2025
784e71f
Signal bars for message ack
HarukiToreda Oct 10, 2025
163d8e0
fix for notification renderer
HarukiToreda Oct 10, 2025
e606d88
Remove duplicate code, fix more Chats, and fix C6L MessageRenderer
Xaositek Oct 10, 2025
97578fb
Fix to many warnings related to BaseUI
HarukiToreda Oct 10, 2025
abeeb12
preset aware signal strength display
HarukiToreda Oct 10, 2025
1d7fe20
More C6L fixes and clean up header lines
Xaositek Oct 10, 2025
e934f8f
Use text aligns for message layout where necessary
Xaositek Oct 11, 2025
9e9d2af
Attempt to fix memory usage of invalidLifetime
Xaositek Oct 11, 2025
5e5a449
Merge branch 'develop' into multi-message-Storage
Xaositek Oct 11, 2025
544331d
Merge branch 'develop' into multi-message-Storage
Xaositek Oct 12, 2025
6dfaf23
Update channel mute for adjusted protobuf
Xaositek Oct 12, 2025
f9e3155
Merge branch 'develop' into multi-message-Storage
Xaositek Oct 12, 2025
65dcd82
Missed a comma in merge conflicts
Xaositek Oct 12, 2025
50a65a1
cleanup to get more space
HarukiToreda Oct 12, 2025
5510863
Trunk fixes
HarukiToreda Oct 12, 2025
e389258
Optimize Hi Rez Chirpy to save space
Xaositek Oct 13, 2025
0b11f93
more fixes
HarukiToreda Oct 13, 2025
f35f72e
More cleanup
HarukiToreda Oct 13, 2025
b0c0faa
Merge branch 'develop' into multi-message-Storage
Xaositek Oct 13, 2025
8611175
Remove used getConversationWith
Xaositek Oct 13, 2025
2f53f3f
Remove unused dismissNewestMessage
Xaositek Oct 13, 2025
56656a4
Merge branch 'develop' into multi-message-Storage
Xaositek Oct 13, 2025
5f8f3cf
Fix another build error on occassion
Xaositek Oct 13, 2025
835f130
Merge branch 'develop' into multi-message-Storage
Xaositek Oct 13, 2025
7aa5b93
Dimiss key combo function deprecated
HarukiToreda Oct 13, 2025
3bb5a33
More cleanup
HarukiToreda Oct 13, 2025
4ca56ec
Fn symbol code removed
HarukiToreda Oct 13, 2025
8fb825e
Waypoint cleanup
HarukiToreda Oct 13, 2025
214aa8b
Trunk fix
HarukiToreda Oct 13, 2025
849a749
Fixup Waypoint screen with BaseUI code
Xaositek Oct 13, 2025
2f65721
Implement Haruki's ClockRenderer and broadcast decomposeTime across v…
Xaositek Oct 14, 2025
ee3c7f2
Revert "Implement Haruki's ClockRenderer and broadcast decomposeTime …
Xaositek Oct 14, 2025
c180f23
Implement Haruki's ClockRenderer and broadcast decomposeTime across v…
Xaositek Oct 14, 2025
aaf4a7e
remove memory usage debug
HarukiToreda Oct 14, 2025
a05936f
Revert only RangeTestModule.cpp change
Xaositek Oct 14, 2025
6cd64cc
Merge branch 'multi-message-Storage' of https://github.com/meshtastic…
Xaositek Oct 14, 2025
4bd5350
Switch from dynamic std::string storage to fixed-size char[]
HarukiToreda Oct 14, 2025
67c24c0
Removing old left over code
HarukiToreda Oct 14, 2025
62eaabc
More optimization
HarukiToreda Oct 15, 2025
c8f3cbb
Free Heap when not on Message screen
HarukiToreda Oct 15, 2025
7135387
build error fixes
HarukiToreda Oct 15, 2025
caff68f
Merge branch 'develop' into multi-message-Storage
Xaositek Oct 15, 2025
3e3f03c
Restore ellipsis to end of long names
Xaositek Oct 15, 2025
04c7720
Remove legacy function renderMessageContent
Xaositek Oct 16, 2025
4aad908
Merge branch 'develop' into multi-message-Storage
Xaositek Oct 16, 2025
4f79475
improved destination filtering
HarukiToreda Oct 16, 2025
fbf7ab0
force PKI
HarukiToreda Oct 17, 2025
f012f98
cleanup
HarukiToreda Oct 17, 2025
14dfce5
Merge branch 'develop' into multi-message-Storage
HarukiToreda Oct 17, 2025
13458d3
Shorten longNames to not exceed message popups
Xaositek Oct 17, 2025
c0361d2
log messages sent from apps
HarukiToreda Oct 17, 2025
f09ac16
Trunk fix
HarukiToreda Oct 17, 2025
b26c95d
Improve layout of messages screen
Xaositek Oct 18, 2025
69f489e
Merge branch 'develop' into multi-message-Storage
Xaositek Oct 18, 2025
a635ee3
Fix potential crash for undefined variable
Xaositek Oct 19, 2025
dd95748
Merge branch 'develop' into multi-message-Storage
Xaositek Oct 19, 2025
bc9c187
Merge branch 'develop' into multi-message-Storage
Xaositek Oct 19, 2025
9a12304
Revert changes to RedirectablePrint.cpp
Xaositek Oct 19, 2025
d25110f
Merge branch 'develop' into multi-message-Storage
Xaositek Oct 20, 2025
3cb4e0e
Merge branch 'develop' into multi-message-Storage
Xaositek Oct 20, 2025
2c05baa
Apply shortening to longNames in Select Destination
Xaositek Oct 22, 2025
c9aeafd
Fix short name displays
Xaositek Oct 22, 2025
ec04aa0
Fix sprintfOverlappingData issue
Xaositek Oct 22, 2025
6926a50
Fix nullPointerRedundantCheck warning on ESP32
Xaositek Oct 22, 2025
9ffdaed
Merge branch 'develop' into multi-message-Storage
Xaositek Oct 23, 2025
263ae8c
Merge branch 'develop' into multi-message-Storage
Xaositek Oct 24, 2025
db62d92
Merge branch 'develop' into multi-message-Storage
Xaositek Oct 26, 2025
022825e
Merge branch 'develop' into multi-message-Storage
Xaositek Oct 27, 2025
01a7389
Merge branch 'develop' into multi-message-Storage
Xaositek Oct 31, 2025
5b10510
Add "Delete All Chats" to all chat views
Xaositek Oct 31, 2025
541a6b5
Merge branch 'develop' into multi-message-Storage
Xaositek Nov 1, 2025
4c176d7
Merge branch 'develop' into multi-message-Storage
Xaositek Nov 2, 2025
c3b4e6b
Merge branch 'develop' into multi-message-Storage
Xaositek Nov 2, 2025
6647900
Merge branch 'develop' into multi-message-Storage
Xaositek Nov 3, 2025
33cbf35
Merge branch 'develop' into multi-message-Storage
Xaositek Nov 3, 2025
ef5016a
Merge branch 'develop' into multi-message-Storage
Xaositek Nov 4, 2025
ccdb27d
Improve getSafeNodeName / sanitizeString code.
Xaositek Nov 4, 2025
9f6b5f0
Improve getSafeNodeName further
Xaositek Nov 4, 2025
e2d4482
Restore auto favorite; but only if not CLIENT_BASE
Xaositek Nov 5, 2025
6c3d2fd
Merge branch 'develop' into multi-message-Storage
Xaositek Nov 5, 2025
9e9eff0
Don't favorite if WE are CLIENT_BASE role
Xaositek Nov 5, 2025
aace453
Merge branch 'develop' into multi-message-Storage
Xaositek Nov 6, 2025
65a5cec
Don't run message persistent in MUI
Xaositek Nov 6, 2025
efc304c
Merge branch 'develop' into multi-message-Storage
Xaositek Nov 7, 2025
09a3813
Fix broken endifs
Xaositek Nov 7, 2025
dd4b5d4
Merge branch 'develop' into multi-message-Storage
Xaositek Nov 9, 2025
5c600de
Unkwnown nodes no longer show as ??? on message thread
HarukiToreda Nov 10, 2025
c30eb4b
More delete options and cleanup of code
HarukiToreda Nov 10, 2025
b3f4e81
fix for delete this chat
HarukiToreda Nov 10, 2025
9441f0c
Message menu cleanup
HarukiToreda Nov 10, 2025
46391ff
trunk fix
HarukiToreda Nov 10, 2025
fb2223a
Clean up some menu options and remove some Unit C6L ifdefines
Xaositek Nov 10, 2025
cde626c
Rework Delete flow
Xaositek Nov 10, 2025
bfcfcb6
Merge branch 'develop' into multi-message-Storage
Xaositek Nov 10, 2025
aefebbb
Desperate times call for desperate measures
Xaositek Nov 15, 2025
8929231
Merge branch 'develop' into multi-message-Storage
Xaositek Nov 15, 2025
1ecfbe2
Merge branch 'develop' into multi-message-Storage
Xaositek Nov 16, 2025
c6f3b2d
Merge branch 'develop' into multi-message-Storage
Xaositek Nov 16, 2025
b306bf0
Merge branch 'develop' into multi-message-Storage
Xaositek Nov 17, 2025
3a396e5
Merge branch 'develop' into multi-message-Storage
Xaositek Nov 18, 2025
f6cf92c
Merge branch 'develop' into multi-message-Storage
Xaositek Nov 19, 2025
586d4d2
Merge branch 'develop' into multi-message-Storage
Xaositek Nov 20, 2025
da7d281
Merge branch 'develop' into multi-message-Storage
Xaositek Nov 20, 2025
1fcbee3
Merge branch 'develop' into multi-message-Storage
Xaositek Nov 21, 2025
922d156
Merge branch 'develop' into multi-message-Storage
Xaositek Nov 22, 2025
0607476
Create a background on the connected icon to reduce overlap impact
Xaositek Nov 24, 2025
69363d3
Merge branch 'develop' into multi-message-Storage
Xaositek Nov 25, 2025
ceca3d1
Optimize code for background image
Xaositek Nov 25, 2025
43cfe03
Merge branch 'develop' into multi-message-Storage
Xaositek Nov 25, 2025
f0af449
Merge branch 'develop' into multi-message-Storage
Xaositek Nov 26, 2025
6ae6b36
Fix for Muzi_Base
Xaositek Nov 26, 2025
7236e36
Merge branch 'develop' into multi-message-Storage
Xaositek Nov 26, 2025
a260072
Merge branch 'develop' into multi-message-Storage
Xaositek Nov 27, 2025
ed0fadc
Trunk Fixes
Xaositek Nov 28, 2025
a3cf1fb
Merge branch 'develop' into multi-message-Storage
Xaositek Nov 28, 2025
ebf8446
Merge branch 'develop' into multi-message-Storage
Xaositek Nov 29, 2025
4bf543b
Merge branch 'develop' into multi-message-Storage
Xaositek Nov 29, 2025
ce6278f
Merge branch 'develop' into multi-message-Storage
jp-bennett Dec 1, 2025
7d9f629
Remove the up/down shortcut to launch canned messages (#8370)
jp-bennett Dec 1, 2025
0295685
Merge branch 'develop' into multi-message-Storage
Xaositek Dec 1, 2025
0d8c549
Merge branch 'develop' into multi-message-Storage
jp-bennett Dec 1, 2025
bde6612
Merge branch 'develop' into multi-message-Storage
Xaositek Dec 1, 2025
ab04441
Merge branch 'develop' into multi-message-Storage
Xaositek Dec 2, 2025
493eb32
Merge branch 'develop' into multi-message-Storage
Xaositek Dec 2, 2025
0b43c5b
Merge branch 'develop' into multi-message-Storage
Xaositek Dec 2, 2025
b29fe39
Correct string length calculation for signal bars
Xaositek Dec 3, 2025
34b1652
Merge branch 'develop' into multi-message-Storage
Xaositek Dec 3, 2025
903ddb5
Merge branch 'develop' into multi-message-Storage
Xaositek Dec 4, 2025
1381bb1
Manual message scrolling
HarukiToreda Dec 5, 2025
c0728b0
Fix
HarukiToreda Dec 5, 2025
87c0090
Restore CannedMessages on Home Frame
Xaositek Dec 5, 2025
03dba76
UpDown situational destination for textMessage
Xaositek Dec 5, 2025
fb93246
Correct up/down destinations on textMessage frame
Xaositek Dec 6, 2025
f4fd3e7
Merge branch 'develop' into multi-message-Storage
Xaositek Dec 7, 2025
b86a4c0
Merge branch 'develop' into multi-message-Storage
Xaositek Dec 8, 2025
12d1f50
Merge branch 'develop' into multi-message-Storage
Xaositek Dec 8, 2025
6df2ae9
Update Screen.h for handleTextMessage
Xaositek Dec 8, 2025
85c2226
Update Screen.cpp to repair a merge issue
Xaositek Dec 8, 2025
2bcf342
Merge branch 'develop' into multi-message-Storage
Xaositek Dec 8, 2025
6c02f82
Merge branch 'develop' into multi-message-Storage
Xaositek Dec 9, 2025
9d7bc38
Add nudge scroll on UpDownEncoder devices.
whywilson Dec 9, 2025
20887eb
Merge pull request #8907 from mtoolstec/multi-message-storage
thebentern Dec 9, 2025
5ae9627
Merge branch 'develop' into multi-message-Storage
Xaositek Dec 9, 2025
d4b44b1
Merge branch 'develop' into multi-message-Storage
Xaositek Dec 9, 2025
9d5b69f
Merge branch 'develop' into multi-message-Storage
Xaositek Dec 9, 2025
0b22382
Merge branch 'develop' into multi-message-Storage
Xaositek Dec 10, 2025
e254f39
Set nodeName to maximum size
Xaositek Dec 10, 2025
4a35fd8
Merge branch 'develop' into multi-message-Storage
Xaositek Dec 10, 2025
bbfddea
Merge branch 'develop' into multi-message-Storage
Xaositek Dec 11, 2025
7515123
Merge branch 'develop' into multi-message-Storage
Xaositek Dec 11, 2025
2634978
Revert "Set nodeName to maximum size"
Xaositek Dec 11, 2025
4e7b87b
Merge branch 'develop' into multi-message-Storage
Xaositek Dec 11, 2025
eeb5d04
Reflow Node Lists and TLora Pager Views (#8942)
Xaositek Dec 11, 2025
71bc999
Short or Long Names for everyone!
Xaositek Dec 11, 2025
cfea55d
Add scrolling to Node list
HarukiToreda Dec 12, 2025
4abd3f9
Merge branch 'develop' into multi-message-Storage
Xaositek Dec 12, 2025
ef99939
Pagination fix for Latest to oldest per page
HarukiToreda Dec 12, 2025
1b7104b
Page counters
HarukiToreda Dec 12, 2025
2dc54cd
Dynamic scaling of column counts based upon screen size, clean up box…
Xaositek Dec 12, 2025
f68ef9f
Reflow Node Lists and TLora Pager Views (#8942)
Xaositek Dec 11, 2025
f3ebdec
Short or Long Names for everyone!
Xaositek Dec 11, 2025
d6bf0a3
Add scrolling to Node list
HarukiToreda Dec 12, 2025
b150c56
Pagination fix for Latest to oldest per page
HarukiToreda Dec 12, 2025
bca169d
Page counters
HarukiToreda Dec 12, 2025
11cd637
Dynamic scaling of column counts based upon screen size, clean up box…
Xaositek Dec 12, 2025
59e25ff
Merge branch 'develop' into multi-message-Storage
jp-bennett Dec 12, 2025
f09183f
Update exempt labels for stale bot workflow
fifieldt Oct 16, 2025
001699f
Merge branch 'multi-message-Storage' of https://github.com/meshtastic…
HarukiToreda Dec 12, 2025
0597ae4
Update naming of Frame Visibility toggles
Xaositek Dec 12, 2025
ddc8d24
Fix to scrolling
HarukiToreda Dec 14, 2025
eb0cdc4
Fix for content cutting off when from us
HarukiToreda Dec 14, 2025
634aa98
Fix for "delete this chat" now it does delete the current one
HarukiToreda Dec 14, 2025
d08fe49
Merge branch 'develop' into multi-message-Storage
Xaositek Dec 14, 2025
22ee679
Merge branch 'develop' into multi-message-Storage
thebentern Dec 16, 2025
a0b4e82
Rework isHighResolution to be an enum called ScreenResolution
Xaositek Dec 16, 2025
6dfa532
Migrate Unit C6L macro guards into currentResolution UltraLow checks
Xaositek Dec 17, 2025
eba01d3
Merge branch 'develop' into multi-message-Storage
Xaositek Dec 17, 2025
3088e37
Mistakes happen - restoring NodeList Renderer line
Xaositek Dec 17, 2025
2df2c1f
Merge branch 'develop' into multi-message-Storage
Xaositek Dec 17, 2025
3bbcb93
Merge branch 'develop' into multi-message-Storage
Xaositek Dec 19, 2025
5c7084d
Merge branch 'develop' into multi-message-Storage
Xaositek Dec 20, 2025
3ff86ce
Merge branch 'develop' into multi-message-Storage
Xaositek Dec 21, 2025
6273c95
Merge branch 'develop' into multi-message-Storage
Xaositek Dec 23, 2025
b37d0b3
Merge branch 'develop' into multi-message-Storage
Xaositek Dec 24, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
426 changes: 426 additions & 0 deletions src/MessageStore.cpp

Large diffs are not rendered by default.

131 changes: 131 additions & 0 deletions src/MessageStore.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
#pragma once

#if HAS_SCREEN

// Disable debug logging entirely on release builds of HELTEC_MESH_SOLAR for space constraints
#if defined(HELTEC_MESH_SOLAR)
#define LOG_DEBUG(...)
#endif

// Enable or disable message persistence (flash storage)
// Define -DENABLE_MESSAGE_PERSISTENCE=0 in build_flags to disable it entirely
#ifndef ENABLE_MESSAGE_PERSISTENCE
#define ENABLE_MESSAGE_PERSISTENCE 1
#endif

#include "mesh/generated/meshtastic/mesh.pb.h"
#include <cstdint>
#include <deque>
#include <string>

// How many messages are stored (RAM + flash).
// Define -DMESSAGE_HISTORY_LIMIT=N in build_flags to control memory usage.
#ifndef MESSAGE_HISTORY_LIMIT
#define MESSAGE_HISTORY_LIMIT 20
#endif

// Internal alias used everywhere in code – do NOT redefine elsewhere.
#define MAX_MESSAGES_SAVED MESSAGE_HISTORY_LIMIT

// Maximum text payload size per message in bytes.
// This still defines the max message length, but we no longer reserve this space per message.
#define MAX_MESSAGE_SIZE 220

// Total shared text pool size for all messages combined.
// The text pool is RAM-only. Text is re-stored from flash into the pool on boot.
#ifndef MESSAGE_TEXT_POOL_SIZE
#define MESSAGE_TEXT_POOL_SIZE (MAX_MESSAGES_SAVED * MAX_MESSAGE_SIZE)
#endif

// Explicit message classification
enum class MessageType : uint8_t {
BROADCAST = 0, // broadcast message
DM_TO_US = 1 // direct message addressed to this node
};

// Delivery status for messages we sent
enum class AckStatus : uint8_t {
NONE = 0, // just sent, waiting (no symbol shown)
ACKED = 1, // got a valid ACK from destination
NACKED = 2, // explicitly failed
TIMEOUT = 3, // no ACK after retry window
RELAYED = 4 // got an ACK from relay, not destination
};

struct StoredMessage {
uint32_t timestamp; // When message was created (secs since boot or RTC)
uint32_t sender; // NodeNum of sender
uint8_t channelIndex; // Channel index used
uint32_t dest; // Destination node (broadcast or direct)
MessageType type; // Derived from dest (explicit classification)
bool isBootRelative; // true = millis()/1000 fallback; false = epoch/RTC absolute
AckStatus ackStatus; // Delivery status (only meaningful for our own sent messages)

// Text storage metadata — rebuilt from flash at boot
uint16_t textOffset; // Offset into global text pool (valid only after loadFromFlash())
uint16_t textLength; // Length of text in bytes

// Default constructor initializes all fields safely
StoredMessage()
: timestamp(0), sender(0), channelIndex(0), dest(0xffffffff), type(MessageType::BROADCAST), isBootRelative(false),
ackStatus(AckStatus::NONE), textOffset(0), textLength(0)
{
}
};

class MessageStore
{
public:
explicit MessageStore(const std::string &label);

// Live RAM methods (always current, used by UI and runtime)
void addLiveMessage(StoredMessage &&msg);
void addLiveMessage(const StoredMessage &msg); // convenience overload
const std::deque<StoredMessage> &getLiveMessages() const { return liveMessages; }

// Add new messages from packets or manual input
const StoredMessage &addFromPacket(const meshtastic_MeshPacket &mp); // Incoming/outgoing → RAM only
void addFromString(uint32_t sender, uint8_t channelIndex, const std::string &text); // Manual add

// Persistence methods (used only on boot/shutdown)
void saveToFlash(); // Save messages to flash
void loadFromFlash(); // Load messages from flash

// Clear all messages (RAM + persisted queue + text pool)
void clearAllMessages();

// Delete helpers
void deleteOldestMessage(); // remove oldest from RAM (and flash on save)
void deleteOldestMessageInChannel(uint8_t channel);
void deleteOldestMessageWithPeer(uint32_t peer);
void deleteAllMessagesInChannel(uint8_t channel);
void deleteAllMessagesWithPeer(uint32_t peer);

// Unified accessor (for UI code, defaults to RAM buffer)
const std::deque<StoredMessage> &getMessages() const { return liveMessages; }

// Helper filters for future use
std::deque<StoredMessage> getChannelMessages(uint8_t channel) const; // Only broadcast messages on a channel
std::deque<StoredMessage> getDirectMessages() const; // Only direct messages

// Upgrade boot-relative timestamps once RTC is valid
void upgradeBootRelativeTimestamps();

// Retrieve the C-string text for a stored message
static const char *getText(const StoredMessage &msg);

// Allocate text into pool (used by sender-side code)
static uint16_t storeText(const char *src, size_t len);

// Used when loading from flash to rebuild the text pool
static uint16_t rebuildTextFromFlash(const char *src, size_t len);

private:
std::deque<StoredMessage> liveMessages; // Single in-RAM message buffer (also used for persistence)
std::string filename; // Flash filename for persistence
};

// Global instance (defined in MessageStore.cpp)
extern MessageStore messageStore;

#endif
5 changes: 4 additions & 1 deletion src/Power.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
* For more information, see: https://meshtastic.org/
*/
#include "power.h"
#include "MessageStore.h"
#include "NodeDB.h"
#include "PowerFSM.h"
#include "Throttle.h"
Expand Down Expand Up @@ -786,7 +787,9 @@ void Power::shutdown()
playShutdownMelody();
#endif
nodeDB->saveToDisk();

#if HAS_SCREEN
messageStore.saveToFlash();
#endif
#if defined(ARCH_NRF52) || defined(ARCH_ESP32) || defined(ARCH_RP2040)
#ifdef PIN_LED1
ledOff(PIN_LED1);
Expand Down
1 change: 1 addition & 0 deletions src/RedirectablePrint.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ void RedirectablePrint::log_to_serial(const char *logLevel, const char *format,
int hour = hms / SEC_PER_HOUR;
int min = (hms % SEC_PER_HOUR) / SEC_PER_MIN;
int sec = (hms % SEC_PER_HOUR) % SEC_PER_MIN; // or hms % SEC_PER_MIN

#ifdef ARCH_PORTDUINO
::printf("%s ", logLevel);
if (color) {
Expand Down
Loading
Loading