use std::env;
use tango::dev::DevProxy;
use tango::error::Result;
fn init(motor: &DevProxy) -> Result<()> {
if let Err(err) = motor.init() {
println!(" Init failed: {}", err.description());
}
let limit = motor.read_attr::<f64, _>("limit").map(|read| read.value);
println!(" {:?}: {}\n limit = {limit:?}", motor.state()?, motor.status()?.value());
Ok(())
}
fn main() -> Result<()> {
let name = env::args().nth(1).unwrap_or_else(|| "test/motor/1".to_string());
let motor = DevProxy::new(name.as_str());
let initial = motor.get_prop::<Vec<f64>, _>("Limit")?.first().copied();
println!("Limit property: {initial:?}");
println!("Properties: {:?}", motor.list_prop("*")?);
motor.set_prop(("Limit", 45.0))?;
let limit = motor.read_attr::<f64, _>("limit").map(|read| read.value);
println!("Limit set to 45, before Init: {limit:?}");
println!("After Init:");
init(&motor)?;
motor.set_prop(("Limit", 0.0))?;
println!("Limit set to 0, after Init:");
init(&motor)?;
match initial {
Some(limit) => motor.set_prop(("Limit", limit))?,
None => motor.delete_prop("Limit")?,
}
println!("Limit put back, after Init:");
init(&motor)?;
Ok(())
}