mirror of
https://github.com/valmojr/armatak.git
synced 2026-06-13 14:33:56 +00:00
191 lines
4.3 KiB
Rust
191 lines
4.3 KiB
Rust
use arma_rs::{FromArma, FromArmaError};
|
|
|
|
pub struct UasTelemetryPayload {
|
|
pub address: String,
|
|
pub system_id: u8,
|
|
pub component_id: u8,
|
|
pub vehicle_type: u8,
|
|
pub lat_deg: f64,
|
|
pub lon_deg: f64,
|
|
pub alt_msl_m: f32,
|
|
pub rel_alt_m: f32,
|
|
pub heading_deg: f32,
|
|
pub groundspeed_mps: f32,
|
|
pub roll_deg: f32,
|
|
pub pitch_deg: f32,
|
|
pub yaw_deg: f32,
|
|
pub flying: bool,
|
|
}
|
|
|
|
#[allow(dead_code)]
|
|
pub struct UasSystemPayload {
|
|
pub address: String,
|
|
pub entity_uuid: String,
|
|
pub callsign: String,
|
|
pub vehicle_type: u8,
|
|
pub lat_deg: f64,
|
|
pub lon_deg: f64,
|
|
pub alt_msl_m: f32,
|
|
pub rel_alt_m: f32,
|
|
pub heading_deg: f32,
|
|
pub groundspeed_mps: f32,
|
|
pub roll_deg: f32,
|
|
pub pitch_deg: f32,
|
|
pub yaw_deg: f32,
|
|
pub flying: bool,
|
|
pub landed: bool,
|
|
pub gimbal_roll_deg: f32,
|
|
pub gimbal_pitch_deg: f32,
|
|
pub gimbal_yaw_deg: f32,
|
|
pub video_uri: String,
|
|
pub hfov_deg: f32,
|
|
pub vfov_deg: f32,
|
|
pub image_lat_deg: f64,
|
|
pub image_lon_deg: f64,
|
|
pub image_alt_msl_m: f32,
|
|
pub has_turret_camera: bool,
|
|
pub battery_remaining_pct: i8,
|
|
}
|
|
|
|
impl FromArma for UasTelemetryPayload {
|
|
fn from_arma(data: String) -> Result<Self, FromArmaError> {
|
|
let (
|
|
address,
|
|
system_id,
|
|
component_id,
|
|
vehicle_type,
|
|
lat_deg,
|
|
lon_deg,
|
|
alt_msl_m,
|
|
rel_alt_m,
|
|
heading_deg,
|
|
groundspeed_mps,
|
|
roll_deg,
|
|
pitch_deg,
|
|
yaw_deg,
|
|
flying,
|
|
) = <(
|
|
String,
|
|
i32,
|
|
i32,
|
|
i32,
|
|
f64,
|
|
f64,
|
|
f32,
|
|
f32,
|
|
f32,
|
|
f32,
|
|
f32,
|
|
f32,
|
|
f32,
|
|
i32,
|
|
)>::from_arma(data)?;
|
|
|
|
Ok(Self {
|
|
address,
|
|
system_id: system_id.clamp(1, 255) as u8,
|
|
component_id: component_id.clamp(1, 255) as u8,
|
|
vehicle_type: vehicle_type.clamp(0, 255) as u8,
|
|
lat_deg,
|
|
lon_deg,
|
|
alt_msl_m,
|
|
rel_alt_m,
|
|
heading_deg,
|
|
groundspeed_mps,
|
|
roll_deg,
|
|
pitch_deg,
|
|
yaw_deg,
|
|
flying: flying != 0,
|
|
})
|
|
}
|
|
}
|
|
|
|
impl FromArma for UasSystemPayload {
|
|
fn from_arma(data: String) -> Result<Self, FromArmaError> {
|
|
let (
|
|
address,
|
|
entity_uuid,
|
|
callsign,
|
|
vehicle_type,
|
|
lat_deg,
|
|
lon_deg,
|
|
alt_msl_m,
|
|
rel_alt_m,
|
|
heading_deg,
|
|
groundspeed_mps,
|
|
roll_deg,
|
|
pitch_deg,
|
|
yaw_deg,
|
|
flying,
|
|
landed,
|
|
gimbal_roll_deg,
|
|
gimbal_pitch_deg,
|
|
gimbal_yaw_deg,
|
|
video_uri,
|
|
hfov_deg,
|
|
vfov_deg,
|
|
image_lat_deg,
|
|
image_lon_deg,
|
|
image_alt_msl_m,
|
|
has_turret_camera,
|
|
battery_remaining_pct,
|
|
) = <(
|
|
String,
|
|
String,
|
|
String,
|
|
i32,
|
|
f64,
|
|
f64,
|
|
f32,
|
|
f32,
|
|
f32,
|
|
f32,
|
|
f32,
|
|
f32,
|
|
f32,
|
|
i32,
|
|
i32,
|
|
f32,
|
|
f32,
|
|
f32,
|
|
String,
|
|
f32,
|
|
f32,
|
|
f64,
|
|
f64,
|
|
f32,
|
|
i32,
|
|
i32,
|
|
)>::from_arma(data)?;
|
|
|
|
Ok(Self {
|
|
address,
|
|
entity_uuid,
|
|
callsign,
|
|
vehicle_type: vehicle_type.clamp(0, 255) as u8,
|
|
lat_deg,
|
|
lon_deg,
|
|
alt_msl_m,
|
|
rel_alt_m,
|
|
heading_deg,
|
|
groundspeed_mps,
|
|
roll_deg,
|
|
pitch_deg,
|
|
yaw_deg,
|
|
flying: flying != 0,
|
|
landed: landed != 0,
|
|
gimbal_roll_deg,
|
|
gimbal_pitch_deg,
|
|
gimbal_yaw_deg,
|
|
video_uri,
|
|
hfov_deg,
|
|
vfov_deg,
|
|
image_lat_deg,
|
|
image_lon_deg,
|
|
image_alt_msl_m,
|
|
has_turret_camera: has_turret_camera != 0,
|
|
battery_remaining_pct: battery_remaining_pct.clamp(0, 100) as i8,
|
|
})
|
|
}
|
|
}
|