diff --git a/.gitignore b/.gitignore index 45f7d5708d689f77c2f325da11361bb2cbfbaf8e..1b68824dff166d8db16494aa0f99c6a9486f21cf 100644 --- a/.gitignore +++ b/.gitignore @@ -33,4 +33,8 @@ # ide folder & virtual environments .venv/ -.vscode \ No newline at end of file +.vscode + +# rust specific +target +Cargo.lock diff --git a/README.md b/README.md index 622286ba057250f524a39886e45bf59f856541b3..4ba347a48251bcd2fa652e74a3696afd6f4b5a6a 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,7 @@ # mavlink_skyward_lib + Repo containing Skyward's implementation of the Mavlink protocol: * `message_definitions` - XML files describing the available messages - * `mavlink_lib ` - corresponding C header files, generated with `pymavlink` - - - +* `mavlink_rust` - Rust library of the Mavlink protocol diff --git a/mavlink_rust/Cargo.toml b/mavlink_rust/Cargo.toml new file mode 100644 index 0000000000000000000000000000000000000000..7533590ca562b050fa597ecd00247d5b8745d428 --- /dev/null +++ b/mavlink_rust/Cargo.toml @@ -0,0 +1,32 @@ +[package] +name = "skyward_mavlink" +version = "0.1.0" +authors = ["Federico Lolli <federico.lolli@skywarder.eu>"] +edition = "2021" +license = "MIT" + +[dependencies] +num-traits = { version = "0.2.18", default-features = false } +num-derive = "0.4.2" +bitflags = "2.4.2" +serde = { version = "1.0.197", optional = true } +serde_arrays = { version = "0.1.0", optional = true } + +[dependencies.mavlink-core] +git = "https://github.com/mavlink/rust-mavlink.git" +rev = "8d61f75ac4a5bf04cd9401d9073244118117db5f" + +[build-dependencies.mavlink-bindgen] +git = "https://github.com/mavlink/rust-mavlink.git" +rev = "8d61f75ac4a5bf04cd9401d9073244118117db5f" + +[features] +default = ["lyra"] +lyra = [] +gemini = [] +pyxis = [] +lynx = [] +hermes = [] +r2a = [] +test = [] +serde = ["dep:serde", "dep:serde_arrays"] diff --git a/mavlink_rust/build.rs b/mavlink_rust/build.rs new file mode 100644 index 0000000000000000000000000000000000000000..7090f512a3ebdf919faba1e10cdddf2a5256830a --- /dev/null +++ b/mavlink_rust/build.rs @@ -0,0 +1,13 @@ +#![recursion_limit = "256"] + +use std::env; + +pub fn main() { + let out_path = env::var("OUT_DIR").unwrap(); + + let result = mavlink_bindgen::generate("../message_definitions", out_path) + .expect("Failed to generate Rust MAVLink bindings"); + + mavlink_bindgen::format_generated_code(&result); + mavlink_bindgen::emit_cargo_build_messages(&result); +} diff --git a/mavlink_rust/src/lib.rs b/mavlink_rust/src/lib.rs new file mode 100644 index 0000000000000000000000000000000000000000..7269b9ae4c6dbeea97db4ec83f28fefbf0251567 --- /dev/null +++ b/mavlink_rust/src/lib.rs @@ -0,0 +1,6 @@ +mod bindings { + include!(concat!(env!("OUT_DIR"), "/mod.rs")); +} + +pub use bindings::*; +pub use mavlink_core as mavlink;