cu-flight-controller 1.0.0

This is a basic quadcopter Flight Controller implemented end to end using Copper components
Documentation
use cu29::bincode::{Decode, Encode};
use cu29::prelude::*;
use cu29::units::si::f32::{Angle, AngularVelocity, ElectricPotential, Ratio};
use serde::{Deserialize, Serialize};

#[derive(
    Debug, Default, Clone, Copy, Encode, Decode, Serialize, Deserialize, PartialEq, Eq, Reflect,
)]
#[repr(u8)]
pub enum FlightMode {
    #[default]
    Angle = 0,
    Acro = 1,
    PositionHold = 2,
}

#[derive(Debug, Default, Clone, Encode, Decode, Serialize, Deserialize, Reflect)]
pub struct ControlInputs {
    pub roll: Ratio,
    pub pitch: Ratio,
    pub yaw: Ratio,
    pub throttle: Ratio,
    pub armed: bool,
    pub mode: FlightMode,
}

#[derive(Debug, Default, Clone, Encode, Decode, Serialize, Deserialize, Reflect)]
pub struct BodyRateSetpoint {
    pub roll: AngularVelocity,
    pub pitch: AngularVelocity,
    pub yaw: AngularVelocity,
}

#[derive(Debug, Default, Clone, Encode, Decode, Serialize, Deserialize, Reflect)]
pub struct BodyCommand {
    pub roll: Ratio,
    pub pitch: Ratio,
    pub yaw: Ratio,
}

#[derive(Debug, Default, Clone, Copy, Encode, Decode, Serialize, Deserialize, Reflect)]
pub struct BatteryVoltage {
    pub voltage: ElectricPotential,
}

#[derive(Debug, Default, Clone, Copy, Encode, Decode, Serialize, Deserialize, Reflect)]
pub struct GeographicHeading {
    pub heading: Angle,
}