Skip to content

Commit fc64bea

Browse files
thebenternCopilot
andauthored
Unmessagable implementation and defaults (#6811)
* Unmessagable implementation and defaults * Router and router late are unmessagable by default * Update src/modules/AdminModule.cpp Co-authored-by: Copilot <[email protected]> --------- Co-authored-by: Copilot <[email protected]>
1 parent a51a6b8 commit fc64bea

File tree

3 files changed

+30
-1
lines changed

3 files changed

+30
-1
lines changed

src/mesh/NodeDB.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -819,10 +819,19 @@ void NodeDB::installRoleDefaults(meshtastic_Config_DeviceConfig_Role role)
819819
initConfigIntervals();
820820
initModuleConfigIntervals();
821821
config.device.rebroadcast_mode = meshtastic_Config_DeviceConfig_RebroadcastMode_CORE_PORTNUMS_ONLY;
822+
owner.has_is_unmessagable = true;
823+
owner.is_unmessagable = true;
824+
} else if (role == meshtastic_Config_DeviceConfig_Role_ROUTER_LATE) {
825+
owner.has_is_unmessagable = true;
826+
owner.is_unmessagable = true;
822827
} else if (role == meshtastic_Config_DeviceConfig_Role_REPEATER) {
828+
owner.has_is_unmessagable = true;
829+
owner.is_unmessagable = true;
823830
config.display.screen_on_secs = 1;
824831
config.device.rebroadcast_mode = meshtastic_Config_DeviceConfig_RebroadcastMode_CORE_PORTNUMS_ONLY;
825832
} else if (role == meshtastic_Config_DeviceConfig_Role_SENSOR) {
833+
owner.has_is_unmessagable = true;
834+
owner.is_unmessagable = true;
826835
moduleConfig.telemetry.environment_measurement_enabled = true;
827836
moduleConfig.telemetry.environment_update_interval = 300;
828837
} else if (role == meshtastic_Config_DeviceConfig_Role_LOST_AND_FOUND) {
@@ -837,7 +846,12 @@ void NodeDB::installRoleDefaults(meshtastic_Config_DeviceConfig_Role role)
837846
(meshtastic_Config_PositionConfig_PositionFlags_ALTITUDE | meshtastic_Config_PositionConfig_PositionFlags_SPEED |
838847
meshtastic_Config_PositionConfig_PositionFlags_HEADING | meshtastic_Config_PositionConfig_PositionFlags_DOP);
839848
moduleConfig.telemetry.device_update_interval = ONE_DAY;
849+
} else if (role == meshtastic_Config_DeviceConfig_Role_TRACKER) {
850+
owner.has_is_unmessagable = true;
851+
owner.is_unmessagable = true;
840852
} else if (role == meshtastic_Config_DeviceConfig_Role_TAK_TRACKER) {
853+
owner.has_is_unmessagable = true;
854+
owner.is_unmessagable = true;
841855
config.device.node_info_broadcast_secs = ONE_DAY;
842856
config.position.position_broadcast_smart_enabled = true;
843857
config.position.position_broadcast_secs = 3 * 60; // Every 3 minutes
@@ -970,6 +984,8 @@ void NodeDB::installDefaultDeviceState()
970984
#endif
971985
snprintf(owner.id, sizeof(owner.id), "!%08x", getNodeNum()); // Default node ID now based on nodenum
972986
memcpy(owner.macaddr, ourMacAddr, sizeof(owner.macaddr));
987+
owner.has_is_unmessagable = true;
988+
owner.is_unmessagable = false;
973989
}
974990

975991
// We reserve a few nodenums for future use

src/modules/AdminModule.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -504,6 +504,12 @@ void AdminModule::handleSetOwner(const meshtastic_User &o)
504504
sendWarning(licensedModeMessage);
505505
}
506506
}
507+
if (owner.has_is_unmessagable != o.has_is_unmessagable ||
508+
(o.has_is_unmessagable && owner.is_unmessagable != o.is_unmessagable)) {
509+
changed = 1;
510+
owner.has_is_unmessagable = o.has_is_unmessagable || o.has_is_unmessagable;
511+
owner.is_unmessagable = o.is_unmessagable;
512+
}
507513

508514
if (changed) { // If nothing really changed, don't broadcast on the network or write to flash
509515
service->reloadOwner(!hasOpenEditTransaction);
@@ -553,8 +559,10 @@ void AdminModule::handleSetConfig(const meshtastic_Config &c)
553559
sendWarning(warning);
554560
}
555561
// If we're setting router role for the first time, install its intervals
556-
if (existingRole != c.payload_variant.device.role)
562+
if (existingRole != c.payload_variant.device.role) {
557563
nodeDB->installRoleDefaults(c.payload_variant.device.role);
564+
changes |= SEGMENT_NODEDATABASE | SEGMENT_DEVICESTATE; // Some role defaults affect owner
565+
}
558566
if (config.device.node_info_broadcast_secs < min_node_info_broadcast_secs) {
559567
LOG_DEBUG("Tried to set node_info_broadcast_secs too low, setting to %d", min_node_info_broadcast_secs);
560568
config.device.node_info_broadcast_secs = min_node_info_broadcast_secs;

src/modules/NodeInfoModule.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,11 @@ meshtastic_MeshPacket *NodeInfoModule::allocReply()
8686
u.public_key.bytes[0] = 0;
8787
u.public_key.size = 0;
8888
}
89+
// Coerce unmessagable for Repeater role
90+
if (u.role == meshtastic_Config_DeviceConfig_Role_REPEATER) {
91+
u.has_is_unmessagable = true;
92+
u.is_unmessagable = true;
93+
}
8994

9095
LOG_INFO("Send owner %s/%s/%s", u.id, u.long_name, u.short_name);
9196
lastSentToMesh = millis();

0 commit comments

Comments
 (0)