Removing old left over code

This commit is contained in:
HarukiToreda 2025-10-14 15:17:11 -04:00
parent 4bd53500c6
commit 67c24c08cc
2 changed files with 32 additions and 61 deletions

View File

@ -52,16 +52,6 @@ void MessageStore::addLiveMessage(const StoredMessage &msg)
pushWithLimit(liveMessages, msg); pushWithLimit(liveMessages, msg);
} }
// Persistence queue (used only on shutdown/reboot)
void MessageStore::addMessage(StoredMessage &&msg)
{
pushWithLimit(messages, std::move(msg));
}
void MessageStore::addMessage(const StoredMessage &msg)
{
pushWithLimit(messages, msg);
}
// Add from incoming/outgoing packet // Add from incoming/outgoing packet
const StoredMessage &MessageStore::addFromPacket(const meshtastic_MeshPacket &packet) const StoredMessage &MessageStore::addFromPacket(const meshtastic_MeshPacket &packet)
{ {
@ -168,9 +158,6 @@ static inline bool readMessageRecord(File &f, StoredMessage &m)
void MessageStore::saveToFlash() void MessageStore::saveToFlash()
{ {
#ifdef FSCom #ifdef FSCom
// Copy live RAM buffer into persistence queue
messages = liveMessages;
// Ensure root exists // Ensure root exists
spiLock->lock(); spiLock->lock();
FSCom.mkdir("/"); FSCom.mkdir("/");
@ -179,13 +166,13 @@ void MessageStore::saveToFlash()
SafeFile f(filename.c_str(), false); SafeFile f(filename.c_str(), false);
spiLock->lock(); spiLock->lock();
uint8_t count = static_cast<uint8_t>(messages.size()); uint8_t count = static_cast<uint8_t>(liveMessages.size());
if (count > MAX_MESSAGES_SAVED) if (count > MAX_MESSAGES_SAVED)
count = MAX_MESSAGES_SAVED; count = MAX_MESSAGES_SAVED;
f.write(&count, 1); f.write(&count, 1);
for (uint8_t i = 0; i < count; ++i) { for (uint8_t i = 0; i < count; ++i) {
writeMessageRecord(f, messages[i]); writeMessageRecord(f, liveMessages[i]);
} }
spiLock->unlock(); spiLock->unlock();
@ -195,7 +182,6 @@ void MessageStore::saveToFlash()
void MessageStore::loadFromFlash() void MessageStore::loadFromFlash()
{ {
messages.clear();
liveMessages.clear(); liveMessages.clear();
#ifdef FSCom #ifdef FSCom
concurrency::LockGuard guard(spiLock); concurrency::LockGuard guard(spiLock);
@ -216,8 +202,7 @@ void MessageStore::loadFromFlash()
StoredMessage m; StoredMessage m;
if (!readMessageRecord(f, m)) if (!readMessageRecord(f, m))
break; break;
messages.push_back(m); liveMessages.push_back(m);
liveMessages.push_back(m); // restore into RAM buffer
} }
f.close(); f.close();
@ -234,7 +219,6 @@ void MessageStore::loadFromFlash() {}
void MessageStore::clearAllMessages() void MessageStore::clearAllMessages()
{ {
liveMessages.clear(); liveMessages.clear();
messages.clear();
#ifdef FSCom #ifdef FSCom
SafeFile f(filename.c_str(), false); SafeFile f(filename.c_str(), false);
@ -271,7 +255,6 @@ template <typename Predicate> static void eraseIf(std::deque<StoredMessage> &deq
void MessageStore::dismissOldestMessage() void MessageStore::dismissOldestMessage()
{ {
eraseIf(liveMessages, [](StoredMessage &) { return true; }); eraseIf(liveMessages, [](StoredMessage &) { return true; });
eraseIf(messages, [](StoredMessage &) { return true; });
saveToFlash(); saveToFlash();
} }
@ -280,7 +263,6 @@ void MessageStore::dismissOldestMessageInChannel(uint8_t channel)
{ {
auto pred = [channel](const StoredMessage &m) { return m.type == MessageType::BROADCAST && m.channelIndex == channel; }; auto pred = [channel](const StoredMessage &m) { return m.type == MessageType::BROADCAST && m.channelIndex == channel; };
eraseIf(liveMessages, pred); eraseIf(liveMessages, pred);
eraseIf(messages, pred);
saveToFlash(); saveToFlash();
} }
@ -288,14 +270,12 @@ void MessageStore::dismissOldestMessageInChannel(uint8_t channel)
void MessageStore::dismissOldestMessageWithPeer(uint32_t peer) void MessageStore::dismissOldestMessageWithPeer(uint32_t peer)
{ {
auto pred = [peer](const StoredMessage &m) { auto pred = [peer](const StoredMessage &m) {
if (m.type == MessageType::DM_TO_US) { if (m.type != MessageType::DM_TO_US)
uint32_t other = (m.sender == nodeDB->getNodeNum()) ? m.dest : m.sender; return false;
return other == peer; uint32_t other = (m.sender == nodeDB->getNodeNum()) ? m.dest : m.sender;
} return other == peer;
return false;
}; };
eraseIf(liveMessages, pred); eraseIf(liveMessages, pred);
eraseIf(messages, pred);
saveToFlash(); saveToFlash();
} }
@ -344,9 +324,8 @@ void MessageStore::upgradeBootRelativeTimestamps()
} }
}; };
fix(liveMessages); fix(liveMessages);
fix(messages);
} }
// Global definition // Global definition
MessageStore messageStore("default"); MessageStore messageStore("default");
#endif #endif

View File

@ -18,7 +18,7 @@
#include <deque> #include <deque>
#include <string> #include <string>
// how many messages are stored (RAM + flash). // How many messages are stored (RAM + flash).
// Define -DMESSAGE_HISTORY_LIMIT=N in build_flags to control memory usage. // Define -DMESSAGE_HISTORY_LIMIT=N in build_flags to control memory usage.
#ifndef MESSAGE_HISTORY_LIMIT #ifndef MESSAGE_HISTORY_LIMIT
#define MESSAGE_HISTORY_LIMIT 20 #define MESSAGE_HISTORY_LIMIT 20
@ -28,10 +28,14 @@
#define MAX_MESSAGES_SAVED MESSAGE_HISTORY_LIMIT #define MAX_MESSAGES_SAVED MESSAGE_HISTORY_LIMIT
// Maximum text payload size per message in bytes (fixed). // Maximum text payload size per message in bytes (fixed).
// All messages use the same size to simplify memory handling and avoid dynamic allocations.
#define MAX_MESSAGE_SIZE 220 #define MAX_MESSAGE_SIZE 220
// Explicit message classification // Explicit message classification
enum class MessageType : uint8_t { BROADCAST = 0, DM_TO_US = 1 }; 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 // Delivery status for messages we sent
enum class AckStatus : uint8_t { enum class AckStatus : uint8_t {
@ -44,25 +48,20 @@ enum class AckStatus : uint8_t {
// A single stored message in RAM and/or flash // A single stored message in RAM and/or flash
struct StoredMessage { struct StoredMessage {
uint32_t timestamp; // When message was created (secs since boot/RTC) uint32_t timestamp; // When message was created (secs since boot or RTC)
uint32_t sender; // NodeNum of sender uint32_t sender; // NodeNum of sender
uint8_t channelIndex; // Channel index used uint8_t channelIndex; // Channel index used
char text[MAX_MESSAGE_SIZE]; // fixed buffer for message text char text[MAX_MESSAGE_SIZE]; // Fixed-size buffer for message text (null-terminated)
// Destination node. uint32_t dest; // Destination node (broadcast or direct)
uint32_t dest;
// Explicit classification (derived from dest when loading old messages) MessageType type; // Derived from dest (explicit classification)
MessageType type;
// Marks whether the timestamp was stored relative to boot time bool isBootRelative; // true = millis()/1000 fallback; false = epoch/RTC absolute
// (true = millis()/1000 fallback, false = epoch/RTC absolute)
bool isBootRelative;
// Delivery status (only meaningful for our own sent messages) AckStatus ackStatus; // Delivery status (only meaningful for our own sent messages)
AckStatus ackStatus;
// Default constructor to initialize all fields safely // Default constructor initializes all fields safely
StoredMessage() StoredMessage()
: timestamp(0), sender(0), channelIndex(0), text(""), dest(0xffffffff), type(MessageType::BROADCAST), : timestamp(0), sender(0), channelIndex(0), text(""), dest(0xffffffff), type(MessageType::BROADCAST),
isBootRelative(false), ackStatus(AckStatus::NONE) // start as NONE (waiting, no symbol) isBootRelative(false), ackStatus(AckStatus::NONE) // start as NONE (waiting, no symbol)
@ -80,19 +79,19 @@ class MessageStore
void addLiveMessage(const StoredMessage &msg); // convenience overload void addLiveMessage(const StoredMessage &msg); // convenience overload
const std::deque<StoredMessage> &getLiveMessages() const { return liveMessages; } 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) // Persistence methods (used only on boot/shutdown)
void addMessage(StoredMessage &&msg); void saveToFlash(); // Save messages to flash
void addMessage(const StoredMessage &msg); // convenience overload void loadFromFlash(); // Load messages from flash
const StoredMessage &addFromPacket(const meshtastic_MeshPacket &mp); // Incoming/outgoing → RAM only
void addFromString(uint32_t sender, uint8_t channelIndex, const std::string &text);
void saveToFlash();
void loadFromFlash();
// Clear all messages (RAM + persisted queue) // Clear all messages (RAM + persisted queue)
void clearAllMessages(); void clearAllMessages();
// Dismiss helpers // Dismiss helpers
void dismissOldestMessage(); void dismissOldestMessage(); // remove oldest from RAM (and flash on save)
// New targeted dismiss helpers // New targeted dismiss helpers
void dismissOldestMessageInChannel(uint8_t channel); void dismissOldestMessageInChannel(uint8_t channel);
@ -101,23 +100,16 @@ class MessageStore
// Unified accessor (for UI code, defaults to RAM buffer) // Unified accessor (for UI code, defaults to RAM buffer)
const std::deque<StoredMessage> &getMessages() const { return liveMessages; } const std::deque<StoredMessage> &getMessages() const { return liveMessages; }
// Optional: direct access to persisted copy (mainly for debugging/inspection)
const std::deque<StoredMessage> &getPersistedMessages() const { return messages; }
// Helper filters for future use // Helper filters for future use
std::deque<StoredMessage> getChannelMessages(uint8_t channel) const; std::deque<StoredMessage> getChannelMessages(uint8_t channel) const; // Only broadcast messages on a channel
std::deque<StoredMessage> getDirectMessages() const; std::deque<StoredMessage> getDirectMessages() const; // Only direct messages
// Upgrade boot-relative timestamps once RTC is valid // Upgrade boot-relative timestamps once RTC is valid
void upgradeBootRelativeTimestamps(); void upgradeBootRelativeTimestamps();
// Debug helper to log serialized size of messages
void logMemoryUsage(const char *context) const;
private: private:
std::deque<StoredMessage> liveMessages; // current in-RAM messages std::deque<StoredMessage> liveMessages; // Single in-RAM message buffer (also used for persistence)
std::deque<StoredMessage> messages; // persisted copy on flash std::string filename; // Flash filename for persistence
std::string filename; // flash filename for persistence
}; };
// Global instance (defined in MessageStore.cpp) // Global instance (defined in MessageStore.cpp)