6 releases (breaking)

Uses new Rust 2024

new 0.6.0 Jun 14, 2025
0.5.0 May 20, 2025
0.4.0 Mar 15, 2025
0.3.0 Feb 22, 2025
0.1.0 Dec 19, 2024

#592 in Network programming

Download history 150/week @ 2025-02-22 42/week @ 2025-03-01 311/week @ 2025-03-15 11/week @ 2025-03-22 1/week @ 2025-03-29 5/week @ 2025-04-12 3/week @ 2025-04-19 12/week @ 2025-04-26 12/week @ 2025-05-03 9/week @ 2025-05-10 170/week @ 2025-05-17 23/week @ 2025-05-24 1/week @ 2025-05-31 74/week @ 2025-06-07

268 downloads per month

MIT/Apache

1.5MB
30K SLoC

autosar-data-abstraction

Github Actions

This crate provides an abstraction layer for the AUTOSAR data model. It is built on top of the crate autosar-data and provides complex interactions with the model on top of the elementary operations of autosar-data.

Rather than transforming the element based model into a new form, it only presents a view into the existing model, and provides methods to retrieve and modify the data.

Since the AUTOSAR data model is very complex and has many different types of elements, this crate does not aim to provide full coverage of all classes. Instead the focus is on the most common classes and their interactions.

Any other data can still be accessed through the basic operations of autosar-data, because the calls to autosar-data and autosar-data-abstraction can be mixed freely.

Features

Autosar Classic Platform:

  • Communication:
    • Busses
      • CAN
      • Ethernet (both old and new style)
      • FlexRay
      • not supported: LIN, J1939
    • PDUs
    • Signals
    • Transformations: SomeIp, E2E, Com
  • Data Types
    • Basic data types
    • Implementation data types
    • Application data types
  • Software Components
    • Atomic SWCs, Compositions, etc.
    • Interfaces
    • Ports
    • Internal behavior: Runnables, Events, etc.
  • ECU Configuration

Example

# use autosar_data::*;
# use autosar_data_abstraction::*;
# use autosar_data_abstraction::communication::*;
# fn main() -> Result<(), AutosarAbstractionError> {
let model = AutosarModelAbstraction::create("file.arxml", AutosarVersion::Autosar_00049);
let package_1 = model.get_or_create_package("/System")?;
let system = package_1.create_system("System", SystemCategory::SystemExtract)?;
let package_2 = model.get_or_create_package("/Clusters")?;

// create an Ethernet cluster and a physical channel for VLAN 33
let eth_cluster = system.create_ethernet_cluster("EthCluster", &package_2)?;
let vlan_info = EthernetVlanInfo {
    vlan_id: 33,
    vlan_name: "VLAN_33".to_string(),
};
let eth_channel = eth_cluster.create_physical_channel("EthChannel", Some(&vlan_info))?;
let vlan_info_2 = eth_channel.vlan_info().unwrap();

// create an ECU instance and connect it to the Ethernet channel
let package_3 = model.get_or_create_package("/Ecus")?;
let ecu_instance_a = system.create_ecu_instance("Ecu_A", &package_3)?;
let ethctrl = ecu_instance_a
    .create_ethernet_communication_controller(
        "EthernetController",
        Some("ab:cd:ef:01:02:03".to_string())
    )?;
let channels_iter = ethctrl.connected_channels();
ethctrl.connect_physical_channel("Ecu_A_connector", &eth_channel)?;
let channels_iter = ethctrl.connected_channels();

// ...
# Ok(())}

Dependencies

~8–13MB
~101K SLoC