feat(mavlink): adopt the kaptan-native dialect

This commit is contained in:
Onur Özkan committed 2026-08-24 00:56:06 +03:00
1 parent 1c90870634
commit 5f91465e66
87 files changed
+7733 -6850

No files matched your search

@@ -141,13 +141,17 @@ fn ordinary_f722_image_has_direct_configuration_after_output_inhibition() {
"ordinary board images must not hide configuration behind a development feature"
);
for required in [
"configuration: F722ConfigManager",
"config_protocol: ConfigProtocol",
"receiver: IntegrityMavlinkReceiver<2>",
"config_lease_ticks: u16",
"wire::decode_command",
"self.config_protocol.dispatch_from_composition",
"visit_response(response, &mut sender)",
"config_file: F722ConfigFile",
"file_service: FileService",
"receiver: IntegrityMavlinkReceiver<1>",
"file_lease_ticks: u16",
"TRANSFER_REPLAY_LEASE_SECONDS",
"let Some(message) = frame.decode()",
"wire::decode_request",
".dispatch(&mut self.config_file",
"send_file_response",
"let class = kaptan_mavlink::transmitter::FrameClass::Critical",
"control.status != FileStatus::RequestConflict",
] {
assert!(
board.contains(required),
@@ -163,23 +167,15 @@ fn ordinary_f722_image_has_direct_configuration_after_output_inhibition() {
"the MPU runtime may drive only PB2 atomically, not retain GPIOB ownership"
);
assert!(!board.contains("development-config"));
assert!(
!board.contains("ArmRequest"),
"telemetry must not decode arm commands"
);
assert!(
!board.contains("MAV_CMD_COMPONENT_ARM_DISARM") && !board.contains("decode_arm_request"),
"telemetry must not accept an arm command"
);
assert!(
!firmware.contains("shared = [mavlink, motors]"),
"the MAVLink worker must not share a motor resource"
);
assert!(
firmware.contains("const MAVLINK_EVENT_RECEIVED")
&& firmware.contains("mavlink.receive_config_interrupt(event)")
&& firmware.contains("mavlink.receive_mavlink_interrupt(event)")
&& !firmware.contains("development-config"),
"ordinary images must always dispatch received configuration frames"
"ordinary images must always dispatch received MAVLink frames"
);
}
@@ -279,7 +275,7 @@ fn configuration_schema_is_generated_without_board_forwarding_code() {
for semantic_id in [
"MAVLINK_SYSTEM_ID",
"MAVLINK_COMPONENT_ID",
"RAW_IMU_HZ",
"IMU_HZ",
"HEARTBEAT_HZ",
"MAVLINK_LOG_LEVEL_FILTER",
"RANGE_HZ",
@@ -330,8 +326,8 @@ fn f722_link_budget_reserves_only_deterministic_telemetry() {
"ERROR_RECORDS_PER_SECOND",
"LOG_RECORDS_PER_SECOND",
"WORST_CASE_OBSERVABILITY_BYTES_PER_SECOND",
"KAPTAN_ERROR_FRAME_MAXIMUM_BYTES",
"KAPTAN_LOG_FRAME_MAXIMUM_BYTES",
"ERROR_FRAME_MAXIMUM_BYTES",
"LOG_FRAME_MAXIMUM_BYTES",
"budget_ticks",
"error_budget",
"log_budget",
@@ -385,6 +381,7 @@ fn mavlink_transport_faults_do_not_recurse_or_retain_dead_accounting() {
#[test]
fn f722_producers_keep_logs_and_reportable_errors_separate() {
let board = platform_source("src/f722/board.rs");
let config = platform_source("src/f722/config.rs");
let logger = platform_source("../../libs/kaptan-log/src/facade.rs");
let errors = platform_source("../../libs/kaptan-err-reportable/src/ingress.rs");
@@ -400,6 +397,14 @@ fn f722_producers_keep_logs_and_reportable_errors_separate() {
);
}
assert!(board.contains("#[kaptan_err_reportable::propagate]"));
assert!(
config.contains("enum PersistConfigurationError {")
&& config.contains("#[kaptan_error(id = 2210)]")
&& config.contains("#[kaptan_error(id = 2209)]")
&& config.contains("impl From<JournalError<F722FlashError>>")
&& config.contains("fn persist_candidate(")
&& config.contains("#[kaptan_err_reportable::propagate]")
);
assert!(!board.contains("report_error"));
assert!(!board.contains("report_static_error"));
assert!(logger.contains("GLOBAL_INGRESS_CAPACITY"));