beast: remove jitter buffer again
This commit is contained in:
parent
360ced4e7f
commit
04f4332c4d
|
@ -6,8 +6,6 @@ use tokio::sync::mpsc::channel;
|
||||||
use adsb_deku::ICAO;
|
use adsb_deku::ICAO;
|
||||||
use super::beast;
|
use super::beast;
|
||||||
|
|
||||||
const JITTER_WINDOW: usize = 9;
|
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
pub struct Entry {
|
pub struct Entry {
|
||||||
pub category: Option<(adsb_deku::adsb::TypeCoding, u8)>,
|
pub category: Option<(adsb_deku::adsb::TypeCoding, u8)>,
|
||||||
|
@ -15,8 +13,7 @@ pub struct Entry {
|
||||||
pub altitude: Option<u32>,
|
pub altitude: Option<u32>,
|
||||||
cpr1: Option<adsb_deku::Altitude>,
|
cpr1: Option<adsb_deku::Altitude>,
|
||||||
cpr2: Option<adsb_deku::Altitude>,
|
cpr2: Option<adsb_deku::Altitude>,
|
||||||
// jitter buffer
|
position: Option<adsb_deku::cpr::Position>,
|
||||||
positions: [Option<adsb_deku::cpr::Position>; JITTER_WINDOW],
|
|
||||||
pub heading: Option<f64>,
|
pub heading: Option<f64>,
|
||||||
pub speed: Option<f64>,
|
pub speed: Option<f64>,
|
||||||
pub vertical_rate: Option<i16>,
|
pub vertical_rate: Option<i16>,
|
||||||
|
@ -52,12 +49,7 @@ impl Entry {
|
||||||
{
|
{
|
||||||
eprintln!("invalid position: {:?}", pos);
|
eprintln!("invalid position: {:?}", pos);
|
||||||
} else {
|
} else {
|
||||||
// shift previous positions in jitter buffer
|
self.position = Some(pos);
|
||||||
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.seen_pos = Some(Instant::now());
|
self.seen_pos = Some(Instant::now());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -90,27 +82,7 @@ impl Entry {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn position(&self) -> Option<&adsb_deku::cpr::Position> {
|
pub fn position(&self) -> Option<&adsb_deku::cpr::Position> {
|
||||||
let mut prev_lat = self.positions[0].as_ref()?.latitude;
|
self.position.as_ref()
|
||||||
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()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn flight(&self) -> Option<&str> {
|
pub fn flight(&self) -> Option<&str> {
|
||||||
|
|
Loading…
Reference in New Issue