19 个版本 (稳定)

2.1.0 2024年6月22日
1.5.0 2023年12月28日
1.4.0 2023年10月26日
1.3.3 2023年5月15日
0.8.2 2021年7月2日

#132 in 解析器实现

Download history 465/week @ 2024-04-28 267/week @ 2024-05-05 316/week @ 2024-05-12 369/week @ 2024-05-19 318/week @ 2024-05-26 475/week @ 2024-06-02 333/week @ 2024-06-09 577/week @ 2024-06-16 421/week @ 2024-06-23 250/week @ 2024-06-30 492/week @ 2024-07-07 394/week @ 2024-07-14 343/week @ 2024-07-21 416/week @ 2024-07-28 356/week @ 2024-08-04 361/week @ 2024-08-11

1,491 每月下载量

MIT/Apache

1.5MB
41K SLoC

a2lfile

Github Actions codecov license

a2lfile 是一个库,允许您读取、修改和写入 a2l 文件。

功能

  • 完全支持使用 A2L 版本 1.7.1 的文件
  • 速度快
  • 保留输入文件的布局和格式。目标是读取、修改并写入文件后,生成的 diff 应该是最小的
  • 通过基于 A2ML 规范生成代码的宏,提供对 IF_DATA 块内部特定应用程序数据的轻松访问

什么是 a2l 文件

A2l 文件在汽车 ECU 的开发和测试中常用。a2l 文件的使用者通常通过 XCP 等协议进行在线校准,并/或通过生成可擦写参数集进行离线调整。

如果您从未见过 a2l 文件,那么您可能不需要这个库。

工具

程序 a2ltool 基于此库。

文档

将其添加到您的 Cargo.toml

[dependencies]
a2lfile = "2.1"

基于 a2lfile 库的简单程序可能看起来像这样

use a2lfile::*;

fn main() {
    let input_filename = &std::ffi::OsString::from("example.a2l");
    let mut logmsgs = Vec::<A2LError>::new();
    let mut a2l_file = a2lfile::load(
        input_filename,
        None,
        &mut logmsgs,
        false
    ).expect("could not load the file");
    for log_msg in logmsgs {
        println!("warning while loading the file: {}", log_msg);
    }

    // perform a consistency check
    let mut logmsgs = Vec::<String>::new();
    a2l_file.check(&mut logmsgs);
    for log_msg in logmsgs {
        println!("warning during consistency check: {}", log_msg);
    }

    for measurement in &a2l_file.project.module[0].measurement {
        // do something with the MEASUREMENT objects in the file
        println!("MEASUREMENT: {:#?}", measurement);
    }

    // create a new CHARACTERISTIC object
    let new_characteristic = Characteristic::new(
        "my_name".to_string(),
        "my extended description".to_string(),
        CharacteristicType::Value,
        0x12345678,
        "something.RECORD_LAYOUT".to_string(),
        0.0,
        "NO_COMPU_METHOD".to_string(),
        0.0,
        100.0
    );
    a2l_file.project.module[0].characteristic.push(new_characteristic);


    // update the sorting to find a suitable insertion point for the new characteristic - by default it will be placed at the end
    a2l_file.sort_new_items();

    // write the modified file
    a2l_file.write(
        &std::ffi::OsString::from("example_output.txt"),
        Some("modified by the demo program")
    ).expect("failed to write output");
}

许可证

根据以下任何一个许可证授权

依赖项

~280–740KB
~17K SLoC