use crate::packet::{PacketSource, StatusBytes};
use std::io;
use super::calib::CalibDb;
use super::Status;
use super::status_accum::StatusAccumulator;
pub struct StatusListener {
status: Status,
calib_db: CalibDb,
accum: StatusAccumulator,
}
impl StatusListener {
pub fn get_calib_db(&self, dist_lsb: f32) -> CalibDb {
let mut calib_db = self.calib_db.clone();
calib_db.dist_lsb = dist_lsb;
calib_db
}
}
impl super::super::StatusListener for StatusListener {
type Status = Status;
fn init<T: PacketSource>(packet_source: &mut T) -> io::Result<Self> {
let mut accum = StatusAccumulator::default();
let (status, calib_db) = accum.init(packet_source)?;
Ok(StatusListener { status: status, calib_db: calib_db, accum: accum })
}
fn feed(&mut self, status: StatusBytes) {
let sensor_status = &mut self.status;
let calib_db = &mut self.calib_db;
self.accum.feed(status, sensor_status, calib_db);
}
fn get_status(&self) -> &Self::Status {
&self.status
}
}