use std::convert::TryInto;
use crazyflie_lib::Crazyflie;
use futures::{SinkExt, StreamExt};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let link_context = crazyflie_lib::crazyflie_link::LinkContext::new();
println!("Scanning for Crazyflie.");
let found = link_context.scan([0xE7; 5]).await?;
if let Some(uri) = found.first() {
println!("Connecting to {}", &uri);
let cf = Crazyflie::connect_from_uri(&link_context, uri, crazyflie_lib::NoTocCache).await?;
let (mut tx, mut rx) = cf.platform.get_app_channel().await.unwrap();
let _ = tx.send([0; 12].into()).await;
assert_eq!(rx.next().await, Some([0; 4].into()));
println!("0+0+0 = 0");
let (a, b, c) = (1.0f32, 2.0f32, 3.0f32);
let mut pk = Vec::new();
pk.append(&mut a.to_le_bytes().to_vec());
pk.append(&mut b.to_le_bytes().to_vec());
pk.append(&mut c.to_le_bytes().to_vec());
let _ = tx.send(pk.try_into().unwrap()).await;
assert_eq!(rx.next().await, Some((a + b + c).to_le_bytes().into()));
println!("{}+{}+{} = {}", a, b, c, a + b + c);
} else {
println!("Could not find any Crazyflie to connect!");
}
Ok(())
}