use std::convert::TryInto;
use iracing::Connection;
use iracing::states::Flags;
use std::time::Duration;
pub fn main() {
let mut conn = Connection::new().expect("Unable to open telemetry");
let session = conn.session_info().expect("Invalid Session");
let shift_up_rpm = session.drivers.shift_light_shift_rpm;
let blocking = conn.blocking().expect("Couldn't create telem handle");
loop {
let telem = match blocking.sample(Duration::from_millis(500)) {
Ok(sample) => sample,
Err(err) => {
println!("Error: {:?}", err);
continue;
}
};
let rpm: f32 = telem.get("RPM").unwrap().try_into().unwrap();
let gear: i32 = telem.get("Gear").unwrap().try_into().unwrap();
let timecode: f64 = telem.get("SessionTime").unwrap().try_into().unwrap();
let lap: i32 = telem.get("Lap").unwrap().try_into().unwrap();
let flags = Flags::from_bits( telem.get("SessionState").unwrap().try_into().unwrap() ).unwrap();
print!("Lap {lap:>3}: {time:>5.3}s Gear {gear} @ {rpm:>5.0} RPM ", lap = lap, gear = gear, rpm = rpm, time = timecode);
if shift_up_rpm < rpm {
print!("{:>8}", " SHIFT ");
}
println!("{:#?}({:})", flags, flags.bits() );
}
}