Files
firmware/src/mesh/Default.cpp

61 lines
2.3 KiB
C++
Raw Normal View History

#include "Default.h"
2024-11-06 15:00:53 -06:00
#include "meshUtils.h"
2026-01-03 21:19:24 +01:00
uint32_t Default::getConfiguredOrDefaultMs(uint32_t configuredInterval, uint32_t defaultInterval) {
if (configuredInterval > 0)
return configuredInterval * 1000;
return defaultInterval * 1000;
}
2026-01-03 21:19:24 +01:00
uint32_t Default::getConfiguredOrDefaultMs(uint32_t configuredInterval) {
if (configuredInterval > 0)
return configuredInterval * 1000;
return default_broadcast_interval_secs * 1000;
}
2026-01-03 21:19:24 +01:00
uint32_t Default::getConfiguredOrDefault(uint32_t configured, uint32_t defaultValue) {
if (configured > 0)
return configured;
return defaultValue;
}
/**
* Calculates the scaled value of the configured or default value in ms based on the number of online nodes.
*
* For example a default of 30 minutes (1800 seconds * 1000) would yield:
* 45 nodes = 2475 * 1000
* 60 nodes = 4500 * 1000
* 75 nodes = 6525 * 1000
* 90 nodes = 8550 * 1000
* @param configured The configured value.
* @param defaultValue The default value.
* @param numOnlineNodes The number of online nodes.
* @return The scaled value of the configured or default value.
*/
2026-01-03 21:19:24 +01:00
uint32_t Default::getConfiguredOrDefaultMsScaled(uint32_t configured, uint32_t defaultValue, uint32_t numOnlineNodes) {
// If we are a router, we don't scale the value. It's already significantly higher.
if (config.device.role == meshtastic_Config_DeviceConfig_Role_ROUTER)
return getConfiguredOrDefaultMs(configured, defaultValue);
2026-01-03 21:19:24 +01:00
// Additionally if we're a tracker or sensor, we want priority to send position and telemetry
if (IS_ONE_OF(config.device.role, meshtastic_Config_DeviceConfig_Role_SENSOR, meshtastic_Config_DeviceConfig_Role_TRACKER))
return getConfiguredOrDefaultMs(configured, defaultValue);
2024-11-06 15:00:53 -06:00
2026-01-03 21:19:24 +01:00
return getConfiguredOrDefaultMs(configured, defaultValue) * congestionScalingCoefficient(numOnlineNodes);
}
2026-01-03 21:19:24 +01:00
uint32_t Default::getConfiguredOrMinimumValue(uint32_t configured, uint32_t minValue) {
// If zero, intervals should be coalesced later by getConfiguredOrDefault... methods
if (configured == 0)
return configured;
2026-01-03 21:19:24 +01:00
return configured < minValue ? minValue : configured;
}
2026-01-03 21:19:24 +01:00
uint8_t Default::getConfiguredOrDefaultHopLimit(uint8_t configured) {
#if USERPREFS_EVENT_MODE
2026-01-03 21:19:24 +01:00
return (configured > HOP_RELIABLE) ? HOP_RELIABLE : config.lora.hop_limit;
#else
2026-01-03 21:19:24 +01:00
return (configured >= HOP_MAX) ? HOP_MAX : config.lora.hop_limit;
#endif
}