mavlink 0.21.0

Implements the MAVLink data interchange format for UAVs.
use std::{env, error::Error};

use mavlink::{Connectable, MavConnection, SerialConfig, dialects::dynamic::DynamicDialect};

fn main() -> Result<(), Box<dyn Error>> {
    let mut args = env::args();
    let program = args.next().unwrap_or_else(|| "runtime-dialect".to_owned());
    let usage_text = format!("usage: {program} <dialect.xml> <port> <baud>");
    let xml = args.next().unwrap_or_else(|| panic!("{usage_text}"));
    let port = args.next().unwrap_or_else(|| panic!("{usage_text}"));
    let baud = args
        .next()
        .unwrap_or_else(|| panic!("{usage_text}"))
        .parse()?;

    let dialect = DynamicDialect::from_xml_file(xml)?;
    let config = SerialConfig::new(port, baud);
    let mut connection = config.connect_with_dialect(dialect)?;
    connection.set_allow_recv_any_version(true);

    loop {
        let (_, message) = connection.recv()?;
        println!("{:?}", message);
    }
}