refactor(firmware): simplify configuration and diagnostics
This commit is contained in:
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"));
|
||||
}
|
||||
Reference in new issue
Block a user