Skip to content

Commit

Permalink
Add sanity check for map report interval and position precision (#3459)
Browse files Browse the repository at this point in the history
* Add sanity check for map report interval and position precision

* Use new `Default::` methods
  • Loading branch information
GUVWAF authored and mverch67 committed Mar 24, 2024
1 parent d694525 commit 3db09e2
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 5 deletions.
8 changes: 5 additions & 3 deletions src/mqtt/MQTT.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -195,8 +195,10 @@ MQTT::MQTT() : concurrency::OSThread("mqtt"), mqttQueue(MAX_MQTT_QUEUE)
}

if (moduleConfig.mqtt.map_reporting_enabled && moduleConfig.mqtt.has_map_report_settings) {
map_position_precision = moduleConfig.mqtt.map_report_settings.position_precision;
map_publish_interval_secs = moduleConfig.mqtt.map_report_settings.publish_interval_secs;
map_position_precision = Default::getConfiguredOrDefault(moduleConfig.mqtt.map_report_settings.position_precision,
default_map_position_precision);
map_publish_interval_msecs = Default::getConfiguredOrDefaultMs(
moduleConfig.mqtt.map_report_settings.publish_interval_secs, default_map_publish_interval_secs);
}

#ifdef HAS_NETWORKING
Expand Down Expand Up @@ -540,7 +542,7 @@ void MQTT::perhapsReportToMap()
if (!moduleConfig.mqtt.map_reporting_enabled || !(moduleConfig.mqtt.proxy_to_client_enabled || isConnectedDirectly()))
return;

if (millis() - last_report_to_map < map_publish_interval_secs * 1000) {
if (millis() - last_report_to_map < map_publish_interval_msecs) {
return;
} else {
if (map_position_precision == 0 || (localPosition.latitude_i == 0 && localPosition.longitude_i == 0)) {
Expand Down
6 changes: 4 additions & 2 deletions src/mqtt/MQTT.h
Original file line number Diff line number Diff line change
Expand Up @@ -89,9 +89,11 @@ class MQTT : private concurrency::OSThread
std::string mapTopic = "/2/map/"; // For protobuf-encoded MapReport messages

// For map reporting (only applies when enabled)
const uint32_t default_map_position_precision = 14; // defaults to max. offset of ~1459m
const uint32_t default_map_publish_interval_secs = 60 * 15; // defaults to 15 minutes
uint32_t last_report_to_map = 0;
uint32_t map_position_precision = 14; // defaults to max. offset of ~1459m
uint32_t map_publish_interval_secs = 60 * 15; // defaults to 15 minutes
uint32_t map_position_precision = default_map_position_precision;
uint32_t map_publish_interval_msecs = default_map_publish_interval_secs * 1000;

/** return true if we have a channel that wants uplink/downlink or map reporting is enabled
*/
Expand Down

0 comments on commit 3db09e2

Please sign in to comment.