diff --git a/src/mesh/NodeDB.cpp b/src/mesh/NodeDB.cpp index 4e06d263a..22ea77e93 100644 --- a/src/mesh/NodeDB.cpp +++ b/src/mesh/NodeDB.cpp @@ -225,13 +225,20 @@ void NodeDB::installDefaultChannels() channelFile.version = DEVICESTATE_CUR_VER; } +void NodeDB::resetNodes() +{ + devicestate.node_db_count = 0; + memset(devicestate.node_db, 0, sizeof(devicestate.node_db)); + saveDeviceStateToDisk(); +} + void NodeDB::installDefaultDeviceState() { DEBUG_MSG("Installing default DeviceState\n"); memset(&devicestate, 0, sizeof(DeviceState)); - *numNodes = 0; // Forget node DB - + *numNodes = 0; + // init our devicestate with valid flags so protobuf writing/reading will work devicestate.has_my_node = true; devicestate.has_owner = true; diff --git a/src/mesh/NodeDB.h b/src/mesh/NodeDB.h index 429e79fdc..47145fc34 100644 --- a/src/mesh/NodeDB.h +++ b/src/mesh/NodeDB.h @@ -115,7 +115,7 @@ class NodeDB /// Return the number of nodes we've heard from recently (within the last 2 hrs?) size_t getNumOnlineNodes(); - void initConfigIntervals(), initModuleConfigIntervals(); + void initConfigIntervals(), initModuleConfigIntervals(), resetNodes(); bool factoryReset(); diff --git a/src/modules/AdminModule.cpp b/src/modules/AdminModule.cpp index 9dcdcda9c..4dd9d57b5 100644 --- a/src/modules/AdminModule.cpp +++ b/src/modules/AdminModule.cpp @@ -120,6 +120,12 @@ bool AdminModule::handleReceivedProtobuf(const MeshPacket &mp, AdminMessage *r) rebootAtMsec = millis() + (5 * 1000); break; } + case AdminMessage_nodedb_reset_tag: { + DEBUG_MSG("Initiating node-db reset\n"); + nodeDB.resetNodes(); + rebootAtMsec = millis() + (5 * 1000); + break; + } #ifdef ARCH_PORTDUINO case AdminMessage_exit_simulator_tag: DEBUG_MSG("Exiting simulator\n");