Files
armatak/src/uas/payload.rs

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,
})
}
}