[package]
name = "cu-flight-controller"
description = "This is a basic quadcopter Flight Controller implemented end to end using Copper components"
version.workspace = true
authors.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true
keywords.workspace = true
categories.workspace = true
homepage.workspace = true
repository.workspace = true
documentation = "https://docs.rs/cu-flight-controller"
default-run = "quad-sim"
[package.metadata.copper]
environments = ["host", "embedded"]
ci_exclude_workspace = true
ci_exclude_embedded = true
embedded_config = "examples/cu_flight_controller/.cargo/config-firmware.toml"
embedded_targets = ["thumbv7em-none-eabihf"]
embedded_no_default_features = true
embedded_features = "firmware"
embedded_build_release = true
[package.metadata.cargo-shear]
ignored = ["bincode"]
[dependencies]
bevy_ecs = { version = "0.19.0", default-features = false }
cu-bdshot = { path = "../../components/bridges/cu_bdshot", version = "1.0.0", default-features = false, optional = true }
cu-crsf = { path = "../../components/bridges/cu_crsf", version = "1.0.0", default-features = false, features = [
"alloc",
], optional = true }
cu-msp-bridge = { path = "../../components/bridges/cu_msp_bridge", version = "1.0.0", default-features = false, features = [
"alloc",
], optional = true }
cu-msp-lib = { path = "../../components/libs/cu_msp_lib", version = "1.0.0", default-features = false, features = [
"bincode",
] }
cu-sdlogger = { workspace = true, optional = true }
cu-micoairh743 = { workspace = true, optional = true }
cu-logmon = { path = "../../components/monitors/cu_logmon", version = "1.0.0", default-features = false, features = [
"color_log",
], optional = true }
cu-ahrs = { path = "../../components/tasks/cu_ahrs", version = "1.0.0", default-features = false, optional = true }
cu-bmi088 = { path = "../../components/sources/cu_bmi088", version = "1.0.0", default-features = false, optional = true }
cu-dps310 = { path = "../../components/sources/cu_dps310", version = "1.0.0", default-features = false, optional = true }
cu-ist8310 = { path = "../../components/sources/cu_ist8310", version = "1.0.0", default-features = false, optional = true }
cu-gnss-payloads = { path = "../../components/payloads/cu_gnss_payloads", version = "1.0.0", default-features = false, optional = true }
cu-gnss-ublox = { path = "../../components/sources/cu_gnss_ublox", version = "1.0.0", default-features = false, optional = true }
cu-pid = { path = "../../components/tasks/cu_pid", version = "1.0.0", default-features = false }
cu-sensor-payloads = { path = "../../components/payloads/cu_sensor_payloads", version = "1.0.0", default-features = false }
bincode = { workspace = true }
serde = { workspace = true }
spin = { workspace = true }
libm = { version = "0.2", default-features = false }
cu29-export = { workspace = true, optional = true }
pyo3 = { version = "0.29", optional = true, default-features = false, features = [
"extension-module",
"macros",
] }
avian3d = { workspace = true, default-features = false, features = [
"bevy_scene",
"collider-from-mesh",
"debug-plugin",
"parallel",
"f32",
"3d",
"parry-f32",
], optional = true }
cu29 = { path = "../../core/cu29", version = "1.0.0", default-features = false, features = [
"log-level-debug",
"units",
], optional = true }
cortex-m-rt = { workspace = true, optional = true }
defmt-rtt = { workspace = true, optional = true }
defmt = { workspace = true, optional = true }
panic-probe = { workspace = true, optional = true, features = ["print-defmt"] }
buddy_system_allocator = { workspace = true, default-features = false, features = [
"use_spin",
], optional = true }
stm32h7xx-hal = { workspace = true, default-features = false, features = [
"stm32h743v",
"rt",
"defmt",
"sdmmc",
"sdmmc-fatfs",
], optional = true }
embedded-alloc = { workspace = true, optional = true }
cortex-m = { workspace = true, features = [
"critical-section-single-core",
], optional = true }
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
cu-consolemon = { workspace = true, optional = true }
cu-bevymon = { workspace = true, optional = true }
cu-memmon = { path = "../../components/monitors/cu_memmon", version = "1.0.0", default-features = false, features = [
"std",
"memory_monitoring",
], optional = true }
image = { workspace = true, default-features = false, features = [
"png",
], optional = true }
bevy = { workspace = true, default-features = false, features = [
"x11",
"wayland",
"default_font",
"bevy_render",
"bevy_window",
"bevy_core_pipeline",
"bevy_pbr",
"bevy_scene",
"bevy_sprite",
"bevy_gltf",
"gltf_animation",
"bevy_picking",
"mesh_picking",
"tonemapping_luts",
"bevy_ui",
"bevy_ui_render",
"ktx2",
"jpeg",
"png",
"zstd_rust",
], optional = true }
cached-path = { workspace = true, features = [
"progress-bar",
"rustls-tls",
], optional = true }
evdev = { version = "0.13.2", optional = true }
winit = { version = "=0.30.13", default-features = false, optional = true }
[target.'cfg(target_arch = "wasm32")'.dependencies]
cu-bevymon = { path = "../../components/monitors/cu_bevymon", version = "1.0.0", default-features = false, optional = true }
bevy = { workspace = true, default-features = false, features = [
"default_font",
"bevy_render",
"bevy_window",
"bevy_core_pipeline",
"bevy_pbr",
"bevy_scene",
"bevy_sprite",
"bevy_gltf",
"gltf_animation",
"bevy_picking",
"mesh_picking",
"tonemapping_luts",
"bevy_ui",
"bevy_ui_render",
"ktx2",
"jpeg",
"png",
"zstd_rust",
"reflect_auto_register",
], optional = true }
[features]
default = ["sim"]
sim_core = [
"dep:cu29",
"cu29/std",
"cu29/sysclock-perf",
"dep:cu-ahrs",
"dep:cu-crsf",
"dep:cu-msp-bridge",
"dep:cu-bdshot",
"cu-bdshot/messages-only",
"dep:bevy",
"dep:avian3d",
"dep:cu-gnss-payloads",
]
textlogs = [
"cu29/textlogs",
"cu-msp-bridge/textlogs",
"cu-msp-bridge/log-level-info",
"cu-logmon/textlogs",
"cu-logmon/log-level-info",
]
firmware = [
"dep:cu29",
"cu29/defmt",
"dep:defmt",
"dep:cortex-m-rt",
"dep:defmt-rtt",
"dep:panic-probe",
"dep:buddy_system_allocator",
"dep:stm32h7xx-hal",
"dep:embedded-alloc",
"dep:cortex-m",
"dep:cu-bdshot",
"dep:cu-micoairh743",
"cu-bdshot/stm32h7",
"cu-bdshot/defmt",
"cu-micoairh743/defmt",
"dep:cu-ahrs",
"dep:cu-bmi088",
"dep:cu-dps310",
"dep:cu-ist8310",
"dep:cu-gnss-payloads",
"dep:cu-gnss-ublox",
"cu-bmi088/defmt",
"cu-dps310/defmt",
"cu-ist8310/defmt",
"dep:cu-crsf",
"dep:cu-msp-bridge",
"cu-crsf/defmt",
"cu-msp-bridge/defmt",
"dep:cu-sdlogger",
"dep:cu-logmon",
"cu-ahrs/defmt",
"cu-ahrs/firmware",
"cu-logmon/defmt",
]
logreader = [
"dep:cu29",
"cu29/std",
"bincode/std",
"serde/std",
"dep:cu29-export",
"dep:cu-crsf",
"dep:cu-msp-bridge",
"dep:cu-bdshot",
"dep:cu-ahrs",
"dep:cu-gnss-payloads",
"cu-bdshot/messages-only",
]
python-bindings = [
"dep:cu29",
"cu29/std",
"bincode/std",
"serde/std",
"dep:cu29-export",
"dep:cu-crsf",
"dep:cu-msp-bridge",
"dep:cu-bdshot",
"dep:cu-ahrs",
"dep:cu-gnss-payloads",
"cu-bdshot/messages-only",
"cu29-export/python",
"dep:pyo3",
]
sim = [
"sim_core",
"dep:cu-consolemon",
"dep:cached-path",
"dep:evdev",
"dep:image",
"dep:winit",
]
sim-debug = ["sim", "cu29/reflect", "cu29/remote-debug"]
bevymon = [
"sim_core",
"dep:cu-bevymon",
"dep:cached-path",
"dep:evdev",
"dep:image",
"dep:winit",
]
memmon = ["sim", "dep:cu-memmon"]
[lib]
name = "cu_flight_controller_export"
path = "src/python_module.rs"
[[bin]]
name = "quad"
path = "src/main.rs"
test = false
doctest = false
bench = false
required-features = ["firmware"]
[[bin]]
name = "rc-tester"
path = "src/sim/rc_tester.rs"
required-features = ["sim"]
[[bin]]
name = "quad-logreader"
path = "src/logreader.rs"
required-features = ["logreader"]
[[bin]]
name = "quad-sim"
path = "src/sim.rs"
required-features = ["sim"]
[[bin]]
name = "quad-resim"
path = "src/resim.rs"
required-features = ["sim-debug"]
[[bin]]
name = "quad-bevymon"
path = "src/bevymon.rs"
required-features = ["bevymon"]