(
missions: [
(id: "default"),
(id: "flow"),
(id: "gnss"),
],
resources: [
(
id: "fc",
provider: "cu_micoairh743::MicoAirH743",
config: {"i2c2_hz": 400000},
),
],
tasks: [
(
id: "bmi088",
type: "tasks::Bmi088Source",
run_in_sim: true,
logging: (enabled: true),
resources: {
"spi": "fc.bmi088_spi",
"acc_cs": "fc.bmi088_acc_cs",
"gyr_cs": "fc.bmi088_gyr_cs",
"delay": "fc.bmi088_delay",
},
),
(
id: "dps310",
type: "tasks::Dps310Source",
run_in_sim: true,
logging: (enabled: true),
resources: {"i2c": "fc.i2c2_dps310"},
),
(
id: "ist8310",
type: "tasks::Ist8310Source",
run_in_sim: true,
logging: (enabled: true),
resources: {"i2c": "fc.i2c2_ist8310"},
),
(
id: "mag_heading",
type: "tasks::MagneticTrueHeading",
run_in_sim: true,
logging: (enabled: true),
config: {"declination_deg": 4.7},
),
(
id: "battery_adc",
type: "tasks::battery::BatteryAdcSource",
run_in_sim: true,
logging: (enabled: true),
resources: {
"battery_adc": "fc.battery_adc",
},
config: {
"vref_mv": 3300,
"vbat_scale": 210,
"vbat_res_div_val": 10,
"vbat_res_div_mult": 1,
},
),
(
id: "imu_cal",
type: "tasks::ImuCalibrator",
logging: (enabled: false),
config: {"cal_ms": 500},
),
(
id: "ahrs",
type: "cu_ahrs::CuAhrs",
logging: (enabled: true),
),
(
id: "attitude",
type: "tasks::AttitudeController",
logging: (enabled: false),
config: {
"angle_limit_deg": 60.0,
"rate_limit_dps": 210.0,
"acro_rate_dps": 500.0,
"acro_expo": 0.4,
"kp": 1.0,
"ki": 0.0,
"kd": 0.0,
},
),
(
id: "rate",
type: "tasks::RateController",
logging: (enabled: false),
config: {
"kp": 0.05,
"ki": 0.0,
"kd": 0.0006,
"kp_yaw": 0.08,
"ki_yaw": 0.0,
"kd_yaw": 0.0002,
"airmode": true,
"airmode_start_throttle_percent": 20.0,
},
),
(
id: "mixer0",
type: "tasks::QuadXMixer",
logging: (enabled: false),
config: {
"motor_index": 0,
"props_out": true,
"airmode_idle_percent": 10.0,
},
),
(
id: "mixer1",
type: "tasks::QuadXMixer",
logging: (enabled: false),
config: {
"motor_index": 1,
"props_out": true,
"airmode_idle_percent": 10.0,
},
),
(
id: "mixer2",
type: "tasks::QuadXMixer",
logging: (enabled: false),
config: {
"motor_index": 2,
"props_out": true,
"airmode_idle_percent": 10.0,
},
),
(
id: "mixer3",
type: "tasks::QuadXMixer",
logging: (enabled: false),
config: {
"motor_index": 3,
"props_out": true,
"airmode_idle_percent": 10.0,
},
),
(
id: "mapper",
type: "tasks::RcMapper",
logging: (enabled: false),
config: {
"arm_channel": 4,
"arm_min": 1700,
"arm_max": 1811,
"mode_channel": 5,
"mode_low_max": 600,
"mode_mid_max": 1400,
},
),
(
id: "act_led",
type: "tasks::activity_led::ActivityLed",
run_in_sim: true,
logging: (enabled: false),
resources: {"led": "fc.green_led"},
),
(
id: "vtx_osd",
type: "tasks::vtx::VtxOsd",
logging: (enabled: false),
config: {
"cols": 53,
"row": 13,
"col_center": 26,
"heading_row": 1,
"heading_col_center": 26,
"gps_row": 0,
"gps_col_center": 26,
"speed_row": 7,
"speed_col": 9,
"alt_row": 7,
"alt_col": 36,
},
),
(
id: "flow_logger",
type: "tasks::flow_msp::FlowMspLogger",
missions: ["flow"],
run_in_sim: true,
logging: (enabled: false),
),
(
id: "gnss_ublox",
type: "tasks::gnss::GnssSource",
run_in_sim: true,
logging: (enabled: true),
resources: {"serial": "fc.uart3"},
config: {
"poll_nav_pvt_ms": 200,
"poll_nav_sat_ms": 1000,
"poll_nav_sig_ms": 1000,
"poll_mon_rf_ms": 2000,
"emit_raw_unknown": true,
},
),
(
id: "gnss_fix_sink",
type: "tasks::gnss::GnssFixSink",
missions: ["gnss"],
run_in_sim: true,
logging: (enabled: true),
),
],
bridges: [
(
id: "rc",
type: "cu_crsf::CrsfBridge<cu_micoairh743::Uart6Port, cu_micoairh743::SerialPortError>",
run_in_sim: false,
logging: (enabled: true),
resources: {"serial": "fc.uart6"},
channels: [
Rx(id: "rc_rx"),
Tx(id: "lq_tx"),
],
),
(
id: "vtx_msp",
type: "cu_msp_bridge::CuMspBridge<cu_micoairh743::Uart2Port, cu_micoairh743::SerialPortError>",
run_in_sim: false,
logging: (enabled: false),
resources: {"serial": "fc.uart2"},
channels: [
Tx(id: "requests"),
Rx(id: "responses"),
Rx(id: "incoming"),
],
),
(
id: "flow_msp",
type: "cu_msp_bridge::CuMspBridge<cu_micoairh743::Uart4Port, cu_micoairh743::SerialPortError>",
missions: ["flow"],
run_in_sim: false,
logging: (enabled: false),
resources: {"serial": "fc.uart4"},
channels: [
Tx(id: "requests"),
Rx(id: "responses"),
Rx(id: "incoming"),
],
),
(
id: "bdshot",
type: "cu_bdshot::Stm32BdshotBridge",
run_in_sim: false,
logging: (enabled: true),
channels: [
Tx(id: "esc0_tx"),
Tx(id: "esc1_tx"),
Tx(id: "esc2_tx"),
Tx(id: "esc3_tx"),
Rx(id: "esc0_rx"),
Rx(id: "esc1_rx"),
Rx(id: "esc2_rx"),
Rx(id: "esc3_rx"),
],
),
],
cnx: [
(
src: "bmi088",
dst: "imu_cal",
msg: "cu_sensor_payloads::ImuPayload",
),
(
src: "mapper",
dst: "imu_cal",
msg: "crate::messages::ControlInputs",
),
(
src: "imu_cal",
dst: "ahrs",
msg: "cu_sensor_payloads::ImuPayload",
),
(
src: "ist8310",
dst: "ahrs",
msg: "cu_sensor_payloads::MagnetometerPayload",
),
(
src: "ahrs",
dst: "mag_heading",
msg: "cu_ahrs::AhrsPose",
),
(
src: "ahrs",
dst: "attitude",
msg: "cu_ahrs::AhrsPose",
),
(
src: "mapper",
dst: "attitude",
msg: "crate::messages::ControlInputs",
),
(
src: "attitude",
dst: "rate",
msg: "crate::messages::BodyRateSetpoint",
),
(
src: "imu_cal",
dst: "rate",
msg: "cu_sensor_payloads::ImuPayload",
),
(
src: "mapper",
dst: "rate",
msg: "crate::messages::ControlInputs",
),
(
src: "rc/rc_rx",
dst: "mapper",
msg: "cu_crsf::messages::RcChannelsPayload",
),
(
src: "mapper",
dst: "act_led",
msg: "crate::messages::ControlInputs",
),
(
src: "mapper",
dst: "mixer0",
msg: "crate::messages::ControlInputs",
),
(
src: "mapper",
dst: "mixer1",
msg: "crate::messages::ControlInputs",
),
(
src: "mapper",
dst: "mixer2",
msg: "crate::messages::ControlInputs",
),
(
src: "mapper",
dst: "mixer3",
msg: "crate::messages::ControlInputs",
),
(
src: "mapper",
dst: "vtx_osd",
msg: "crate::messages::ControlInputs",
),
(
src: "dps310",
dst: "vtx_osd",
msg: "cu_sensor_payloads::BarometerPayload",
),
(
src: "mag_heading",
dst: "vtx_osd",
msg: "crate::messages::GeographicHeading",
),
(
src: "rate",
dst: "mixer0",
msg: "crate::messages::BodyCommand",
),
(
src: "rate",
dst: "mixer1",
msg: "crate::messages::BodyCommand",
),
(
src: "rate",
dst: "mixer2",
msg: "crate::messages::BodyCommand",
),
(
src: "rate",
dst: "mixer3",
msg: "crate::messages::BodyCommand",
),
(
src: "mixer0",
dst: "bdshot/esc0_tx",
msg: "cu_bdshot::EscCommand",
),
(
src: "mixer1",
dst: "bdshot/esc1_tx",
msg: "cu_bdshot::EscCommand",
),
(
src: "mixer2",
dst: "bdshot/esc2_tx",
msg: "cu_bdshot::EscCommand",
),
(
src: "mixer3",
dst: "bdshot/esc3_tx",
msg: "cu_bdshot::EscCommand",
),
(
src: "battery_adc",
dst: "vtx_osd",
msg: "crate::messages::BatteryVoltage",
),
(
src: "vtx_msp/incoming",
dst: "vtx_osd",
msg: "cu_msp_bridge::MspRequestBatch",
),
(
src: "vtx_osd",
dst: "vtx_msp/requests",
msg: "cu_msp_bridge::MspRequestBatch",
),
(
src: "flow_msp/incoming",
dst: "flow_logger",
msg: "cu_msp_bridge::MspRequestBatch",
missions: ["flow"],
),
(
src: "gnss_ublox",
dst: "__nc__",
msg: "cu_gnss_payloads::GnssEpochTime",
),
(
src: "gnss_ublox",
dst: "vtx_osd",
msg: "cu_gnss_payloads::GnssFixSolution",
),
(
src: "gnss_ublox",
dst: "gnss_fix_sink",
msg: "cu_gnss_payloads::GnssFixSolution",
missions: ["gnss"],
),
(
src: "gnss_ublox",
dst: "__nc__",
msg: "cu_gnss_payloads::GnssAccuracy",
),
(
src: "gnss_ublox",
dst: "__nc__",
msg: "cu_gnss_payloads::GnssSatsInView",
),
(
src: "gnss_ublox",
dst: "__nc__",
msg: "cu_gnss_payloads::GnssSatelliteState",
),
(
src: "gnss_ublox",
dst: "__nc__",
msg: "cu_gnss_payloads::GnssSignalState",
),
(
src: "gnss_ublox",
dst: "__nc__",
msg: "cu_gnss_payloads::GnssRfStatus",
),
(
src: "gnss_ublox",
dst: "__nc__",
msg: "cu_gnss_payloads::GnssInfoText",
),
(
src: "gnss_ublox",
dst: "__nc__",
msg: "cu_gnss_payloads::GnssCommandAck",
),
(
src: "gnss_ublox",
dst: "__nc__",
msg: "cu_gnss_payloads::GnssRawUbxFrame",
),
],
monitor: (
type: "tasks::monitor::FlightMonitor",
),
logging: (
slab_size_mib: 200,
section_size_mib: 20,
enable_task_logging: true,
),
)