From a1c34c546ad564dd835e5b3b1a7d4a3b3d609f1f Mon Sep 17 00:00:00 2001 From: Valmo Trindade Date: Sat, 1 Feb 2025 04:01:12 -0300 Subject: [PATCH] added link uid for child markers --- src/cot_generator.rs | 57 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/src/cot_generator.rs b/src/cot_generator.rs index cb72b42..1dfd98a 100644 --- a/src/cot_generator.rs +++ b/src/cot_generator.rs @@ -15,6 +15,7 @@ pub struct CursorOverTime { pub group_role: Option, pub track_course: Option, pub track_speed: Option, + pub link_uid: Option, } impl CursorOverTime { @@ -64,6 +65,18 @@ impl CursorOverTime { xml.push_str(""); + if let Some(linked_uid) = &self.link_uid { + xml.push_str(""); + xml.push_str( + format!( + "", + linked_uid, + ) + .as_str(), + ); + xml.push_str(""); + } + xml.push_str(format!("", self.contact_callsign).as_str()); xml.push_str(format!("", self.contact_callsign).as_str()); @@ -150,6 +163,7 @@ impl HumanCoTPayload { group_role: Some(self.group_role.clone()), track_course: Some(self.track_course), track_speed: Some(self.track_speed), + link_uid: None, } } } @@ -205,6 +219,49 @@ impl MarkerCoTPayload { group_role: None, track_course: Some(self.track_course), track_speed: Some(self.track_speed), + link_uid: None, + } + } +} + +pub struct DigitalPointerPayload { + pub link_uid: String, + pub contact_callsign: String, + pub point_lat: f64, + pub point_lon: f64, + pub point_hae: f32, +} + +impl FromArma for DigitalPointerPayload { + fn from_arma(data: String) -> Result { + let (link_uid, contact_callsign, point_lat, point_lon, point_hae) = + <(String, String, f64, f64, f32)>::from_arma(data)?; + Ok(Self { + link_uid, + contact_callsign, + point_lat, + point_lon, + point_hae, + }) + } +} + +impl DigitalPointerPayload { + pub fn to_cot(&self) -> CursorOverTime { + CursorOverTime { + uuid: Some(format!("{}{}", self.link_uid.clone(), ".SPI1")), + r#type: Some("b-m-p-s-p-i".to_string()), + point_lat: self.point_lat, + point_lon: self.point_lon, + point_hae: self.point_hae, + point_ce: None, + point_le: None, + contact_callsign: self.contact_callsign.clone(), + group_name: None, + group_role: None, + track_course: None, + track_speed: None, + link_uid: Some(self.link_uid.clone()), } } }