beast: remove jitter buffer again

This commit is contained in:
Astro 2022-01-28 21:43:58 +01:00
parent 360ced4e7f
commit 04f4332c4d
1 changed files with 3 additions and 31 deletions

View File

@ -6,8 +6,6 @@ use tokio::sync::mpsc::channel;
use adsb_deku::ICAO;
use super::beast;
const JITTER_WINDOW: usize = 9;
#[derive(Default)]
pub struct Entry {
pub category: Option<(adsb_deku::adsb::TypeCoding, u8)>,
@ -15,8 +13,7 @@ pub struct Entry {
pub altitude: Option<u32>,
cpr1: Option<adsb_deku::Altitude>,
cpr2: Option<adsb_deku::Altitude>,
// jitter buffer
positions: [Option<adsb_deku::cpr::Position>; JITTER_WINDOW],
position: Option<adsb_deku::cpr::Position>,
pub heading: Option<f64>,
pub speed: Option<f64>,
pub vertical_rate: Option<i16>,
@ -52,12 +49,7 @@ impl Entry {
{
eprintln!("invalid position: {:?}", pos);
} else {
// shift previous positions in jitter buffer
for i in 1..self.positions.len() {
self.positions[i - 1] = self.positions[i].take();
}
// add position to jitter buffer
self.positions[self.positions.len() - 1] = Some(pos);
self.position = Some(pos);
self.seen_pos = Some(Instant::now());
}
}
@ -90,27 +82,7 @@ impl Entry {
}
pub fn position(&self) -> Option<&adsb_deku::cpr::Position> {
let mut prev_lat = self.positions[0].as_ref()?.latitude;
let mut prev_lon = self.positions[0].as_ref()?.longitude;
for i in 1..self.positions.len() {
let lat = self.positions[i].as_ref()?.latitude;
let lon = self.positions[i].as_ref()?.longitude;
if lat < prev_lat - 1.0 ||
lat > prev_lat + 1.0 ||
lon < prev_lon - 1.0 ||
lon > prev_lon + 1.0
{
// erroneous jitter detected
eprintln!("{:?} error in: {:?}", self.callsign, self.positions.iter().filter_map(|pos| {
pos.as_ref().map(|pos| (pos.latitude as i32, pos.longitude as i32))
}).collect::<Vec<_>>());
return None;
}
prev_lat = lat;
prev_lon = lon;
}
self.positions[self.positions.len() - 1].as_ref()
self.position.as_ref()
}
pub fn flight(&self) -> Option<&str> {