diff --git a/src/modules/AtakPluginModule.cpp b/src/modules/AtakPluginModule.cpp index dfed5ad80..ce8e60f5a 100644 --- a/src/modules/AtakPluginModule.cpp +++ b/src/modules/AtakPluginModule.cpp @@ -18,8 +18,6 @@ int32_t AtakPluginModule::runOnce() ProcessMessage AtakPluginModule::handleReceived(const meshtastic_MeshPacket &mp) { - // V2 protocol: firmware is a passthrough. - // Payloads are zstd dictionary-compressed TAKPacketV2 protobufs. - // Apps handle all compression/decompression. + (void)mp; // Passthrough — no processing needed, apps handle compression/decompression return ProcessMessage::CONTINUE; } diff --git a/src/modules/PositionModule.cpp b/src/modules/PositionModule.cpp index 8a0d6ab1d..3dc69f2c0 100644 --- a/src/modules/PositionModule.cpp +++ b/src/modules/PositionModule.cpp @@ -312,9 +312,19 @@ meshtastic_MeshPacket *PositionModule::allocAtakPli() meshtastic_TAKPacketV2 takPacket = meshtastic_TAKPacketV2_init_zero; takPacket.cot_type_id = meshtastic_CotType_CotType_a_f_G_U_C; - takPacket.how = meshtastic_CotHow_CotHow_m_g; - takPacket.team = meshtastic_Team_Cyan; - takPacket.role = meshtastic_MemberRole_TeamMember; + + // Use TAK config for team/role if configured, otherwise use defaults (Cyan/TeamMember) + if (moduleConfig.has_tak && moduleConfig.tak.team != meshtastic_Team_Unspecifed_Color) { + takPacket.team = moduleConfig.tak.team; + } else { + takPacket.team = meshtastic_Team_Cyan; + } + + if (moduleConfig.has_tak && moduleConfig.tak.role != meshtastic_MemberRole_Unspecifed) { + takPacket.role = moduleConfig.tak.role; + } else { + takPacket.role = meshtastic_MemberRole_TeamMember; + } takPacket.latitude_i = localPosition.latitude_i; takPacket.longitude_i = localPosition.longitude_i; takPacket.altitude = localPosition.altitude_hae; @@ -327,8 +337,17 @@ meshtastic_MeshPacket *PositionModule::allocAtakPli() course = 36000; takPacket.course = static_cast(course); takPacket.battery = powerStatus->getBatteryChargePercent(); - takPacket.geo_src = meshtastic_GeoPointSource_GeoPointSource_GPS; - takPacket.alt_src = meshtastic_GeoPointSource_GeoPointSource_GPS; + + // Map position source to CoT how/geo_src/alt_src + if (config.position.fixed_position || localPosition.location_source == meshtastic_Position_LocSource_LOC_MANUAL) { + takPacket.how = meshtastic_CotHow_CotHow_h_e; + takPacket.geo_src = meshtastic_GeoPointSource_GeoPointSource_USER; + takPacket.alt_src = meshtastic_GeoPointSource_GeoPointSource_USER; + } else { + takPacket.how = meshtastic_CotHow_CotHow_m_g; + takPacket.geo_src = meshtastic_GeoPointSource_GeoPointSource_GPS; + takPacket.alt_src = meshtastic_GeoPointSource_GeoPointSource_GPS; + } takPacket.which_payload_variant = meshtastic_TAKPacketV2_pli_tag; takPacket.payload_variant.pli = true;