mirror of
https://github.com/meshtastic/firmware.git
synced 2026-01-08 19:07:26 +00:00
Begin refactoring nodedb.cpp with public wrappers
This commit is contained in:
@@ -313,7 +313,7 @@ NodeDB::NodeDB()
|
|||||||
LOG_DEBUG("Number of Device Reboots: %d", myNodeInfo.reboot_count);
|
LOG_DEBUG("Number of Device Reboots: %d", myNodeInfo.reboot_count);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
resetRadioConfig(); // If bogus settings got saved, then fix them
|
_resetRadioConfig(); // If bogus settings got saved, then fix them
|
||||||
// nodeDB->LOG_DEBUG("region=%d, NODENUM=0x%x, dbsize=%d", config.lora.region, myNodeInfo.my_node_num, numMeshNodes);
|
// nodeDB->LOG_DEBUG("region=%d, NODENUM=0x%x, dbsize=%d", config.lora.region, myNodeInfo.my_node_num, numMeshNodes);
|
||||||
|
|
||||||
// Uncomment below to always enable UDP broadcasts
|
// Uncomment below to always enable UDP broadcasts
|
||||||
@@ -430,7 +430,7 @@ NodeDB::NodeDB()
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
sortMeshDB();
|
sortMeshDB();
|
||||||
saveToDisk(saveWhat);
|
_saveToDisk(saveWhat);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -459,7 +459,7 @@ bool isBroadcast(uint32_t dest)
|
|||||||
return dest == NODENUM_BROADCAST || dest == NODENUM_BROADCAST_NO_LORA;
|
return dest == NODENUM_BROADCAST || dest == NODENUM_BROADCAST_NO_LORA;
|
||||||
}
|
}
|
||||||
|
|
||||||
void NodeDB::resetRadioConfig(bool is_fresh_install)
|
void NodeDB::_resetRadioConfig(bool is_fresh_install)
|
||||||
{
|
{
|
||||||
if (is_fresh_install) {
|
if (is_fresh_install) {
|
||||||
radioGeneration++;
|
radioGeneration++;
|
||||||
@@ -497,7 +497,7 @@ bool NodeDB::factoryReset(bool eraseBleBonds)
|
|||||||
installDefaultModuleConfig();
|
installDefaultModuleConfig();
|
||||||
installDefaultChannels();
|
installDefaultChannels();
|
||||||
// third, write everything to disk
|
// third, write everything to disk
|
||||||
saveToDisk();
|
_saveToDisk();
|
||||||
if (eraseBleBonds) {
|
if (eraseBleBonds) {
|
||||||
LOG_INFO("Erase BLE bonds");
|
LOG_INFO("Erase BLE bonds");
|
||||||
#ifdef ARCH_ESP32
|
#ifdef ARCH_ESP32
|
||||||
@@ -648,7 +648,7 @@ void NodeDB::installDefaultConfig(bool preserveKey = false)
|
|||||||
config.device.node_info_broadcast_secs = default_node_info_broadcast_secs;
|
config.device.node_info_broadcast_secs = default_node_info_broadcast_secs;
|
||||||
config.security.serial_enabled = true;
|
config.security.serial_enabled = true;
|
||||||
config.security.admin_channel_enabled = false;
|
config.security.admin_channel_enabled = false;
|
||||||
resetRadioConfig(true); // This also triggers NodeInfo/Position requests since we're fresh
|
_resetRadioConfig(true); // This also triggers NodeInfo/Position requests since we're fresh
|
||||||
strncpy(config.network.ntp_server, "meshtastic.pool.ntp.org", 32);
|
strncpy(config.network.ntp_server, "meshtastic.pool.ntp.org", 32);
|
||||||
|
|
||||||
#if (defined(T_DECK) || defined(T_WATCH_S3) || defined(UNPHONE) || defined(PICOMPUTER_S3) || defined(SENSECAP_INDICATOR) || \
|
#if (defined(T_DECK) || defined(T_WATCH_S3) || defined(UNPHONE) || defined(PICOMPUTER_S3) || defined(SENSECAP_INDICATOR) || \
|
||||||
@@ -735,7 +735,7 @@ void NodeDB::installDefaultConfig(bool preserveKey = false)
|
|||||||
|
|
||||||
#ifdef USERPREFS_CONFIG_DEVICE_ROLE
|
#ifdef USERPREFS_CONFIG_DEVICE_ROLE
|
||||||
// Apply role-specific defaults when role is set via user preferences
|
// Apply role-specific defaults when role is set via user preferences
|
||||||
installRoleDefaults(config.device.role);
|
_installRoleDefaults(config.device.role);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
initConfigIntervals();
|
initConfigIntervals();
|
||||||
@@ -893,7 +893,7 @@ void NodeDB::installDefaultModuleConfig()
|
|||||||
initModuleConfigIntervals();
|
initModuleConfigIntervals();
|
||||||
}
|
}
|
||||||
|
|
||||||
void NodeDB::installRoleDefaults(meshtastic_Config_DeviceConfig_Role role)
|
void NodeDB::_installRoleDefaults(meshtastic_Config_DeviceConfig_Role role)
|
||||||
{
|
{
|
||||||
if (role == meshtastic_Config_DeviceConfig_Role_ROUTER) {
|
if (role == meshtastic_Config_DeviceConfig_Role_ROUTER) {
|
||||||
initConfigIntervals();
|
initConfigIntervals();
|
||||||
@@ -1203,7 +1203,7 @@ void NodeDB::loadFromDisk()
|
|||||||
if (backupSecurity.private_key.size > 0) {
|
if (backupSecurity.private_key.size > 0) {
|
||||||
LOG_DEBUG("Restoring backup of security config");
|
LOG_DEBUG("Restoring backup of security config");
|
||||||
config.security = backupSecurity;
|
config.security = backupSecurity;
|
||||||
saveToDisk(SEGMENT_CONFIG);
|
_saveToDisk(SEGMENT_CONFIG);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make sure we load hard coded admin keys even when the configuration file has none.
|
// Make sure we load hard coded admin keys even when the configuration file has none.
|
||||||
@@ -1254,7 +1254,7 @@ void NodeDB::loadFromDisk()
|
|||||||
if (numAdminKeys > 0) {
|
if (numAdminKeys > 0) {
|
||||||
LOG_INFO("Saving %d hard coded admin keys.", numAdminKeys);
|
LOG_INFO("Saving %d hard coded admin keys.", numAdminKeys);
|
||||||
config.security.admin_key_count = numAdminKeys;
|
config.security.admin_key_count = numAdminKeys;
|
||||||
saveToDisk(SEGMENT_CONFIG);
|
_saveToDisk(SEGMENT_CONFIG);
|
||||||
}
|
}
|
||||||
|
|
||||||
state = loadProto(moduleConfigFileName, meshtastic_LocalModuleConfig_size, sizeof(meshtastic_LocalModuleConfig),
|
state = loadProto(moduleConfigFileName, meshtastic_LocalModuleConfig_size, sizeof(meshtastic_LocalModuleConfig),
|
||||||
@@ -1306,7 +1306,7 @@ void NodeDB::loadFromDisk()
|
|||||||
if (moduleConfig.paxcounter.paxcounter_update_interval == 900)
|
if (moduleConfig.paxcounter.paxcounter_update_interval == 900)
|
||||||
moduleConfig.paxcounter.paxcounter_update_interval = 0;
|
moduleConfig.paxcounter.paxcounter_update_interval = 0;
|
||||||
|
|
||||||
saveToDisk(SEGMENT_MODULECONFIG);
|
_saveToDisk(SEGMENT_MODULECONFIG);
|
||||||
}
|
}
|
||||||
#if ARCH_PORTDUINO
|
#if ARCH_PORTDUINO
|
||||||
// set any config overrides
|
// set any config overrides
|
||||||
@@ -1405,7 +1405,7 @@ bool NodeDB::saveToDiskNoRetry(int saveWhat)
|
|||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool NodeDB::saveToDisk(int saveWhat)
|
bool NodeDB::_saveToDisk(int saveWhat)
|
||||||
{
|
{
|
||||||
LOG_DEBUG("Save to disk %d", saveWhat);
|
LOG_DEBUG("Save to disk %d", saveWhat);
|
||||||
bool success = saveToDiskNoRetry(saveWhat);
|
bool success = saveToDiskNoRetry(saveWhat);
|
||||||
@@ -1460,7 +1460,7 @@ uint32_t sinceReceived(const meshtastic_MeshPacket *p)
|
|||||||
|
|
||||||
#define NUM_ONLINE_SECS (60 * 60 * 2) // 2 hrs to consider someone offline
|
#define NUM_ONLINE_SECS (60 * 60 * 2) // 2 hrs to consider someone offline
|
||||||
|
|
||||||
size_t NodeDB::getNumOnlineMeshNodes(bool localOnly)
|
size_t NodeDB::_getNumOnlineMeshNodes(bool localOnly)
|
||||||
{
|
{
|
||||||
size_t numseen = 0;
|
size_t numseen = 0;
|
||||||
|
|
||||||
@@ -1599,7 +1599,7 @@ bool NodeDB::updateUser(uint32_t nodeId, meshtastic_User &p, uint8_t channelInde
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if !(MESHTASTIC_EXCLUDE_PKI)
|
#if !(MESHTASTIC_EXCLUDE_PKI)
|
||||||
if (p.public_key.size == 32 && nodeId != nodeDB->getNodeNum()) {
|
if (p.public_key.size == 32 && nodeId != getNodeNum()) {
|
||||||
printBytes("Incoming Pubkey: ", p.public_key.bytes, 32);
|
printBytes("Incoming Pubkey: ", p.public_key.bytes, 32);
|
||||||
|
|
||||||
// Alert the user if a remote node is advertising public key that matches our own
|
// Alert the user if a remote node is advertising public key that matches our own
|
||||||
@@ -1656,7 +1656,7 @@ bool NodeDB::updateUser(uint32_t nodeId, meshtastic_User &p, uint8_t channelInde
|
|||||||
// store our DB unless we just did so less than a minute ago
|
// store our DB unless we just did so less than a minute ago
|
||||||
|
|
||||||
if (!Throttle::isWithinTimespanMs(lastNodeDbSave, ONE_MINUTE_MS)) {
|
if (!Throttle::isWithinTimespanMs(lastNodeDbSave, ONE_MINUTE_MS)) {
|
||||||
saveToDisk(SEGMENT_NODEDATABASE);
|
_saveToDisk(SEGMENT_NODEDATABASE);
|
||||||
lastNodeDbSave = millis();
|
lastNodeDbSave = millis();
|
||||||
} else {
|
} else {
|
||||||
LOG_DEBUG("Defer NodeDB saveToDisk for now");
|
LOG_DEBUG("Defer NodeDB saveToDisk for now");
|
||||||
@@ -1733,25 +1733,25 @@ bool NodeDB::isFromOrToFavoritedNode(const meshtastic_MeshPacket &p)
|
|||||||
// 1. doing only one pass through the database, instead of two
|
// 1. doing only one pass through the database, instead of two
|
||||||
// 2. exiting early when a favorite is found, or if both from and to have been seen
|
// 2. exiting early when a favorite is found, or if both from and to have been seen
|
||||||
|
|
||||||
if (p.to == NODENUM_BROADCAST)
|
|
||||||
return isFavorite(p.from); // we never store NODENUM_BROADCAST in the DB, so we only need to check p.from
|
|
||||||
|
|
||||||
meshtastic_NodeInfoLite *lite = NULL;
|
meshtastic_NodeInfoLite *lite = NULL;
|
||||||
|
|
||||||
bool seenFrom = false;
|
bool seenFrom = false;
|
||||||
bool seenTo = false;
|
bool seenTo = false;
|
||||||
|
|
||||||
|
if (p.to == NODENUM_BROADCAST)
|
||||||
|
seenTo = true;
|
||||||
|
|
||||||
for (int i = 0; i < numMeshNodes; i++) {
|
for (int i = 0; i < numMeshNodes; i++) {
|
||||||
lite = &meshNodes->at(i);
|
lite = &meshNodes->at(i);
|
||||||
|
|
||||||
if (lite->num == p.from) {
|
if (!seenFrom && lite->num == p.from) {
|
||||||
if (lite->is_favorite)
|
if (lite->is_favorite)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
seenFrom = true;
|
seenFrom = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lite->num == p.to) {
|
if (!seenTo && lite->num == p.to) {
|
||||||
if (lite->is_favorite)
|
if (lite->is_favorite)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
@@ -1995,7 +1995,7 @@ bool NodeDB::restorePreferences(meshtastic_AdminMessage_BackupLocation location,
|
|||||||
LOG_DEBUG("Restored channels");
|
LOG_DEBUG("Restored channels");
|
||||||
}
|
}
|
||||||
|
|
||||||
success = saveToDisk(restoreWhat);
|
success = _saveToDisk(restoreWhat);
|
||||||
if (success) {
|
if (success) {
|
||||||
LOG_INFO("Restored preferences from backup");
|
LOG_INFO("Restored preferences from backup");
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -122,7 +122,6 @@ class NodeDB
|
|||||||
// Note: these two references just point into our static array we serialize to/from disk
|
// Note: these two references just point into our static array we serialize to/from disk
|
||||||
|
|
||||||
public:
|
public:
|
||||||
std::vector<meshtastic_NodeInfoLite> *meshNodes;
|
|
||||||
bool updateGUI = false; // we think the gui should definitely be redrawn, screen will clear this once handled
|
bool updateGUI = false; // we think the gui should definitely be redrawn, screen will clear this once handled
|
||||||
meshtastic_NodeInfoLite *updateGUIforNode = NULL; // if currently showing this node, we think you should update the GUI
|
meshtastic_NodeInfoLite *updateGUIforNode = NULL; // if currently showing this node, we think you should update the GUI
|
||||||
Observable<const meshtastic::NodeStatus *> newStatus;
|
Observable<const meshtastic::NodeStatus *> newStatus;
|
||||||
@@ -138,17 +137,18 @@ class NodeDB
|
|||||||
/// write to flash
|
/// write to flash
|
||||||
/// @return true if the save was successful
|
/// @return true if the save was successful
|
||||||
bool saveToDisk(int saveWhat = SEGMENT_CONFIG | SEGMENT_MODULECONFIG | SEGMENT_DEVICESTATE | SEGMENT_CHANNELS |
|
bool saveToDisk(int saveWhat = SEGMENT_CONFIG | SEGMENT_MODULECONFIG | SEGMENT_DEVICESTATE | SEGMENT_CHANNELS |
|
||||||
SEGMENT_NODEDATABASE);
|
SEGMENT_NODEDATABASE)
|
||||||
|
{
|
||||||
|
return _saveToDisk(saveWhat);
|
||||||
|
}
|
||||||
|
|
||||||
/** Reinit radio config if needed, because either:
|
/** Reinit radio config if needed, because either:
|
||||||
* a) sometimes a buggy android app might send us bogus settings or
|
* a) sometimes a buggy android app might send us bogus settings or
|
||||||
* b) the client set factory_reset
|
* b) the client set factory_reset
|
||||||
*
|
*
|
||||||
* @param factory_reset if true, reset all settings to factory defaults
|
|
||||||
* @param is_fresh_install set to true after a fresh install, to trigger NodeInfo/Position requests
|
* @param is_fresh_install set to true after a fresh install, to trigger NodeInfo/Position requests
|
||||||
* @return true if the config was completely reset, in that case, we should send it back to the client
|
|
||||||
*/
|
*/
|
||||||
void resetRadioConfig(bool is_fresh_install = false);
|
void resetRadioConfig(bool is_fresh_install = false) { _resetRadioConfig(is_fresh_install); }
|
||||||
|
|
||||||
/// given a subpacket sniffed from the network, update our DB state
|
/// given a subpacket sniffed from the network, update our DB state
|
||||||
/// we updateGUI and updateGUIforNode if we think our this change is big enough for a redraw
|
/// we updateGUI and updateGUIforNode if we think our this change is big enough for a redraw
|
||||||
@@ -214,13 +214,13 @@ class NodeDB
|
|||||||
/* Return the number of nodes we've heard from recently (within the last 2 hrs?)
|
/* Return the number of nodes we've heard from recently (within the last 2 hrs?)
|
||||||
* @param localOnly if true, ignore nodes heard via MQTT
|
* @param localOnly if true, ignore nodes heard via MQTT
|
||||||
*/
|
*/
|
||||||
size_t getNumOnlineMeshNodes(bool localOnly = false);
|
size_t getNumOnlineMeshNodes(bool localOnly = false) { return _getNumOnlineMeshNodes(localOnly); }
|
||||||
|
|
||||||
void initConfigIntervals(), initModuleConfigIntervals(), resetNodes(), removeNodeByNum(NodeNum nodeNum);
|
void resetNodes(), removeNodeByNum(NodeNum nodeNum);
|
||||||
|
|
||||||
bool factoryReset(bool eraseBleBonds = false);
|
bool factoryReset(bool eraseBleBonds = false);
|
||||||
|
|
||||||
void installRoleDefaults(meshtastic_Config_DeviceConfig_Role role);
|
void installRoleDefaults(meshtastic_Config_DeviceConfig_Role role) { _installRoleDefaults(role); }
|
||||||
|
|
||||||
const meshtastic_NodeInfoLite *readNextMeshNode(uint32_t &readIndex);
|
const meshtastic_NodeInfoLite *readNextMeshNode(uint32_t &readIndex);
|
||||||
|
|
||||||
@@ -274,11 +274,13 @@ class NodeDB
|
|||||||
void notifyObservers(bool forceUpdate = false)
|
void notifyObservers(bool forceUpdate = false)
|
||||||
{
|
{
|
||||||
// Notify observers of the current node state
|
// Notify observers of the current node state
|
||||||
const meshtastic::NodeStatus status = meshtastic::NodeStatus(getNumOnlineMeshNodes(), getNumMeshNodes(), forceUpdate);
|
const meshtastic::NodeStatus status = meshtastic::NodeStatus(_getNumOnlineMeshNodes(), getNumMeshNodes(), forceUpdate);
|
||||||
newStatus.notifyObservers(&status);
|
newStatus.notifyObservers(&status);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
std::vector<meshtastic_NodeInfoLite> *meshNodes;
|
||||||
|
|
||||||
bool duplicateWarned = false;
|
bool duplicateWarned = false;
|
||||||
uint32_t lastNodeDbSave = 0; // when we last saved our db to flash
|
uint32_t lastNodeDbSave = 0; // when we last saved our db to flash
|
||||||
uint32_t lastBackupAttempt = 0; // when we last tried a backup automatically or manually
|
uint32_t lastBackupAttempt = 0; // when we last tried a backup automatically or manually
|
||||||
@@ -312,6 +314,21 @@ class NodeDB
|
|||||||
bool saveDeviceStateToDisk();
|
bool saveDeviceStateToDisk();
|
||||||
bool saveNodeDatabaseToDisk();
|
bool saveNodeDatabaseToDisk();
|
||||||
void sortMeshDB();
|
void sortMeshDB();
|
||||||
|
|
||||||
|
void initConfigIntervals(), initModuleConfigIntervals();
|
||||||
|
|
||||||
|
// wrapped private functions:
|
||||||
|
|
||||||
|
bool _saveToDisk(int saveWhat = SEGMENT_CONFIG | SEGMENT_MODULECONFIG | SEGMENT_DEVICESTATE | SEGMENT_CHANNELS |
|
||||||
|
SEGMENT_NODEDATABASE);
|
||||||
|
void _resetRadioConfig(bool is_fresh_install = false);
|
||||||
|
|
||||||
|
/* Return the number of nodes we've heard from recently (within the last 2 hrs?)
|
||||||
|
* @param localOnly if true, ignore nodes heard via MQTT
|
||||||
|
*/
|
||||||
|
size_t _getNumOnlineMeshNodes(bool localOnly = false);
|
||||||
|
|
||||||
|
void _installRoleDefaults(meshtastic_Config_DeviceConfig_Role role);
|
||||||
};
|
};
|
||||||
|
|
||||||
extern NodeDB *nodeDB;
|
extern NodeDB *nodeDB;
|
||||||
|
|||||||
Reference in New Issue
Block a user