mokomoking2501/MoonECAT/runtime does not have a README file
pub(open) trait EoeEndpoint {
fn read_frame(Self) -> Bytes?
fn write_frame(Self, Bytes) -> Bool
fn is_up(Self) -> Bool
}pub(all) struct ConfigurationComparisonReport {
expected_source : ConfigurationSource
actual_source : ConfigurationSource
total_expected : Int
total_found : Int
differences : Array[ConfigurationDifference]
all_ok : Bool
} derive(Eq, Debug)pub(all) enum ConfigurationDifference {
Missing(position~ : Int)
OptionalMissing(position~ : Int, group_id~ : UInt?)
Extra(position~ : Int)
StationAddressMismatch(position~ : Int, expected~ : UInt?, actual~ : UInt?)
AliasAddressMismatch(position~ : Int, expected~ : UInt?, actual~ : UInt?)
IdentityMismatch(position~ : Int, expected~ : SlaveIdentity?, actual~ : SlaveIdentity?)
IdentificationMismatch(position~ : Int, expected~ : UInt?, actual~ : UInt?)
ProcessDataSummaryMismatch(position~ : Int, expected~ : ConfigurationProcessDataSummary, actual~ : ConfigurationProcessDataSummary)
} derive(Eq, Debug)pub(all) struct ConfigurationModel {
source : ConfigurationSource
total_slaves : Int
slaves : Array[ConfigurationSlave]
} derive(Eq, Debug)pub(all) struct ConfigurationProcessDataSummary {
sync_manager_count : Int
fmmu_count : Int
rx_pdo_count : Int
tx_pdo_count : Int
mailbox_protocols : ConfigurationMailboxProtocols?
dc_op_mode_count : Int
dc_assign_activate_count : Int
} derive(Eq, Debug)pub(all) struct ConfigurationSlave {
position : Int
configured_address : UInt?
alias_address : UInt?
identity : SlaveIdentity?
identification : UInt?
process_data_summary : ConfigurationProcessDataSummary?
presence : SlavePresence
} derive(Eq, Debug)pub(all) struct ConfigurationSurfaceSummary {
slave_count : Int
station_addresses : Array[UInt]
expected_source : ConfigurationSource?
actual_source : ConfigurationSource?
validation_grade : ValidateGrade?
difference_count : Int
} derive(Eq, Debug)pub(all) struct DiagnosisSession {
original_state : EsmState
observed_state : EsmState?
observed_error_flag : Bool?
observed_status_code : UInt?
mailbox_config : MailboxConfig
}pub(all) struct DiagnosticIssue {
source : DiagnosticSourceLayer
category : DiagnosticCategory
level : DiagnosticLevel
detail : String
} derive(Eq, Debug)pub(all) struct DiagnosticSurface {
station_address : UInt?
state_summary : StateSurfaceSummary
configuration_summary : ConfigurationSurfaceSummary?
error_register : Byte?
diagnosis_counter : UInt?
runtime_metrics : RuntimeMetricsSummary?
issues : Array[DiagnosticIssue]
overall_level : DiagnosticLevel
monitor_verdicts : Array[MonitorResult]?
overall_verdict : Verdict?
topology_fingerprint : TopologyFingerprint?
} derive(Eq, Debug)fn[N : Nic] EoeRelay::relay_cycle(self : EoeRelay, sw : EoeSwitch, nic : N, timeout : Duration, rx_handler : (EoeRelayFrame) -> Bool, tx_provider : () -> EoeRelayFrame?) -> (Int, Int)pub(all) struct EoeRelayFrame {
direction : EoeRelayDirection
station : UInt
data : Bytes
} derive(Eq, Debug)pub(all) struct EoeStationContext {
station : UInt
mb_config : MailboxConfig
reassembly : Array[EoeReassemblyBuffer?]
tx_frame_number : UInt
mb_counter : Byte
} derive(Debug)pub(all) struct EoeSwitch {
stations : Array[EoeStationContext]
rx_queue : Array[EoeReceivedFrame]
tx_fragments : Int64
rx_fragments : Int64
rx_frames_complete : Int64
rx_errors : Int64
} derive(Debug)pub(all) struct EsiJsonDevice {
vendor_id : UInt
product_code : UInt
revision : UInt
serial : UInt
physics : String
device_name : String
type_name : String
profile_no : UInt?
slot_index_increment : UInt
slot_pdo_increment : UInt
mailbox : EsiJsonMailbox
fmmu : Array[String]
sync_managers : Array[EsiJsonSmEntry]
dc_modes : Array[EsiJsonDcMode]
eeprom_byte_size : UInt
config_data : Bytes
bootstrap : Bytes
default_modules : Array[EsiJsonSelectedModule]
init_commands : Array[EsiJsonInitCommand]
rx_pdos : Array[EsiJsonPdo]
tx_pdos : Array[EsiJsonPdo]
} derive(Eq, ToJson, Debug)pub(all) struct EsiJsonDocument {
devices : Array[EsiJsonDevice]
modules : Array[EsiJsonModule]
} derive(Eq, ToJson, Debug)pub(all) struct EsiJsonModule {
module_ident : UInt
module_name : String
rx_pdos : Array[EsiJsonPdo]
tx_pdos : Array[EsiJsonPdo]
} derive(Eq, ToJson, Debug)pub(all) struct EsiJsonPdo {
direction : String
base_index : UInt
depend_on_slot_pdo : Bool
sync_manager : Byte
name : String
entries : Array[EsiJsonPdoEntry]
} derive(Eq, ToJson, Debug)pub(all) struct EsiOfflineSiiReport {
position : UInt
word_count : Int
eeprom : Bytes
sii : SiiFullInfo
preamble : SiiPreamble
standard : SiiStandardMetadata
header : SiiData
general : SiiGeneral?
strings : Array[String]
fmmu : Array[FmmuDirection]
sync_managers : Array[SiiSmEntry]
dc_clocks : Array[SiiDcClock]
profile_no : UInt?
startup_mailbox_commands : Array[StartupMailboxCommand]
tx_pdo : Array[SiiPdo]
rx_pdo : Array[SiiPdo]
categories : Array[SiiCategoryEntry]
}fn MasterObjectDictionary::entries_at(self : MasterObjectDictionary, index : UInt) -> Array[MasterOdEntry]fn MasterObjectDictionary::lookup(self : MasterObjectDictionary, index : UInt, subindex : Byte) -> MasterOdEntry?pub(all) struct MasterOdEntry {
index : UInt
subindex : Byte
name : String
data_type : MasterOdDataType
access : MasterOdAccess
value : MasterOdValue
} derive(Eq, Debug)pub struct NullRunProgressSink {
_unused : Unit
}impl RunProgressSink for NullRunProgressSinkpub(all) struct QueueEndpoint {
tx_pending : Array[EoeEndpointFrame]
rx_pending : Array[EoeEndpointFrame]
max_depth : Int
up : Bool
} derive(Debug)pub(all) enum RunFault {
StartupTransitionFailed(station~ : UInt, target~ : EsmState, current~ : EsmState?, error_indication~ : Bool?, status_code~ : UInt?, raw_status_code~ : UInt?, control_wkc~ : UInt?)
TimeoutRecoveryRequired(observed_timeouts~ : Int64, consecutive_timeouts~ : Int)
RuntimeRecoveryRequired(expected_wkc~ : UInt, observed_wkc_errors~ : Int64)
DcDrift(delta_ns~ : Int64)
} derive(Eq, Debug)pub(all) struct RunReport {
scan : ScanReport
validation : ValidateReport
cycles_requested : Int
cycles_ok : Int
until_fault : Bool
cycle_period_ns : Int64
output_period_ns : Int64?
telemetry : Telemetry
final_phase : RunPhase
fault : RunFault?
} derive(Debug)pub(all) struct RunStartupPreparation {
pdo_ctx : PdoContext
expected_wkc : UInt
dc_cycle_period_ns : Int64?
startup_mailbox_plans : Array[StationStartupMailboxPlan]
esm_timeout_policies : Array[(UInt, EsmTimeoutPolicy)]
slave_preparations : Array[(UInt, SlaveStartupPreparation)]?
}pub(all) struct Runtime {
state : RuntimeState
telemetry : Telemetry
config : MasterConfig
pdo_ctx : PdoContext?
expected_wkc : UInt
max_wkc_errors : Int
consecutive_wkc_errors : Int
max_consecutive_timeouts : Int
consecutive_timeouts : Int
dc_state : DcState
dc_reference_station : UInt?
dc_stations : Array[UInt]
dc_cycle_counter : Int
emergency_stations : Array[(UInt, MailboxConfig)]
eoe_switch : EoeSwitch
} derive(Debug)fn Runtime::configure_emergency_stations(self : Runtime, stations : Array[(UInt, MailboxConfig)]) -> Unitpub(all) struct SlaveDiagnosis {
station_address : UInt
al_state : EsmState?
al_error_flag : Bool?
al_status_code : UInt?
error_register : Byte
diagnosis_counter : UInt?
dl_error_counters : DlErrorCounters?
} derive(Eq, Debug)pub(all) struct SlaveStartupPreparation {
mapping : SlaveMapping
dc_cycle_period_ns : Int64?
startup_outputs : Bytes?
startup_mailbox_commands : Array[StartupMailboxCommand]
mailbox_config : MailboxConfig
sii : SiiFullInfo
sii_categories : Array[SiiCategoryEntry]
prefer_live_pdo_state : Bool
}pub(all) struct SmWatchdogValidation {
station : UInt
config : SmWatchdogConfig
watchdog_active : Bool
} derive(Eq, Debug)pub(all) struct StartupMailboxCommand {
transition : StartupCommandTransition
index : UInt
subindex : Byte
data : Bytes
} derive(Eq, Debug)pub(all) struct StationStartupMailboxPlan {
station : UInt
mailbox_config : MailboxConfig
commands : Array[StartupMailboxCommand]
} derive(Eq, Debug)pub(all) struct ValidateReport {
expected_source : ConfigurationSource
actual_source : ConfigurationSource
total_expected : Int
total_found : Int
results : Array[ValidationResult]
differences : Array[ConfigurationDifference]
all_ok : Bool
grade : ValidateGrade
} derive(Debug)pub(all) enum ValidationResult {
Ok
StationAddressMismatch(position~ : Int, expected~ : UInt, actual~ : UInt)
AliasAddressMismatch(position~ : Int, expected~ : UInt, actual~ : UInt)
IdentityMismatch(expected~ : SlaveIdentity, actual~ : SlaveIdentity)
IdentificationMismatch(position~ : Int, expected~ : UInt, actual~ : UInt)
ProcessDataMismatch(position~ : Int)
Missing(position~ : Int)
OptionalMissing(position~ : Int, group_id~ : UInt?)
Extra(position~ : Int)
} derive(Debug)pub(all) struct VerificationReport {
title : String
summary_verdict : Verdict
total_cycles : Int64
duration_ns : Int64
monitor_results : Array[MonitorResult]
timeline : Array[ReportEntry]
fault_injections : Array[String]
metadata : Array[(String, String)]
} derive(Debug)fn VerificationReport::add_event(self : VerificationReport, cycle : Int64, event_type : String, detail : String, verdict : Verdict) -> Unitfn[N : Nic] apply_presafeop_startup_mailbox_commands(nic : N, station : UInt, mailbox_config : MailboxConfig, commands : Array[StartupMailboxCommand], timeout : Duration) -> Unit raise EcErrorfn[N : Nic] apply_safeop_startup_mailbox_commands(nic : N, station : UInt, mailbox_config : MailboxConfig, commands : Array[StartupMailboxCommand], timeout : Duration) -> Unit raise EcErrorfn[N : Nic] apply_startup_mailbox_commands(nic : N, station : UInt, mailbox_config : MailboxConfig, commands : Array[StartupMailboxCommand], transition : StartupCommandTransition, timeout : Duration) -> Unit raise EcErrorfn[N : Nic] bridge_eoe_cycle(sw : EoeSwitch, ep : QueueEndpoint, nic : N, timeout : Duration) -> (Int, Int)fn build_master_od(identity : MasterIdentity, scan : ScanReport?, telemetry : Telemetry?, surface : DiagnosticSurface?) -> MasterObjectDictionaryfn[N : Nic] build_run_startup_preparation(nic : N, scan_report : ScanReport, logical_base : UInt, eeprom_word_count : Int, timeout : Duration) -> RunStartupPreparation raise EcErrorfn compare_configurations(expected : ConfigurationModel, actual : ConfigurationModel) -> ConfigurationComparisonReportfn diagnostic_surface_from_slave_diagnosis(scan : ScanReport, report : SlaveDiagnosis) -> DiagnosticSurfacefn diagnostic_surface_from_state_transition(station : UInt?, target : EsmState, current : EsmState?, final_state : EsmState?, al_error_flag : Bool?, status_code : UInt?, wkc : UInt?) -> DiagnosticSurfacefn diagnostic_surface_from_validate(scan : ScanReport, report : ValidateReport) -> DiagnosticSurfacefn enrich_surface_with_fingerprint(surface : DiagnosticSurface, fingerprint : TopologyFingerprint) -> DiagnosticSurfacefn enrich_surface_with_monitors(surface : DiagnosticSurface, results : Array[MonitorResult], verdict : Verdict) -> DiagnosticSurfacefn fingerprint_match(expected : TopologyFingerprint, actual : TopologyFingerprint) -> TopologyFingerprintMatchfn offline_sii_report_from_esi_document(document : EsiJsonDocument, device_index : Int) -> EsiOfflineSiiReport raise EcErrorfn offline_sii_report_from_esi_json(json_content : String, device_index : Int) -> EsiOfflineSiiReport raise EcErrorfn plan_scan_station_addresses_with_strategy(observed : Array[ObservedSlaveAddress], strategy : ScanStationAddressStrategy) -> Array[UInt] raise EcErrorfn[N : Nic] prepare_slave_diagnosis_ap(nic : N, position : UInt, station : UInt, timeout : Duration) -> DiagnosisSession raise EcErrorfn[N : Nic] prepare_slave_mailbox_ap(nic : N, position : UInt, station : UInt, timeout : Duration) -> MailboxSession raise EcErrorfn[N : Nic] prepare_slave_startup(nic : N, station : UInt, logical_base : UInt, eeprom_word_count : Int, timeout : Duration) -> SlaveStartupPreparation raise EcErrorfn[N : Nic] read_diagnosis_counter(nic : N, station : UInt, mb_config : MailboxConfig, rmsm : Rmsm, timeout : Duration) -> UInt raise EcErrorfn[N : Nic] read_diagnosis_counter_ap(nic : N, position : UInt, station : UInt, mb_config : MailboxConfig, rmsm : Rmsm, timeout : Duration) -> UInt raise EcErrorfn[N : Nic] read_error_register(nic : N, station : UInt, mb_config : MailboxConfig, rmsm : Rmsm, timeout : Duration) -> Byte raise EcErrorfn[N : Nic] read_error_register_ap(nic : N, position : UInt, station : UInt, mb_config : MailboxConfig, rmsm : Rmsm, timeout : Duration) -> Byte raise EcErrorfn[N : Nic] read_slave_diagnosis(nic : N, station : UInt, mb_config : MailboxConfig, rmsm : Rmsm, timeout : Duration) -> SlaveDiagnosis raise EcErrorfn[N : Nic] read_slave_diagnosis_ap(nic : N, position : UInt, station : UInt, mb_config : MailboxConfig, rmsm : Rmsm, timeout : Duration) -> SlaveDiagnosis raise EcErrorfn[N : Nic] refine_startup_preparation_in_preop(nic : N, station : UInt, logical_base : UInt, preparation : SlaveStartupPreparation, timeout : Duration) -> SlaveStartupPreparationfn required_sii_read_word_count(initial_eeprom : Bytes, initial_word_count : Int) -> Intfn[N : Nic] run(nic : N, config : MasterConfig, expected : Array[SlaveConfig], pdo_ctx : PdoContext, expected_wkc : UInt, cycles : Int, timeout : Duration) -> RunReport raise EcErrorfn run_startup_preparation_from_slave_preparations(slave_preparations : Array[(UInt, SlaveStartupPreparation)], logical_base : UInt) -> RunStartupPreparation raise EcErrorfn[N : Nic] run_until_fault(nic : N, config : MasterConfig, expected : Array[SlaveConfig], pdo_ctx : PdoContext, expected_wkc : UInt, timeout : Duration) -> RunReport raise EcErrorfn[N : Nic, S : RunProgressSink] run_with_scan_and_states_and_settings_prepared_reporting_to(nic : N, scan_report : ScanReport, config : MasterConfig, expected : Array[SlaveConfig], pdo_ctx : PdoContext, expected_wkc : UInt, settings : RunLoopSettings, startup_state : EsmState, shutdown_state : EsmState?, startup_preparation_override : RunStartupPreparation?, timeout : Duration, sink : S) -> RunReport raise EcErrorfn[N : Nic] run_with_settings(nic : N, config : MasterConfig, expected : Array[SlaveConfig], pdo_ctx : PdoContext, expected_wkc : UInt, settings : RunLoopSettings, timeout : Duration) -> RunReport raise EcErrorfn[N : Nic, S : RunProgressSink] run_with_settings_reporting_to(nic : N, config : MasterConfig, expected : Array[SlaveConfig], pdo_ctx : PdoContext, expected_wkc : UInt, settings : RunLoopSettings, timeout : Duration, sink : S) -> RunReport raise EcErrorfn[N : Nic] run_with_states(nic : N, config : MasterConfig, expected : Array[SlaveConfig], pdo_ctx : PdoContext, expected_wkc : UInt, cycles : Int, startup_state : EsmState, shutdown_state : EsmState?, timeout : Duration) -> RunReport raise EcErrorfn[N : Nic] run_with_states_and_settings(nic : N, config : MasterConfig, expected : Array[SlaveConfig], pdo_ctx : PdoContext, expected_wkc : UInt, settings : RunLoopSettings, startup_state : EsmState, shutdown_state : EsmState?, timeout : Duration) -> RunReport raise EcErrorfn[N : Nic, S : RunProgressSink] run_with_states_and_settings_prepared_reporting_to(nic : N, config : MasterConfig, expected : Array[SlaveConfig], pdo_ctx : PdoContext, expected_wkc : UInt, settings : RunLoopSettings, startup_state : EsmState, shutdown_state : EsmState?, startup_preparation_override : RunStartupPreparation?, timeout : Duration, sink : S) -> RunReport raise EcErrorfn[N : Nic, S : RunProgressSink] run_with_states_and_settings_reporting_to(nic : N, config : MasterConfig, expected : Array[SlaveConfig], pdo_ctx : PdoContext, expected_wkc : UInt, settings : RunLoopSettings, startup_state : EsmState, shutdown_state : EsmState?, timeout : Duration, sink : S) -> RunReport raise EcErrorfn[N : Nic] run_with_states_until_fault(nic : N, config : MasterConfig, expected : Array[SlaveConfig], pdo_ctx : PdoContext, expected_wkc : UInt, startup_state : EsmState, shutdown_state : EsmState?, timeout : Duration) -> RunReport raise EcErrorfn[N : Nic] scan_with_identification_ado(nic : N, timeout : Duration, identification_ado : UInt) -> ScanReport raise EcErrorfn[N : Nic] scan_with_identification_ado_and_station_address_strategy(nic : N, timeout : Duration, identification_ado : UInt, strategy : ScanStationAddressStrategy) -> ScanReport raise EcErrorfn startup_preparation_from_esi_json(json_content : String, device_index : Int, logical_base : UInt) -> SlaveStartupPreparation raise EcErrorfn startup_preparation_from_esi_offline_report(report : EsiOfflineSiiReport, logical_base : UInt) -> SlaveStartupPreparationfn validate_configuration(actual : ConfigurationModel, expected : ConfigurationModel) -> ValidateReportfn validation_difference_category(difference : ConfigurationDifference) -> ValidateDifferenceCategoryfn[N : Nic] write_mailbox_mapping(nic : N, station : UInt, mapping : SlaveMapping, timeout : Duration) -> Unit raise EcErrorfn[N : Nic] write_process_data_mapping(nic : N, station : UInt, mapping : SlaveMapping, timeout : Duration) -> Unit raise EcError