Save Neighbors to flash

This commit is contained in:
GUVWAF 2023-08-02 20:55:59 +02:00
parent f1bcc300d9
commit e05c8e60d9
2 changed files with 12 additions and 5 deletions

View File

@ -134,8 +134,6 @@ bool NodeDB::factoryReset()
installDefaultChannels(); installDefaultChannels();
// third, write everything to disk // third, write everything to disk
saveToDisk(); saveToDisk();
// write NeighbourInfo
neighborInfoModule->saveProtoForModule();
#ifdef ARCH_ESP32 #ifdef ARCH_ESP32
// This will erase what's in NVS including ssl keys, persistent variables and ble pairing // This will erase what's in NVS including ssl keys, persistent variables and ble pairing
nvs_flash_erase(); nvs_flash_erase();
@ -290,7 +288,8 @@ void NodeDB::resetNodes()
devicestate.node_db_lite_count = 0; devicestate.node_db_lite_count = 0;
memset(devicestate.node_db_lite, 0, sizeof(devicestate.node_db_lite)); memset(devicestate.node_db_lite, 0, sizeof(devicestate.node_db_lite));
saveDeviceStateToDisk(); saveDeviceStateToDisk();
neighborInfoModule->resetNeighbors(); if (neighborInfoModule && moduleConfig.neighbor_info.enabled)
neighborInfoModule->resetNeighbors();
} }
void NodeDB::installDefaultDeviceState() void NodeDB::installDefaultDeviceState()
@ -841,4 +840,4 @@ void recordCriticalError(meshtastic_CriticalErrorCode code, uint32_t address, co
LOG_ERROR("A critical failure occurred, portduino is exiting..."); LOG_ERROR("A critical failure occurred, portduino is exiting...");
exit(2); exit(2);
#endif #endif
} }

View File

@ -173,6 +173,11 @@ size_t NeighborInfoModule::cleanUpNeighbors()
(*numNeighbors)--; (*numNeighbors)--;
} }
// Save the neighbor list if we removed any neighbors
if (indices_to_remove.size() > 0) {
saveProtoForModule();
}
return *numNeighbors; return *numNeighbors;
} }
@ -207,7 +212,7 @@ Pass it to an upper client; do not persist this data on the mesh
*/ */
bool NeighborInfoModule::handleReceivedProtobuf(const meshtastic_MeshPacket &mp, meshtastic_NeighborInfo *np) bool NeighborInfoModule::handleReceivedProtobuf(const meshtastic_MeshPacket &mp, meshtastic_NeighborInfo *np)
{ {
printNeighborInfo("RECIEVED", np); printNeighborInfo("RECEIVED", np);
updateNeighbors(mp, np); updateNeighbors(mp, np);
// Allow others to handle this packet // Allow others to handle this packet
return false; return false;
@ -234,6 +239,7 @@ void NeighborInfoModule::updateLastSentById(meshtastic_MeshPacket *p)
void NeighborInfoModule::resetNeighbors() void NeighborInfoModule::resetNeighbors()
{ {
*numNeighbors = 0;
neighborState.neighbors_count = 0; neighborState.neighbors_count = 0;
memset(neighborState.neighbors, 0, sizeof(neighborState.neighbors)); memset(neighborState.neighbors, 0, sizeof(neighborState.neighbors));
saveProtoForModule(); saveProtoForModule();
@ -265,6 +271,7 @@ meshtastic_Neighbor *NeighborInfoModule::getOrCreateNeighbor(NodeNum originalSen
// Only if this is the original sender, the broadcast interval corresponds to it // Only if this is the original sender, the broadcast interval corresponds to it
if (originalSender == n) if (originalSender == n)
nbr->node_broadcast_interval_secs = node_broadcast_interval_secs; nbr->node_broadcast_interval_secs = node_broadcast_interval_secs;
saveProtoForModule(); // Save the updated neighbor
return nbr; return nbr;
} }
} }
@ -280,6 +287,7 @@ meshtastic_Neighbor *NeighborInfoModule::getOrCreateNeighbor(NodeNum originalSen
// Only if this is the original sender, the broadcast interval corresponds to it // Only if this is the original sender, the broadcast interval corresponds to it
if (originalSender == n) if (originalSender == n)
new_nbr->node_broadcast_interval_secs = node_broadcast_interval_secs; new_nbr->node_broadcast_interval_secs = node_broadcast_interval_secs;
saveProtoForModule(); // Save the new neighbor
return new_nbr; return new_nbr;
} }