use anyhow::{anyhow, Result};
use crazyflie_link::LinkContext;
const PLATFORM_SYSTEM: u8 = 0xFE;
const PLATFORM_SYSTEM_CMD_GETVBAT: u8 = 0x04;
#[tokio::main]
async fn main() -> Result<()> {
let context = LinkContext::new();
let found = context.scan([0xe7; 5]).await?;
let uri = found
.iter()
.find(|u| u.starts_with("radio://"))
.ok_or_else(|| anyhow!("No Crazyflie with radio:// URI found"))?;
println!("Found Crazyflie at {}", uri);
let ack = context
.platform_command(
uri,
vec![0xFF, PLATFORM_SYSTEM, PLATFORM_SYSTEM_CMD_GETVBAT],
)
.await?;
if ack.received && ack.data.len() >= 7 {
let vbat = f32::from_le_bytes(ack.data[3..7].try_into()?);
println!("Battery voltage: {:.2} V", vbat);
} else {
println!(
"No response to battery query (ack received: {})",
ack.received
);
}
if let Some(rssi) = ack.rssi_dbm {
println!("RSSI: {} dBm", rssi);
}
println!("Retries: {}", ack.retry);
Ok(())
}