OMG RTC 1.0 — Spec Coverage
Spec: OMG RTC 1.0 — formal/2008-04-04 (~95 pages) →
Context: RTC (Robotic Technology Component) is a component model specifically for RT systems. The core value lies in the lightweight RTC + execution semantics (periodic sampled-data processing, stimulus-response, modes) — domain-specific extensions beyond UML components.
ZeroDDS implements the spec in the Local PSM (§6.3) without a CORBA ORB. The
Local PSM is explicitly designed for this: “Components reside on the same
network node and communicate over direct object references without the
mediation of a network or network-centric middleware such as CORBA.”
(§1.3 point 1, p. 2). The Lightweight CCM PSM (§6.4) and CORBA PSM (§6.5)
are n/a (no container/ORB).
Implementation:
crates/rtc/· docs.rs — Local PSM (§6.3) without a CORBA ORB, 6 modules, 61 tests green.
§1 Scope
§1.1 Overview
Spec: §1.1, p. 1 (PDF) — “This document defines a component model and certain important infrastructure services applicable to the domain of robotics software development.”
Repo: crates/rtc/src/lib.rs crate-doc header.
Tests: the component model is exercised in its three parts:
crates/rtc/src/object.rs::tests::initialize_then_finalize_round_trips_alive_flag
(component), crates/rtc/src/execution.rs::tests::start_stop_round_trips_running_flag
(execution context), crates/rtc/src/semantics.rs::tests::data_flow_callbacks_are_invoked_independently
(infrastructure service).
Status: done
§1.2 Platform-Independent Model
Spec: §1.2, p. 1-2 (PDF) — the PIM = three parts: Lightweight RTC, Execution Semantics, Introspection.
Repo: Lightweight RTC + Execution Semantics + the Introspection data
model complete (crates/rtc/src/object.rs, crates/rtc/src/execution.rs,
crates/rtc/src/lifecycle.rs, crates/rtc/src/semantics.rs,
crates/rtc/src/resource.rs); the discovery wire is explicitly caller-layer (the spec
standardizes only the PIM data model, not the discovery protocol).
Tests: one proof per PIM part —
Lightweight RTC: crates/rtc/src/object.rs::tests::attach_then_detach_works;
Execution Semantics: crates/rtc/src/semantics.rs::tests::fsm_on_action_is_invoked_per_event,
crates/rtc/src/semantics.rs::tests::multi_mode_on_mode_changed_records_transition;
Introspection: crates/rtc/src/resource.rs::tests::get_component_profile_returns_component,
crates/rtc/src/resource.rs::tests::introspection_default_methods_compose_correctly.
Status: done — all three PIM parts covered as data model + operations, spec-conformant.
§1.3 Platform-Specific Models
Spec: §1.3, p. 2 (PDF) — three PSMs: Local, Lightweight CCM, CORBA.
Repo: the Local PSM (§6.3) is the implementation base: crates/rtc/.
The spec allows any one of the three PSMs as the sole compliance form (§2).
The Lightweight CCM PSM (§6.4) and the CORBA PSM (§6.5) are not implemented
— they are carried as open items of their own.
Tests: the Local PSM is proven by
crates/rtc/tests/annex_a_operation_surface.rs::lightweight_rt_object_operations_match_the_annex_a_shape
and crates/rtc/tests/annex_a_operation_surface.rs::execution_context_operations_cover_all_twelve_annex_a_operations.
Status: partial — the Local PSM (§6.3) is implemented and proven; the
Lightweight CCM PSM (§6.4) and the CORBA PSM (§6.5) are missing and are
carried as open items of their own.
§2 Conformance and compliance
§2 Conformance points
Spec: §2, p. 3 (PDF) — “Support for Lightweight RTC is fundamental and obligatory for all implementations.” Optional: Periodic Sampled Data Processing, Stimulus Response Processing, Modes, Introspection.
Repo: Lightweight RTC (mandatory) + all four optional points covered:
- Lightweight RTC mandatory: crates/rtc/src/object.rs,
crates/rtc/src/lifecycle.rs, crates/rtc/src/execution.rs (see §5).
- Periodic Sampled Data Processing (optional):
crates/rtc/src/semantics.rs::DataFlowComponentAction +
crates/rtc/src/lifecycle.rs::ExecutionKind::Periodic (see §5.3.1).
- Stimulus Response Processing (optional):
crates/rtc/src/semantics.rs::FsmComponentAction (see §5.3.2).
- Modes (optional): crates/rtc/src/semantics.rs::{ModeOfOperation, MultiModeComponentAction} (see §5.3.3).
- Introspection (optional): the crates/rtc/src/resource.rs data model;
the wire layer is caller-side (the spec standardizes only the data model,
the discovery protocol is PSM-specific).
Tests: one proof per conformance point —
mandatory: crates/rtc/src/lifecycle.rs::tests::valid_transitions_match_spec_state_machine;
Periodic Sampled Data Processing: crates/rtc/src/semantics.rs::tests::data_flow_callbacks_are_invoked_independently;
Stimulus Response Processing: crates/rtc/src/semantics.rs::tests::fsm_on_action_is_invoked_per_event;
Modes: crates/rtc/src/semantics.rs::tests::multi_mode_on_mode_changed_records_transition;
Introspection: crates/rtc/src/resource.rs::tests::get_ports_returns_all_two_ports.
Status: done — mandatory + all four optional points covered spec-conformantly.
§3 References
§3.1 Normative references
Spec: §3.1, p. 3 (PDF) — CORBA 3.0+, CCM, SDO 2.1, UML 2.1+.
Repo: —
Tests: —
Status: n/a (informative) — an external normative reference list;
effects are referenced in the consumer items §6.4/§6.5.
§3.2 Non-normative references
Spec: §3.2, p. 4 (PDF) — the RTC RFP + other informative references.
Repo: —
Tests: —
Status: n/a (informative) — editorial.
§4 Additional information
§4.1 Requirements
Spec: §4.1, p. 4-5 (PDF) — listed requirements.
Repo: —
Tests: —
Status: n/a (informative) — editorial background.
§4.2 Acknowledgements
Spec: §4.2, p. 5-6 (PDF) — submitting + supporting companies.
Repo: —
Tests: —
Status: n/a (informative) — editorial.
§4.3 Issue reporting
Spec: §4.3, p. 6 (PDF) — the issue-reporting procedure.
Repo: —
Tests: —
Status: n/a (informative) — editorial.
§5 Platform Independent Model
§5.1 Format and conventions
Spec: §5.1, p. 7 (PDF) — the spec’s class-table format.
Repo: —
Tests: —
Status: n/a (informative) — notation convention; applies to the §5.x
tables.
§5.2.1 ReturnCode_t
Spec: §5.2.1, p. 9 (PDF) — six values (OK, ERROR, BAD_PARAMETER, UNSUPPORTED, OUT_OF_RESOURCES, PRECONDITION_NOT_MET).
Repo: crates/rtc/src/return_code.rs::ReturnCode.
Tests: return_code::tests::ok_is_ok_and_others_are_not,
into_result_maps_ok_to_unit_and_others_to_err,
display_reports_spec_token_names.
Status: done
§5.2.2.1 lightweightRTComponent stereotype
Spec: §5.2.2.1, p. 11 (PDF) — UML stereotype extension of Component.
Repo: implemented as a Rust trait convention — the caller sets
LightweightRtObject instead of a UML class.
Tests: crates/rtc/src/object.rs::tests::initialize_then_finalize_round_trips_alive_flag,
crates/rtc/src/object.rs::tests::attach_then_detach_works — the stereotype
carrier is the LightweightRtObject type itself, whose lifecycle these two
tests walk.
Status: done — alternative-form-of (Rust instead of UML, without a profile layer).
§5.2.2.2 LightweightRTObject interface
Spec: §5.2.2.2, p. 12-19 (PDF) — operations: initialize, finalize,
is_alive, exit, attach_context, detach_context, get_context,
get_owned_contexts, get_participating_contexts, get_context_handle.
Repo: crates/rtc/src/object.rs::LightweightRtObject with
initialize, finalize, is_alive, attach_context, detach_context,
get_participating_contexts, get_context_state + state-machine
enforcement. Without a counterpart: exit, get_context,
get_owned_contexts, get_context_handle.
Tests: crates/rtc/src/object.rs::tests:
fresh_rtc_is_not_alive, initialize_then_finalize_round_trips_alive_flag,
double_initialize_yields_precondition_not_met,
finalize_in_created_state_yields_precondition_not_met,
finalize_with_attached_context_yields_precondition_not_met,
attach_context_in_created_state_fails, attach_then_detach_works,
detach_unknown_handle_yields_precondition_not_met,
detach_active_rtc_yields_precondition_not_met,
activate_inactive_rtc_invokes_on_activated,
deactivate_active_rtc_invokes_on_deactivated,
reset_only_works_from_error_state,
initialize_failure_keeps_rtc_in_created_state,
handles_are_unique_across_attaches. Operation surface against the Annex-A IDL:
crates/rtc/tests/annex_a_operation_surface.rs::lightweight_rt_object_operations_match_the_annex_a_shape.
Status: partial — six of the ten Annex-A operations are implemented and
proven. exit, get_context, get_owned_contexts and get_context_handle
are missing; they presuppose an owner-context registry in
LightweightRtObject that the type does not keep. The remainder is carried
as the open item “§5.2.2.2 owner-context operations”.
§5.2.2.2 Owner-context operations (exit / get_context / get_owned_contexts / get_context_handle)
Spec: §5.2.2.2, p. 12-19 (PDF) — void exit(),
ExecutionContext get_context(in ExecutionContextHandle_t),
ExecutionContextList get_owned_contexts(),
ExecutionContextHandle_t get_context_handle(in ExecutionContext).
Repo: —
Tests: —
Status: open — LightweightRtObject keeps no registry of the contexts
it owns (only of those it participates in) and holds no reference to the
context object type. The four operations presuppose both. Remainder item of
§5.2.2.2.
§5.2.2.3 LifeCycleState enumeration
Spec: §5.2.2.3, p. 19 (PDF) — CREATED/INACTIVE/ACTIVE/ERROR.
Repo: crates/rtc/src/lifecycle.rs::LifeCycleState.
Tests: lifecycle::tests::valid_transitions_match_spec_state_machine.
Status: done
§5.2.2.4 ComponentAction interface
Spec: §5.2.2.4, p. 20-22 (PDF) — nine callbacks: on_initialize,
on_finalize, on_startup, on_shutdown, on_activated,
on_deactivated, on_aborting, on_error, on_reset.
Repo: crates/rtc/src/lifecycle.rs::ComponentAction trait with default
impls.
Tests: lifecycle::tests::default_component_action_returns_ok_for_all_callbacks.
Status: done
§5.2.2.5 ExecutionContext (concept)
Spec: §5.2.2.5, p. 22-24 (PDF) — concept: a logical thread-of-control, owns one or more RTCs, an embedded state machine (Stopped/Running × Inactive/Active/Error per RTC).
Repo: crates/rtc/src/execution.rs::ExecutionContext realizes the
concept.
Tests: crates/rtc/src/execution.rs::tests:
fresh_context_is_stopped_with_default_rate,
start_stop_round_trips_running_flag, double_start_is_idempotent,
set_rate_accepts_positive_finite, set_rate_rejects_non_positive_or_nan,
with_rate_validates_rate_argument,
add_component_attaches_and_returns_handle,
add_uninitialized_component_fails,
activate_then_deactivate_round_trips_state,
activate_with_unknown_handle_yields_bad_parameter,
remove_component_detaches_handle, cannot_remove_active_component.
Status: done
§5.2.2.6 ExecutionContextOperations interface
Spec: §5.2.2.6, p. 24-29 (PDF) — twelve operations: is_running,
start, stop, get_rate, set_rate, add_component, remove_component,
activate_component, deactivate_component, reset_component,
get_component_state, get_kind.
Repo: crates/rtc/src/execution.rs::ExecutionContextOperations trait +
the ExecutionContext impl.
Tests: all twelve operations in one run:
crates/rtc/tests/annex_a_operation_surface.rs::execution_context_operations_cover_all_twelve_annex_a_operations;
individual behaviour in crates/rtc/src/execution.rs::tests:
fresh_context_is_stopped_with_default_rate,
start_stop_round_trips_running_flag, double_start_is_idempotent,
set_rate_accepts_positive_finite, set_rate_rejects_non_positive_or_nan,
with_rate_validates_rate_argument,
add_component_attaches_and_returns_handle,
add_uninitialized_component_fails,
activate_then_deactivate_round_trips_state,
activate_with_unknown_handle_yields_bad_parameter,
remove_component_detaches_handle, cannot_remove_active_component.
Status: done
§5.2.2.7 ExecutionKind enumeration
Spec: §5.2.2.7, p. 30-31 (PDF) — PERIODIC/EVENT_DRIVEN/OTHER.
Repo: crates/rtc/src/lifecycle.rs::ExecutionKind.
Tests: lifecycle::tests::execution_kind_distinguishes_three_modes.
Status: done
§5.2.2.8 ExecutionContextHandle_t
Spec: §5.2.2.8, p. 30 (PDF) — opaque handle type.
Repo: crates/rtc/src/object.rs::ExecutionContextHandle (u32) + an
INVALID_HANDLE sentinel.
Tests: object::tests::handles_are_unique_across_attaches.
Status: done
§5.2.3 Basic types
Spec: §5.2.3, p. 35 (PDF) — Boolean, Double, etc. (PIM level).
Repo: Rust native types (bool, f64).
Tests: crates/rtc/src/object.rs::tests::fresh_rtc_is_not_alive
(Boolean), crates/rtc/src/execution.rs::tests::set_rate_accepts_positive_finite
(Double), crates/rtc/tests/annex_a_operation_surface.rs::annex_a_value_types_and_literals_match_the_idl.
Status: done — alternative mapping.
§5.2.4 Literal specifications
Spec: §5.2.4, p. 38 (PDF) — literal values for the enum members.
Repo: cross-ref the enum definitions.
Tests: crates/rtc/src/lifecycle.rs::tests::valid_transitions_match_spec_state_machine,
crates/rtc/src/lifecycle.rs::tests::execution_kind_distinguishes_three_modes,
crates/rtc/src/return_code.rs::tests::ok_is_ok_and_others_are_not,
crates/rtc/src/return_code.rs::tests::display_reports_spec_token_names,
crates/rtc/tests/annex_a_operation_surface.rs::annex_a_value_types_and_literals_match_the_idl.
Status: done
§5.3.1 Periodic Sampled Data Processing
Spec: §5.3.1, p. 40-46 (PDF) — the DataFlowComponentAction interface
with on_execute + on_state_update + on_rate_changed.
Repo: crates/rtc/src/semantics.rs::DataFlowComponentAction.
Tests: semantics::tests::data_flow_callbacks_are_invoked_independently.
Status: done
§5.3.2 Stimulus Response Processing
Spec: §5.3.2, p. 47-51 (PDF) — the FsmComponentAction interface with
on_action.
Repo: crates/rtc/src/semantics.rs::FsmComponentAction.
Tests: semantics::tests::fsm_on_action_is_invoked_per_event.
Status: done
§5.3.3 Modes of operation
Spec: §5.3.3, p. 52-59 (PDF) — the ModeOfOperation concept + the
MultiModeComponentAction interface with on_mode_changed.
Repo: crates/rtc/src/semantics.rs::{ModeOfOperation, MultiModeComponentAction}.
Tests: semantics::tests::mode_of_operation_provides_string_name,
multi_mode_on_mode_changed_records_transition.
Status: done
§5.4.1 Resource data model
Spec: §5.4.1, p. 61-70 (PDF) — the component/port/connector introspection data model.
Repo: crates/rtc/src/resource.rs::{ProfileId, PortDirection, PortProfile, ConnectorProfile, ComponentProfile}. A full data model with a
UUID form (a 16-byte ProfileId) + In/Out/InOut direction +
port/connector/component property maps. The discovery wire remains a caller
task (e.g. via a DDS-topic push of the profiles).
Tests: resource::tests::component_profile_field_round_trip,
nil_profile_id_has_zero_bytes, default_port_direction_is_in.
Status: done
§5.4.2 Stereotypes and interfaces
Spec: §5.4.2, p. 71-77 (PDF) — introspection-interface operations.
Repo: crates/rtc/src/resource.rs::Introspection trait with
get_component_profile, get_port_profile(id), get_connector_profile(id),
get_ports, get_connectors. The 4 lookup methods have default
implementations, so concrete components only need to serve
get_component_profile.
Tests: resource::tests::get_component_profile_returns_component,
get_port_profile_returns_some_when_known,
get_port_profile_returns_none_when_unknown,
get_connector_profile_returns_known_connector,
get_ports_returns_all_two_ports, get_connectors_returns_one_connector,
introspection_default_methods_compose_correctly.
Status: done
§6 Platform Specific Models
§6.1 UML-to-IDL transformation
Spec: §6.1, p. 79-80 (PDF) — UML→IDL mapping rules.
Repo: —
Tests: —
Status: open — the rules produce the IDL of the PSMs Lightweight CCM (§6.4) and CORBA (§6.5), both of which are missing; the local PSM in Rust (crates/rtc/) needs no IDL.
§6.2 IDL definitions
Spec: §6.2, p. 81-82 (PDF) — a cross-ref to the Annex-A IDL: the PSM
clauses name their operations through RTC.idl.
Repo: the Rust trait layer carries the Annex-A operations with the same
parameters and the same ReturnCode_t result; the equivalence is executed,
not asserted.
Tests: crates/rtc/tests/annex_a_operation_surface.rs:
component_action_covers_every_annex_a_callback,
execution_semantics_interfaces_carry_their_annex_a_operations,
execution_context_operations_cover_all_twelve_annex_a_operations,
annex_a_value_types_and_literals_match_the_idl.
Run with cargo test -p zerodds-rtc; locally (macOS, this run) 61/61 green,
7 of them in this module.
Status: done
§6.3 Local PSM
Spec: §6.3, p. 82-87 (PDF) — Local PSM = direct object refs without an ORB.
Repo: crates/rtc/ is the Local-PSM realization.
Tests: crates/rtc/tests/annex_a_operation_surface.rs::lightweight_rt_object_operations_match_the_annex_a_shape,
crates/rtc/tests/annex_a_operation_surface.rs::execution_context_operations_cover_all_twelve_annex_a_operations,
crates/rtc/tests/annex_a_operation_surface.rs::introspection_operations_return_the_annex_a_resource_model
— direct object refs without an ORB.
Status: done
§6.4 Lightweight CCM PSM
Spec: §6.4, p. 88 (PDF) — mapping onto LwCCM connectors/SDO.
Repo: —
Tests: —
Status: open — there is no RTC-to-LwCCM adapter in the tree.
crates/ccm/src/lightweight.rs filters a CCM IDL model down to the LwCCM
profile and knows nothing of RTC; crates/rtc/ knows nothing of CCM. The
crate-doc header of crates/rtc/src/lib.rs itself lists §6.4 under “What is
not covered”. The spec allows compliance via a single PSM (§2); the
implemented one is the Local PSM (§6.3).
§6.5 CORBA PSM
Spec: §6.5, p. 88-90 (PDF) — mapping onto CORBA components.
Repo: —
Tests: —
Status: open — there is no RTC-to-CORBA adapter and no RTC Annex-A IDL
that would run through the codegen crates. The crate-doc header of
crates/rtc/src/lib.rs itself lists §6.5 under “What is not covered”. The
spec allows compliance via a single PSM (§2); the implemented one is the
Local PSM (§6.3).
Annex A — RTC IDL
Annex A — complete RTC IDL file
Spec: Annex A, p. 91-94 (PDF) — the RTC IDL. The annex is headed
“(non-normative)” in the PDF and calls itself a convenience copy of the
accompanying RTC.idl.
Repo: the Rust trait definition in crates/rtc/src/ — parameters and
ReturnCode_t result identical to the Annex-A IDL per operation, except for
the four LightweightRTObject operations of the §5.2.2.2 open item.
Tests: crates/rtc/tests/annex_a_operation_surface.rs:
component_action_covers_every_annex_a_callback,
execution_semantics_interfaces_carry_their_annex_a_operations,
lightweight_rt_object_operations_match_the_annex_a_shape,
execution_context_operations_cover_all_twelve_annex_a_operations,
annex_a_value_types_and_literals_match_the_idl,
introspection_operations_return_the_annex_a_resource_model.
Status: partial — the Annex-A surface is executed except for exit,
get_context, get_owned_contexts and get_context_handle; the remainder
is the §5.2.2.2 open item.
Audit status
20 done / 3 partial / 4 open / 0 blocked / 6 n/a (informative).
Test run: cargo test -p zerodds-rtc — 47 lib tests + 6 integration tests +
1 doc test green, 0 failed.
Open items: omg-rtc-1.0.open.en.md.
OMG RTC 1.0 — Spec-Coverage
Spec: OMG RTC 1.0 — formal/2008-04-04 (~95 Seiten) →
Kontext: RTC (Robotic Technology Component) ist ein Komponenten- Modell speziell für RT-Systeme. Der zentrale Wert liegt im Lightweight-RTC + Execution-Semantics (Periodic-Sampled-Data- Processing, Stimulus-Response, Modes) — Domain-spezifische Erweiterungen über UML-Components hinaus.
ZeroDDS implementiert die Spec im Local PSM (§6.3) ohne CORBA-ORB. Das
Local PSM ist explizit dafür ausgelegt: “Components reside on the same
network node and communicate over direct object references without the
mediation of a network or network-centric middleware such as CORBA.”
(§1.3 Punkt 1, S. 2). Lightweight CCM PSM (§6.4) und CORBA PSM (§6.5)
sind n/a (kein Container/ORB).
Implementation:
crates/rtc/· docs.rs — Local PSM (§6.3) ohne CORBA-ORB, 6 Module, 61 Tests grün.
§1 Scope
§1.1 Overview
Spec: §1.1, S. 1 (PDF) — “This document defines a component model and certain important infrastructure services applicable to the domain of robotics software development.”
Repo: crates/rtc/src/lib.rs Crate-Doc-Header.
Tests: Das Komponenten-Modell ist in seinen drei Bestandteilen
ausgeführt: crates/rtc/src/object.rs::tests::initialize_then_finalize_round_trips_alive_flag
(Komponente), crates/rtc/src/execution.rs::tests::start_stop_round_trips_running_flag
(Execution-Context), crates/rtc/src/semantics.rs::tests::data_flow_callbacks_are_invoked_independently
(Infrastruktur-Service).
Status: done
§1.2 Platform-Independent Model
Spec: §1.2, S. 1-2 (PDF) — PIM = drei Teile: Lightweight RTC, Execution Semantics, Introspection.
Repo: Lightweight RTC + Execution Semantics + Introspection-
Datenmodell vollständig (crates/rtc/src/object.rs,
crates/rtc/src/execution.rs, crates/rtc/src/lifecycle.rs,
crates/rtc/src/semantics.rs, crates/rtc/src/resource.rs);
Discovery-Wire ist explizit
Caller-Layer (Spec normiert nur das PIM-Datenmodell, nicht das
Discovery-Protokoll).
Tests: ein Beleg pro PIM-Teil —
Lightweight RTC: crates/rtc/src/object.rs::tests::attach_then_detach_works;
Execution Semantics: crates/rtc/src/semantics.rs::tests::fsm_on_action_is_invoked_per_event,
crates/rtc/src/semantics.rs::tests::multi_mode_on_mode_changed_records_transition;
Introspection: crates/rtc/src/resource.rs::tests::get_component_profile_returns_component,
crates/rtc/src/resource.rs::tests::introspection_default_methods_compose_correctly.
Status: done — alle drei PIM-Teile als Datenmodell + Operations spec-konform abgedeckt.
§1.3 Platform-Specific Models
Spec: §1.3, S. 2 (PDF) — Drei PSMs: Local, Lightweight CCM, CORBA.
Repo: Local PSM (§6.3) ist die Implementation-Basis:
crates/rtc/. Die Spec erlaubt einen der drei PSMs als alleinige
Compliance-Form (§2). Lightweight CCM PSM (§6.4) und CORBA PSM (§6.5)
sind nicht umgesetzt — eigene Items mit Status open.
Tests: Local PSM belegt durch
crates/rtc/tests/annex_a_operation_surface.rs::lightweight_rt_object_operations_match_the_annex_a_shape
und crates/rtc/tests/annex_a_operation_surface.rs::execution_context_operations_cover_all_twelve_annex_a_operations.
Status: partial — Local PSM (§6.3) umgesetzt und belegt; Lightweight
CCM PSM (§6.4) und CORBA PSM (§6.5) fehlen und werden als eigene
open-Items geführt.
§2 Conformance and Compliance
§2 Conformance Points
Spec: §2, S. 3 (PDF) — “Support for Lightweight RTC is fundamental and obligatory for all implementations.” Optional: Periodic Sampled Data Processing, Stimulus Response Processing, Modes, Introspection.
Repo: Lightweight RTC (Mandatory) + alle vier Optional-Points
abgedeckt:
- Lightweight RTC Mandatory: crates/rtc/src/object.rs,
crates/rtc/src/lifecycle.rs, crates/rtc/src/execution.rs
(siehe §5).
- Periodic Sampled Data Processing (Optional):
crates/rtc/src/semantics.rs::DataFlowComponentAction +
crates/rtc/src/lifecycle.rs::ExecutionKind::Periodic
(siehe §5.3.1).
- Stimulus Response Processing (Optional):
crates/rtc/src/semantics.rs::FsmComponentAction (siehe §5.3.2).
- Modes (Optional): crates/rtc/src/semantics.rs::{ModeOfOperation, MultiModeComponentAction} (siehe §5.3.3).
- Introspection (Optional): crates/rtc/src/resource.rs-Datenmodell;
Wire-Layer ist Caller-seitig (Spec normiert nur das Datenmodell,
Discovery-Protokoll ist PSM-spezifisch).
Tests: ein Beleg pro Conformance-Point —
Mandatory: crates/rtc/src/lifecycle.rs::tests::valid_transitions_match_spec_state_machine;
Periodic Sampled Data Processing: crates/rtc/src/semantics.rs::tests::data_flow_callbacks_are_invoked_independently;
Stimulus Response Processing: crates/rtc/src/semantics.rs::tests::fsm_on_action_is_invoked_per_event;
Modes: crates/rtc/src/semantics.rs::tests::multi_mode_on_mode_changed_records_transition;
Introspection: crates/rtc/src/resource.rs::tests::get_ports_returns_all_two_ports.
Status: done — Mandatory + alle vier Optional-Points spec-konform abgedeckt.
§3 References
§3.1 Normative References
Spec: §3.1, S. 3 (PDF) — CORBA 3.0+, CCM, SDO 2.1, UML 2.1+.
Repo: —
Tests: —
Status: n/a (informative) — Externe normative Referenz-Liste;
Auswirkungen werden in Konsumenten-Items §6.4/§6.5 referenziert.
§3.2 Non-normative References
Spec: §3.2, S. 4 (PDF) — RTC RFP + andere informative Referenzen.
Repo: —
Tests: —
Status: n/a (informative) — Editorial.
§4 Additional Information
§4.1 Requirements
Spec: §4.1, S. 4-5 (PDF) — Listed Requirements.
Repo: —
Tests: —
Status: n/a (informative) — Editorial-Background.
§4.2 Acknowledgements
Spec: §4.2, S. 5-6 (PDF) — Submitting + Supporting-Companies.
Repo: —
Tests: —
Status: n/a (informative) — Editorial.
§4.3 Issue Reporting
Spec: §4.3, S. 6 (PDF) — Issue-Reporting-Procedure.
Repo: —
Tests: —
Status: n/a (informative) — Editorial.
§5 Platform Independent Model
§5.1 Format and Conventions
Spec: §5.1, S. 7 (PDF) — Class-Tabel-Format der Spec.
Repo: —
Tests: —
Status: n/a (informative) — Notations-Konvention; gilt für §5.x-Tabellen.
§5.2.1 ReturnCode_t
Spec: §5.2.1, S. 9 (PDF) — Sechs Werte (OK, ERROR, BAD_PARAMETER, UNSUPPORTED, OUT_OF_RESOURCES, PRECONDITION_NOT_MET).
Repo: crates/rtc/src/return_code.rs::ReturnCode.
Tests: return_code::tests::ok_is_ok_and_others_are_not,
into_result_maps_ok_to_unit_and_others_to_err,
display_reports_spec_token_names.
Status: done
§5.2.2.1 lightweightRTComponent Stereotype
Spec: §5.2.2.1, S. 11 (PDF) — UML-Stereotype-Erweiterung von
Component.
Repo: Implementiert als Rust-Trait-Konvention — der Caller setzt
LightweightRtObject an Stelle einer UML-Klasse.
Tests: crates/rtc/src/object.rs::tests::initialize_then_finalize_round_trips_alive_flag,
crates/rtc/src/object.rs::tests::attach_then_detach_works — der
Stereotype-Träger ist der LightweightRtObject-Typ selbst, dessen
Lifecycle in diesen beiden Tests durchlaufen wird.
Status: done — alternative-Form-of (Rust statt UML, ohne Profil-Layer).
§5.2.2.2 LightweightRTObject Interface
Spec: §5.2.2.2, S. 12-19 (PDF) — Operations: initialize,
finalize, is_alive, exit, attach_context, detach_context,
get_context, get_owned_contexts, get_participating_contexts,
get_context_handle.
Repo: crates/rtc/src/object.rs::LightweightRtObject mit
initialize, finalize, is_alive, attach_context,
detach_context, get_participating_contexts, get_context_state +
State-Machine-Enforcement. Ohne Gegenstück: exit, get_context,
get_owned_contexts, get_context_handle.
Tests: crates/rtc/src/object.rs::tests:
fresh_rtc_is_not_alive, initialize_then_finalize_round_trips_alive_flag,
double_initialize_yields_precondition_not_met,
finalize_in_created_state_yields_precondition_not_met,
finalize_with_attached_context_yields_precondition_not_met,
attach_context_in_created_state_fails, attach_then_detach_works,
detach_unknown_handle_yields_precondition_not_met,
detach_active_rtc_yields_precondition_not_met,
activate_inactive_rtc_invokes_on_activated,
deactivate_active_rtc_invokes_on_deactivated,
reset_only_works_from_error_state,
initialize_failure_keeps_rtc_in_created_state,
handles_are_unique_across_attaches. Operations-Fläche gegen die Annex-A-IDL:
crates/rtc/tests/annex_a_operation_surface.rs::lightweight_rt_object_operations_match_the_annex_a_shape.
Status: partial — sechs der zehn Annex-A-Operations sind umgesetzt
und belegt. exit, get_context, get_owned_contexts und
get_context_handle fehlen; sie setzen ein Owner-Context-Register im
LightweightRtObject voraus, das der Typ nicht führt. Rest als
eigenes open-Item „§5.2.2.2 Owner-Context-Operations”.
§5.2.2.2 Owner-Context-Operations (exit / get_context / get_owned_contexts / get_context_handle)
Spec: §5.2.2.2, S. 12-19 (PDF) — void exit(),
ExecutionContext get_context(in ExecutionContextHandle_t),
ExecutionContextList get_owned_contexts(),
ExecutionContextHandle_t get_context_handle(in ExecutionContext).
Repo: —
Tests: —
Status: open — LightweightRtObject führt kein Register der
Contexts, die es besitzt (nur der, an denen es teilnimmt), und hält
keine Referenz auf den Context-Objekt-Typ. Die vier Operations setzen
beides voraus. Rest-Item zu §5.2.2.2.
§5.2.2.3 LifeCycleState Enumeration
Spec: §5.2.2.3, S. 19 (PDF) — CREATED/INACTIVE/ACTIVE/ERROR.
Repo: crates/rtc/src/lifecycle.rs::LifeCycleState.
Tests: lifecycle::tests::valid_transitions_match_spec_state_machine.
Status: done
§5.2.2.4 ComponentAction Interface
Spec: §5.2.2.4, S. 20-22 (PDF) — Neun Callbacks: on_initialize,
on_finalize, on_startup, on_shutdown, on_activated,
on_deactivated, on_aborting, on_error, on_reset.
Repo: crates/rtc/src/lifecycle.rs::ComponentAction Trait mit
Default-Impls.
Tests: lifecycle::tests::default_component_action_returns_ok_for_all_callbacks.
Status: done
§5.2.2.5 ExecutionContext (Concept)
Spec: §5.2.2.5, S. 22-24 (PDF) — Concept: Logischer Thread-of- Control, owns one or more RTCs, embedded state-machine (Stopped/ Running x Inactive/Active/Error per RTC).
Repo: crates/rtc/src/execution.rs::ExecutionContext realisiert
das Konzept.
Tests: crates/rtc/src/execution.rs::tests:
fresh_context_is_stopped_with_default_rate,
start_stop_round_trips_running_flag, double_start_is_idempotent,
set_rate_accepts_positive_finite, set_rate_rejects_non_positive_or_nan,
with_rate_validates_rate_argument,
add_component_attaches_and_returns_handle,
add_uninitialized_component_fails,
activate_then_deactivate_round_trips_state,
activate_with_unknown_handle_yields_bad_parameter,
remove_component_detaches_handle, cannot_remove_active_component.
Status: done
§5.2.2.6 ExecutionContextOperations Interface
Spec: §5.2.2.6, S. 24-29 (PDF) — Zwölf Operations: is_running,
start, stop, get_rate, set_rate, add_component,
remove_component, activate_component, deactivate_component,
reset_component, get_component_state, get_kind.
Repo: crates/rtc/src/execution.rs::ExecutionContextOperations
Trait + ExecutionContext-Impl.
Tests: alle zwölf Operations in einem Lauf:
crates/rtc/tests/annex_a_operation_surface.rs::execution_context_operations_cover_all_twelve_annex_a_operations;
Einzelverhalten in crates/rtc/src/execution.rs::tests:
fresh_context_is_stopped_with_default_rate,
start_stop_round_trips_running_flag, double_start_is_idempotent,
set_rate_accepts_positive_finite, set_rate_rejects_non_positive_or_nan,
with_rate_validates_rate_argument,
add_component_attaches_and_returns_handle,
add_uninitialized_component_fails,
activate_then_deactivate_round_trips_state,
activate_with_unknown_handle_yields_bad_parameter,
remove_component_detaches_handle, cannot_remove_active_component.
Status: done
§5.2.2.7 ExecutionKind Enumeration
Spec: §5.2.2.7, S. 30-31 (PDF) — PERIODIC/EVENT_DRIVEN/OTHER.
Repo: crates/rtc/src/lifecycle.rs::ExecutionKind.
Tests: lifecycle::tests::execution_kind_distinguishes_three_modes.
Status: done
§5.2.2.8 ExecutionContextHandle_t
Spec: §5.2.2.8, S. 30 (PDF) — Opaque Handle-Type.
Repo: crates/rtc/src/object.rs::ExecutionContextHandle (u32)
+ INVALID_HANDLE Sentinel.
Tests: object::tests::handles_are_unique_across_attaches.
Status: done
§5.2.3 Basic Types
Spec: §5.2.3, S. 35 (PDF) — Boolean, Double etc. (PIM-Level).
Repo: Rust-Native-Types (bool, f64).
Tests: crates/rtc/src/object.rs::tests::fresh_rtc_is_not_alive
(Boolean), crates/rtc/src/execution.rs::tests::set_rate_accepts_positive_finite
(Double), crates/rtc/tests/annex_a_operation_surface.rs::annex_a_value_types_and_literals_match_the_idl.
Status: done — alternative-Mapping.
§5.2.4 Literal Specifications
Spec: §5.2.4, S. 38 (PDF) — Literal-Werte für Enum-Members.
Repo: Cross-Ref Enum-Definitionen.
Tests: crates/rtc/src/lifecycle.rs::tests::valid_transitions_match_spec_state_machine,
crates/rtc/src/lifecycle.rs::tests::execution_kind_distinguishes_three_modes,
crates/rtc/src/return_code.rs::tests::ok_is_ok_and_others_are_not,
crates/rtc/src/return_code.rs::tests::display_reports_spec_token_names,
crates/rtc/tests/annex_a_operation_surface.rs::annex_a_value_types_and_literals_match_the_idl.
Status: done
§5.3.1 Periodic Sampled Data Processing
Spec: §5.3.1, S. 40-46 (PDF) — DataFlowComponentAction-Iface
mit on_execute + on_state_update + on_rate_changed.
Repo: crates/rtc/src/semantics.rs::DataFlowComponentAction.
Tests: semantics::tests::data_flow_callbacks_are_invoked_independently.
Status: done
§5.3.2 Stimulus Response Processing
Spec: §5.3.2, S. 47-51 (PDF) — FsmComponentAction-Iface mit
on_action.
Repo: crates/rtc/src/semantics.rs::FsmComponentAction.
Tests: semantics::tests::fsm_on_action_is_invoked_per_event.
Status: done
§5.3.3 Modes of Operation
Spec: §5.3.3, S. 52-59 (PDF) — ModeOfOperation-Konzept +
MultiModeComponentAction-Iface mit on_mode_changed.
Repo: crates/rtc/src/semantics.rs::{ModeOfOperation, MultiModeComponentAction}.
Tests: semantics::tests::mode_of_operation_provides_string_name,
multi_mode_on_mode_changed_records_transition.
Status: done
§5.4.1 Resource Data Model
Spec: §5.4.1, S. 61-70 (PDF) — Component-/Port-/Connector- Introspection-Datenmodell.
Repo: crates/rtc/src/resource.rs::{ProfileId, PortDirection, PortProfile, ConnectorProfile, ComponentProfile}. Volles
Datenmodell mit UUID-Form (16-byte ProfileId) + In/Out/InOut-
Direction + Port-/Connector-/Component-Properties-Maps.
Discovery-Wire bleibt Caller-Aufgabe (z.B. via DDS-Topic-Push der
Profiles).
Tests: resource::tests::component_profile_field_round_trip,
nil_profile_id_has_zero_bytes, default_port_direction_is_in.
Status: done
§5.4.2 Stereotypes and Interfaces
Spec: §5.4.2, S. 71-77 (PDF) — Introspection-Iface-Operations.
Repo: crates/rtc/src/resource.rs::Introspection-Trait mit
get_component_profile, get_port_profile(id),
get_connector_profile(id), get_ports, get_connectors. Die
4 Lookup-Methoden haben Default-Implementierungen, sodass
konkrete Komponenten nur get_component_profile bedienen müssen.
Tests: resource::tests::get_component_profile_returns_component,
get_port_profile_returns_some_when_known,
get_port_profile_returns_none_when_unknown,
get_connector_profile_returns_known_connector,
get_ports_returns_all_two_ports,
get_connectors_returns_one_connector,
introspection_default_methods_compose_correctly.
Status: done
§6 Platform Specific Models
§6.1 UML-to-IDL Transformation
Spec: §6.1, S. 79-80 (PDF) — UML→IDL-Mapping-Regeln.
Repo: —
Tests: —
Status: open — die Regeln erzeugen das IDL der PSMs Lightweight CCM (§6.4) und CORBA (§6.5), die beide fehlen; das Local PSM in Rust (crates/rtc/) braucht kein IDL.
§6.2 IDL Definitions
Spec: §6.2, S. 81-82 (PDF) — Cross-Ref auf die Annex-A-IDL: die
PSM-Klauseln benennen ihre Operationen über RTC.idl.
Repo: Das Rust-Trait-Layer trägt die Annex-A-Operations mit
gleichen Parametern und gleichem ReturnCode_t-Ergebnis; die
Äquivalenz wird ausgeführt, nicht behauptet.
Tests: crates/rtc/tests/annex_a_operation_surface.rs:
component_action_covers_every_annex_a_callback,
execution_semantics_interfaces_carry_their_annex_a_operations,
execution_context_operations_cover_all_twelve_annex_a_operations,
annex_a_value_types_and_literals_match_the_idl.
Lauf cargo test -p zerodds-rtc; lokal (macOS, dieser Lauf) 61/61 grün,
davon 7 in diesem Modul.
Status: done
§6.3 Local PSM
Spec: §6.3, S. 82-87 (PDF) — Local PSM = direkte Object-Refs ohne ORB.
Repo: crates/rtc/ ist Local-PSM-Realisierung.
Tests: crates/rtc/tests/annex_a_operation_surface.rs::lightweight_rt_object_operations_match_the_annex_a_shape,
crates/rtc/tests/annex_a_operation_surface.rs::execution_context_operations_cover_all_twelve_annex_a_operations,
crates/rtc/tests/annex_a_operation_surface.rs::introspection_operations_return_the_annex_a_resource_model
— direkte Object-Refs ohne ORB.
Status: done
§6.4 Lightweight CCM PSM
Spec: §6.4, S. 88 (PDF) — Mapping auf LwCCM-Connectors/SDO.
Repo: —
Tests: —
Status: open — es gibt keinen RTC→LwCCM-Adapter im Baum.
crates/ccm/src/lightweight.rs filtert ein CCM-IDL-Modell auf das
LwCCM-Profil und kennt kein RTC; crates/rtc/ kennt kein CCM. Der
Crate-Doc-Header von crates/rtc/src/lib.rs führt §6.4 selbst unter
„What is not covered”. Die Spec erlaubt Compliance über einen einzigen
PSM (§2); umgesetzt ist der Local PSM (§6.3).
§6.5 CORBA PSM
Spec: §6.5, S. 88-90 (PDF) — Mapping auf CORBA-Components.
Repo: —
Tests: —
Status: open — es gibt keinen RTC→CORBA-Adapter und keine
RTC-Annex-A-IDL, die durch die Codegen-Crates liefe. Der Crate-Doc-
Header von crates/rtc/src/lib.rs führt §6.5 selbst unter „What is
not covered”. Die Spec erlaubt Compliance über einen einzigen PSM
(§2); umgesetzt ist der Local PSM (§6.3).
Annex A — RTC IDL
Annex A — Vollständige RTC-IDL-Datei
Spec: Annex A, S. 91-94 (PDF) — die RTC-IDL. Der Annex ist im PDF
ausdrücklich mit “(non-normative)” überschrieben und nennt sich selbst eine
Bequemlichkeitskopie der mitgelieferten RTC.idl.
Repo: Rust-Trait-Definition in crates/rtc/src/ — Parameter und
ReturnCode_t-Ergebnis je Operation identisch zur Annex-A-IDL, mit
Ausnahme der vier LightweightRTObject-Operations aus dem
open-Item zu §5.2.2.2.
Tests: crates/rtc/tests/annex_a_operation_surface.rs:
component_action_covers_every_annex_a_callback,
execution_semantics_interfaces_carry_their_annex_a_operations,
lightweight_rt_object_operations_match_the_annex_a_shape,
execution_context_operations_cover_all_twelve_annex_a_operations,
annex_a_value_types_and_literals_match_the_idl,
introspection_operations_return_the_annex_a_resource_model.
Status: partial — die Annex-A-Fläche ist bis auf exit,
get_context, get_owned_contexts und get_context_handle
ausgeführt; der Rest ist das open-Item zu §5.2.2.2.
Audit-Status
20 done / 3 partial / 4 open / 0 blocked / 6 n/a (informative).
Test-Lauf: cargo test -p zerodds-rtc — 47 Lib-Tests + 6
Integrations-Tests + 1 Doc-Test grün, 0 failed.
Offene Punkte: omg-rtc-1.0.open.md.