refactor(firmware): simplify configuration and diagnostics

This commit is contained in:
Onur Özkan committed 2026-08-23 00:40:36 +03:00
1 parent ba9c97ed3b
commit fdf82a5114
96 files changed
+1612 -2772

No files matched your search

@@ -267,10 +267,9 @@ fn configuration_schema_is_generated_without_board_forwarding_code() {
"MAVLINK_COMPONENT_ID",
"RAW_IMU_HZ",
"HEARTBEAT_HZ",
"MAVLINK_MAXIMUM_LOG_SEVERITY",
"MAVLINK_LOG_LEVEL_FILTER",
"RANGE_HZ",
"OPTICAL_FLOW_HZ",
"MAVLINK_LOGGING_ENABLED",
] {
assert!(
platform_config.contains(&format!("const {semantic_id}: FieldId")),
@@ -308,16 +307,11 @@ fn f722_link_budget_reserves_only_deterministic_telemetry() {
let board = platform_source("src/f722/board.rs");
assert!(board.contains("SCHEDULED_TELEMETRY_BYTES_PER_SECOND"));
assert!(board.contains("SERVICE_HZ * SCHEDULED_FRAME_MAXIMUM_BYTES"));
assert_eq!(
board
.matches("self.drain_one_mavlink_log_record();")
.count(),
1,
"each service turn must make exactly one bounded log admission attempt"
);
assert!(board.contains("if runtime.mavlink_logging_enabled"));
assert!(board.contains("LogFilter::up_to(runtime.mavlink_maximum_log_severity)"));
assert!(board.contains("LogFilter::disabled()"));
assert!(board.contains("self.drain_one_mavlink_diagnostic();"));
assert!(board.contains("let mavlink_log_filter = runtime.mavlink_log_level_filter;"));
assert!(board.contains("LogSinkQueue::new(mavlink_log_filter)"));
assert!(!board.contains("mavlink_logging_enabled"));
assert!(!board.contains("LogFilter"));
for periodic_diagnostic_policy in [
"ERROR_RECORDS_PER_SECOND",
"LOG_RECORDS_PER_SECOND",
@@ -341,6 +335,11 @@ fn mavlink_transport_faults_do_not_recurse_or_retain_dead_accounting() {
let transport = platform_source("src/f722/data_channel.rs");
let portable_channel = platform_source("../../libs/kaptan-data-channel/src/lib.rs");
assert!(
!board.contains("mavlink transmit dma fault"),
"the MAVLink sink must not report its own transmit failure through itself"
);
for recursive_path in [
"drain_transport_faults",
"take_transport_fault",
@@ -368,3 +367,30 @@ fn mavlink_transport_faults_do_not_recurse_or_retain_dead_accounting() {
);
}
}
#[test]
fn f722_producers_keep_logs_and_typed_errors_separate() {
let board = platform_source("src/f722/board.rs");
let logger = platform_source("../../libs/kaptan-log/src/facade.rs");
let errors = platform_source("../../libs/kaptan-err-propagate/src/ingress.rs");
for macro_name in [
"kaptan_log::debug!",
"kaptan_log::info!",
"kaptan_log::warn!",
"kaptan_log::error!",
] {
assert!(
board.contains(macro_name),
"f722 does not exercise {macro_name}"
);
}
assert!(board.contains("#[kaptan_err_propagate::propagate]"));
assert!(!board.contains("report_error"));
assert!(!board.contains("report_static_error"));
assert!(logger.contains("GLOBAL_INGRESS_CAPACITY"));
assert!(logger.contains("compare_exchange"));
assert!(errors.contains("AtomicU8"));
assert!(errors.contains("UnsafeCell<MaybeUninit<ErrorRecord>>"));
assert!(errors.contains("compare_exchange"));
}