cu-flight-controller 1.0.0

This is a basic quadcopter Flight Controller implemented end to end using Copper components
Documentation
[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 }
## Flight controller components

### Hardware
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 }

### Algos
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 }

# --> host dependencies <--

## Log reader depencies
cu29-export = { workspace = true, optional = true }
pyo3 = { version = "0.29", optional = true, default-features = false, features = [
  "extension-module",
  "macros",
] }

## Sim dependencies
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",
]
# Swap the default sim monitor for cu-memmon (per-task heap-allocation
# tracking). Host-only; not available in `firmware` builds. Mutually exclusive
# with `bevymon` at the type-alias level.
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"]