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 解析器实现
1,491 每月下载量
1.5MB
41K SLoC
a2lfile
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");
}
许可证
根据以下任何一个许可证授权
- Apache 许可证 2.0 (
LICENSE-APACHE
或 https://apache.ac.cn/licenses/LICENSE-2.0) - MIT 许可证 (
LICENSE-MIT
或 http://opensource.org/licenses/MIT)
依赖项
~280–740KB
~17K SLoC