Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
5d0113c
Conditionally delete favourited nodes on reset
ford-jones Oct 10, 2025
29585aa
trunk fmt
ford-jones Oct 10, 2025
da8a3a3
Fix equality check, use existing macro for role validation
ford-jones Oct 10, 2025
39be63d
Extend favourite persistence setting to devices of all roles
ford-jones Oct 10, 2025
0de61c3
Refactor: Decoupled role/config check and set role defaults appropria…
ford-jones Oct 11, 2025
a0df0a3
Use American-English spelling
ford-jones Oct 11, 2025
8fbd1d1
Use existing reference
ford-jones Oct 11, 2025
eca3d2d
Convert reset to bool, regen protos
ford-jones Oct 12, 2025
93ee451
Add optional arg to nodedb_reset in favor of additional device setting
ford-jones Oct 12, 2025
bee7eed
Merge branch 'develop' into 8226-persisted-favorites
ford-jones Oct 12, 2025
1347c9c
Use correct proto commit ID
ford-jones Oct 12, 2025
d4aa213
Pull latest
ford-jones Oct 12, 2025
be93508
Regen protos
ford-jones Oct 12, 2025
a843ba3
Merge branch 'develop' of https://github.com/meshtastic/firmware into…
ford-jones Oct 12, 2025
e9aca19
Merge branch 'develop' into 8226-persisted-favorites
ford-jones Oct 13, 2025
5fbf137
Merge branch 'develop' into 8226-persisted-favorites
ford-jones Oct 14, 2025
5b6b678
Merge branch 'develop' into 8226-persisted-favorites
ford-jones Oct 18, 2025
ee58836
Resolve proto conflicts
ford-jones Oct 21, 2025
8f7e3ca
Merge branch '8226-persisted-favorites' of https://github.com/ford-jo…
ford-jones Oct 21, 2025
30c3e97
Log preservation status
ford-jones Oct 21, 2025
83afecf
Merge branch 'develop' into 8226-persisted-favorites
ford-jones Oct 22, 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
2 changes: 1 addition & 1 deletion protobufs
17 changes: 15 additions & 2 deletions src/mesh/NodeDB.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -978,12 +978,25 @@ void NodeDB::installDefaultChannels()
channelFile.version = DEVICESTATE_CUR_VER;
}

void NodeDB::resetNodes()
void NodeDB::resetNodes(bool keepFavorites)
{
if (!config.position.fixed_position)
clearLocalPosition();
numMeshNodes = 1;
std::fill(nodeDatabase.nodes.begin() + 1, nodeDatabase.nodes.end(), meshtastic_NodeInfoLite());
if (keepFavorites) {
LOG_INFO("Clearing node database - preserving favorites");
for (size_t i = 0; i < meshNodes->size(); i++) {
meshtastic_NodeInfoLite &node = meshNodes->at(i);
if (i > 0 && !node.is_favorite) {
node = meshtastic_NodeInfoLite();
} else {
numMeshNodes += 1;
}
};
} else {
LOG_INFO("Clearing node database - removing favorites");
std::fill(nodeDatabase.nodes.begin() + 1, nodeDatabase.nodes.end(), meshtastic_NodeInfoLite());
}
devicestate.has_rx_text_message = false;
devicestate.has_rx_waypoint = false;
saveNodeDatabaseToDisk();
Expand Down
3 changes: 2 additions & 1 deletion src/mesh/NodeDB.h
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,8 @@ class NodeDB
*/
size_t getNumOnlineMeshNodes(bool localOnly = false);

void initConfigIntervals(), initModuleConfigIntervals(), resetNodes(), removeNodeByNum(NodeNum nodeNum);
void initConfigIntervals(), initModuleConfigIntervals(), resetNodes(bool keepFavorites = false),
removeNodeByNum(NodeNum nodeNum);

bool factoryReset(bool eraseBleBonds = false);

Expand Down
7 changes: 4 additions & 3 deletions src/mesh/generated/meshtastic/admin.pb.h
Original file line number Diff line number Diff line change
Expand Up @@ -272,8 +272,9 @@ typedef struct _meshtastic_AdminMessage {
int32_t shutdown_seconds;
/* Tell the node to factory reset config; all device state and configuration will be returned to factory defaults; BLE bonds will be preserved. */
int32_t factory_reset_config;
/* Tell the node to reset the nodedb. */
int32_t nodedb_reset;
/* Tell the node to reset the nodedb.
When true, favorites are preserved through reset. */
bool nodedb_reset;
};
/* The node generates this key and sends it with any get_x_response packets.
The client MUST include the same key with any set_x commands. Key expires after 300 seconds.
Expand Down Expand Up @@ -459,7 +460,7 @@ X(a, STATIC, ONEOF, BOOL, (payload_variant,exit_simulator,exit_simulato
X(a, STATIC, ONEOF, INT32, (payload_variant,reboot_seconds,reboot_seconds), 97) \
X(a, STATIC, ONEOF, INT32, (payload_variant,shutdown_seconds,shutdown_seconds), 98) \
X(a, STATIC, ONEOF, INT32, (payload_variant,factory_reset_config,factory_reset_config), 99) \
X(a, STATIC, ONEOF, INT32, (payload_variant,nodedb_reset,nodedb_reset), 100) \
X(a, STATIC, ONEOF, BOOL, (payload_variant,nodedb_reset,nodedb_reset), 100) \
X(a, STATIC, SINGULAR, BYTES, session_passkey, 101)
#define meshtastic_AdminMessage_CALLBACK NULL
#define meshtastic_AdminMessage_DEFAULT NULL
Expand Down
7 changes: 6 additions & 1 deletion src/modules/AdminModule.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,12 @@ bool AdminModule::handleReceivedProtobuf(const meshtastic_MeshPacket &mp, meshta
case meshtastic_AdminMessage_nodedb_reset_tag: {
disableBluetooth();
LOG_INFO("Initiate node-db reset");
nodeDB->resetNodes();
// CLIENT_BASE, ROUTER and ROUTER_LATE are able to preserve the remaining hop count when relaying a packet via a
// favorited node, so ensure that their favorites are kept on reset
bool rolePreference =
isOneOf(config.device.role, meshtastic_Config_DeviceConfig_Role_CLIENT_BASE,
meshtastic_Config_DeviceConfig_Role_ROUTER, meshtastic_Config_DeviceConfig_Role_ROUTER_LATE);
nodeDB->resetNodes(rolePreference ? rolePreference : r->nodedb_reset);
reboot(DEFAULT_REBOOT_SECONDS);
break;
}
Expand Down