http-json: add fields squawk, seen, seen_pos

This commit is contained in:
Astro 2022-01-28 21:33:01 +01:00
parent 4fbe229eb0
commit a14fabb53c
2 changed files with 18 additions and 1 deletions

View File

@ -21,12 +21,17 @@ pub struct Entry {
pub speed: Option<f64>,
pub vertical_rate: Option<i16>,
last_update: Option<Instant>,
pub squawk: Option<u32>,
pub seen: Option<Instant>, // Option wrapper is just for derive Default
pub seen_pos: Option<Instant>,
}
impl Entry {
const MAX_AGE: u64 = 300;
fn update(&mut self, kind: adsb_deku::adsb::ME) {
self.seen = Some(Instant::now());
match kind {
adsb_deku::adsb::ME::AirbornePositionBaroAltitude(altitude) |
adsb_deku::adsb::ME::AirbornePositionGNSSAltitude(altitude) => {
@ -53,6 +58,7 @@ impl Entry {
}
// add position to jitter buffer
self.positions[self.positions.len() - 1] = Some(pos);
self.seen_pos = Some(Instant::now());
}
}
}
@ -70,8 +76,10 @@ impl Entry {
self.category = Some((ident.tc, ident.ca));
self.callsign = Some(ident.cn);
}
adsb_deku::adsb::ME::AircraftStatus(status) => {
self.squawk = Some(status.squawk);
}
adsb_deku::adsb::ME::TargetStateAndStatusInformation(_) => {}
adsb_deku::adsb::ME::AircraftStatus(_) => {}
adsb_deku::adsb::ME::AircraftOperationStatus(_) => {}
msg => {
eprintln!("unhandled adsb msg: {:?}", msg);

View File

@ -1,3 +1,4 @@
use std::time::Instant;
use warp::{http::Response, Filter};
use adsb_deku::ICAO;
use beast::aircrafts::Entry;
@ -6,6 +7,7 @@ use serde::Serialize;
#[derive(Serialize)]
pub struct Aircraft {
hex: String,
squawk: Option<u32>,
flight: Option<String>,
category: Option<u8>,
lat: Option<f64>,
@ -15,12 +17,17 @@ pub struct Aircraft {
track: Option<i16>,
/// kts
speed: Option<u16>,
seen: Option<f32>,
seen_pos: Option<f32>,
}
impl Aircraft {
pub fn new(icao_address: &ICAO, entry: &Entry) -> Self {
let now = Instant::now();
Aircraft {
hex: format!("{}", icao_address),
squawk: entry.squawk.clone(),
flight: entry.callsign.clone(),
category: entry.category.map(|category| category.1),
lat: entry.position().map(|pos| pos.latitude),
@ -28,6 +35,8 @@ impl Aircraft {
altitude: entry.altitude.clone(),
track: entry.heading.map(|heading| heading as i16),
speed: entry.speed.map(|speed| speed as u16),
seen: entry.seen.map(|seen| (now - seen).as_secs_f32()),
seen_pos: entry.seen_pos.map(|seen_pos| (now - seen_pos).as_secs_f32()),
}
}
}