From e16d247472ef11366c606d96b990e962f3ba1f57 Mon Sep 17 00:00:00 2001 From: Guillaume Binet Date: Sat, 18 May 2024 09:23:21 -0400 Subject: [PATCH] moved the config generation example to its own --- Cargo.toml | 2 +- examples/config-gen/Cargo.toml | 9 +++++++++ examples/config-gen/src/main.rs | 29 +++++++++++++++++++++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 examples/config-gen/Cargo.toml create mode 100644 examples/config-gen/src/main.rs diff --git a/Cargo.toml b/Cargo.toml index 372dfff96..2e157851e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,3 +1,3 @@ [workspace] -members = ["copper", "copper_derive", "copper_derive_test", "examples/pluginload", "examples/simplelogger", "examples/v4lsrc"] +members = ["copper", "copper_derive", "copper_derive_test", "examples/config-gen", "examples/pluginload", "examples/simplelogger", "examples/v4lsrc"] resolver = "2" diff --git a/examples/config-gen/Cargo.toml b/examples/config-gen/Cargo.toml new file mode 100644 index 000000000..bcdc000c6 --- /dev/null +++ b/examples/config-gen/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "config-gen" +version = "0.1.0" +edition = "2021" + +[dependencies] +serde = { version = "1.0", features = ["derive"] } +copper = { path = "../../copper"} +uom = "0.36.0" diff --git a/examples/config-gen/src/main.rs b/examples/config-gen/src/main.rs new file mode 100644 index 000000000..68e50b8a7 --- /dev/null +++ b/examples/config-gen/src/main.rs @@ -0,0 +1,29 @@ +use uom::si::time::second; +use uom::si::time::Time; + +use copper::config::ConfigNode; +use copper::config::CopperConfig; +use copper::config::Value; + +/// This is a simple example to show how to programmatically generate a configuration. +/// This is useful for making variations of your robot more easily. +fn main() { + // Generate a config + let mut copperconfig = CopperConfig::new(); + let mut camera = + ConfigNode::new("camera", "camerapkg::Camera") + .set_base_period(Time::new::(60.into())); + camera.set_param::("resolution-height", 1080.into()); + let isp = + ConfigNode::new("copper-isp", "isppkg::Isp").set_base_period(Time::new::(1.into())); + // isp.set_param::("tone", 1.3.into()); + let algo = ConfigNode::new("copper-algo", "algopkg::Algo") + .set_base_period(Time::new::(5.into())); + let n1 = copperconfig.add_node(isp); + let n2 = copperconfig.add_node(camera); + let n3 = copperconfig.add_node(algo); + + copperconfig.connect(n2, n1, "imgmsgpkg::Image"); + copperconfig.connect(n1, n3, "imgmsgpkg::Image"); + println!("{}", copperconfig.serialize()); +}