mirror of
https://github.com/meshtastic/firmware.git
synced 2025-04-29 11:01:15 +00:00
fix: nodenum 4 (#2798)
* tryfix: nodenum 4 * trunk fmt * rename vars and fix brackets * purge invalid db entries * trunk fmt
This commit is contained in:
parent
a1514b8b64
commit
1bae926576
@ -304,6 +304,19 @@ void NodeDB::resetNodes()
|
|||||||
neighborInfoModule->resetNeighbors();
|
neighborInfoModule->resetNeighbors();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NodeDB::cleanupMeshDB()
|
||||||
|
{
|
||||||
|
int newPos = 0, removed = 0;
|
||||||
|
for (int i = 0; i < *numMeshNodes; i++) {
|
||||||
|
if (meshNodes[i].has_user)
|
||||||
|
meshNodes[newPos++] = meshNodes[i];
|
||||||
|
else
|
||||||
|
removed++;
|
||||||
|
}
|
||||||
|
*numMeshNodes -= removed;
|
||||||
|
LOG_DEBUG("cleanupMeshDB purged %d entries\n", removed);
|
||||||
|
}
|
||||||
|
|
||||||
void NodeDB::installDefaultDeviceState()
|
void NodeDB::installDefaultDeviceState()
|
||||||
{
|
{
|
||||||
LOG_INFO("Installing default DeviceState\n");
|
LOG_INFO("Installing default DeviceState\n");
|
||||||
@ -333,6 +346,7 @@ void NodeDB::init()
|
|||||||
{
|
{
|
||||||
LOG_INFO("Initializing NodeDB\n");
|
LOG_INFO("Initializing NodeDB\n");
|
||||||
loadFromDisk();
|
loadFromDisk();
|
||||||
|
cleanupMeshDB();
|
||||||
|
|
||||||
uint32_t devicestateCRC = crc32Buffer(&devicestate, sizeof(devicestate));
|
uint32_t devicestateCRC = crc32Buffer(&devicestate, sizeof(devicestate));
|
||||||
uint32_t configCRC = crc32Buffer(&config, sizeof(config));
|
uint32_t configCRC = crc32Buffer(&config, sizeof(config));
|
||||||
@ -388,25 +402,20 @@ void NodeDB::init()
|
|||||||
*/
|
*/
|
||||||
void NodeDB::pickNewNodeNum()
|
void NodeDB::pickNewNodeNum()
|
||||||
{
|
{
|
||||||
NodeNum r = myNodeInfo.my_node_num;
|
|
||||||
|
|
||||||
getMacAddr(ourMacAddr); // Make sure ourMacAddr is set
|
getMacAddr(ourMacAddr); // Make sure ourMacAddr is set
|
||||||
|
|
||||||
// Pick an initial nodenum based on the macaddr
|
// Pick an initial nodenum based on the macaddr
|
||||||
r = (ourMacAddr[2] << 24) | (ourMacAddr[3] << 16) | (ourMacAddr[4] << 8) | ourMacAddr[5];
|
NodeNum nodeNum = (ourMacAddr[2] << 24) | (ourMacAddr[3] << 16) | (ourMacAddr[4] << 8) | ourMacAddr[5];
|
||||||
|
|
||||||
if (r == NODENUM_BROADCAST || r < NUM_RESERVED)
|
|
||||||
r = NUM_RESERVED; // don't pick a reserved node number
|
|
||||||
|
|
||||||
meshtastic_NodeInfoLite *found;
|
meshtastic_NodeInfoLite *found;
|
||||||
while ((found = getMeshNode(r)) && memcmp(found->user.macaddr, owner.macaddr, sizeof(owner.macaddr))) {
|
while ((nodeNum == NODENUM_BROADCAST || nodeNum < NUM_RESERVED) ||
|
||||||
// FIXME: input for random() is int, so NODENUM_BROADCAST becomes -1
|
((found = getMeshNode(nodeNum)) && memcmp(found->user.macaddr, owner.macaddr, sizeof(owner.macaddr)) != 0)) {
|
||||||
NodeNum n = random(NUM_RESERVED, NODENUM_BROADCAST); // try a new random choice
|
NodeNum candidate = random(NUM_RESERVED, LONG_MAX); // try a new random choice
|
||||||
LOG_WARN("NOTE! Our desired nodenum 0x%x is in use, so trying for 0x%x\n", r, n);
|
LOG_WARN("NOTE! Our desired nodenum 0x%x is invalid or in use, so trying for 0x%x\n", nodeNum, candidate);
|
||||||
r = n;
|
nodeNum = candidate;
|
||||||
}
|
}
|
||||||
|
|
||||||
myNodeInfo.my_node_num = r;
|
myNodeInfo.my_node_num = nodeNum;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *prefFileName = "/prefs/db.proto";
|
static const char *prefFileName = "/prefs/db.proto";
|
||||||
|
@ -146,6 +146,9 @@ class NodeDB
|
|||||||
/// read our db from flash
|
/// read our db from flash
|
||||||
void loadFromDisk();
|
void loadFromDisk();
|
||||||
|
|
||||||
|
/// purge db entries without user info
|
||||||
|
void cleanupMeshDB();
|
||||||
|
|
||||||
/// Reinit device state from scratch (not loading from disk)
|
/// Reinit device state from scratch (not loading from disk)
|
||||||
void installDefaultDeviceState(), installDefaultChannels(), installDefaultConfig(), installDefaultModuleConfig();
|
void installDefaultDeviceState(), installDefaultChannels(), installDefaultConfig(), installDefaultModuleConfig();
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user