From 0de4cf75e8e90182f91debdf8d90c9fc7d6fdf8c Mon Sep 17 00:00:00 2001 From: Valmo Trindade Date: Tue, 17 Jun 2025 01:37:28 -0300 Subject: [PATCH] Added GPS CoT Structs --- src/cot/cot.rs | 5 +++ src/cot/digital_pointer.rs | 1 + src/cot/eud.rs | 2 +- src/cot/gps.rs | 65 ++++++++++++++++++++++++++++++++++++++ src/cot/mod.rs | 1 + src/cot/nato.rs | 1 + 6 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 src/cot/gps.rs diff --git a/src/cot/cot.rs b/src/cot/cot.rs index e1f8505..a9ce413 100644 --- a/src/cot/cot.rs +++ b/src/cot/cot.rs @@ -15,6 +15,7 @@ pub struct CursorOverTime { pub track_course: Option, pub track_speed: Option, pub link_uid: Option, + pub remarker: Option, } impl CursorOverTime { @@ -102,6 +103,10 @@ impl CursorOverTime { ); } + if let Some(remark) = &self.remarker { + xml.push_str(format!("ARMATAK | {}", remark).as_str()); + } + xml.push_str(""); return xml; diff --git a/src/cot/digital_pointer.rs b/src/cot/digital_pointer.rs index 486bc03..2ea3064 100644 --- a/src/cot/digital_pointer.rs +++ b/src/cot/digital_pointer.rs @@ -39,6 +39,7 @@ impl DigitalPointerPayload { track_course: None, track_speed: None, link_uid: Some(self.link_uid.clone()), + remarker: None, } } } diff --git a/src/cot/eud.rs b/src/cot/eud.rs index 67c8cde..5d3cae9 100644 --- a/src/cot/eud.rs +++ b/src/cot/eud.rs @@ -1,5 +1,4 @@ use arma_rs::{FromArma, FromArmaError}; - use super::cot::CursorOverTime; pub struct EudCoTPayload { @@ -57,6 +56,7 @@ impl EudCoTPayload { track_course: Some(self.track_course), track_speed: Some(self.track_speed), link_uid: None, + remarker: None, } } } diff --git a/src/cot/gps.rs b/src/cot/gps.rs new file mode 100644 index 0000000..bd48733 --- /dev/null +++ b/src/cot/gps.rs @@ -0,0 +1,65 @@ +use arma_rs::{FromArma, FromArmaError}; +use super::cot::CursorOverTime; + +pub struct ExternalPositionPayload { + pub uuid: String, + pub point_lat: f64, + pub point_lon: f64, + pub point_hae: f32, + pub contact_callsign: String, + pub track_course: i32, + pub track_speed: f32, + pub group_name: String, + pub group_role: String, + pub remarker: String, +} + +impl FromArma for ExternalPositionPayload { + fn from_arma(data: String) -> Result { + let ( + uuid, + point_lat, + point_lon, + point_hae, + contact_callsign, + track_course, + track_speed, + group_name, + group_role, + remarker, + ) = <(String, f64, f64, f32, String, i32, f32, String, String, String)>::from_arma(data)?; + Ok(Self { + uuid, + point_lat, + point_lon, + point_hae, + contact_callsign, + track_course, + track_speed, + group_name, + group_role, + remarker, + }) + } +} + +impl ExternalPositionPayload { + pub fn to_cot(&self) -> CursorOverTime { + CursorOverTime { + uuid: Some(self.uuid.clone()), + r#type: None, + 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: Some(self.group_name.clone()), + group_role: Some(self.group_role.clone()), + track_course: Some(self.track_course), + track_speed: Some(self.track_speed), + link_uid: None, + remarker: Some(self.remarker.clone()), + } + } +} diff --git a/src/cot/mod.rs b/src/cot/mod.rs index 4838ee7..1ae8b47 100644 --- a/src/cot/mod.rs +++ b/src/cot/mod.rs @@ -1,4 +1,5 @@ pub mod cot; pub mod digital_pointer; pub mod eud; +pub mod gps; pub mod nato; \ No newline at end of file diff --git a/src/cot/nato.rs b/src/cot/nato.rs index 0e34325..c8b5c98 100644 --- a/src/cot/nato.rs +++ b/src/cot/nato.rs @@ -54,6 +54,7 @@ impl MarkerCoTPayload { track_course: Some(self.track_course), track_speed: Some(self.track_speed), link_uid: None, + remarker: None, } } }