| Crates.io | mdf4-rs |
| lib.rs | mdf4-rs |
| version | 0.2.1 |
| created_at | 2025-12-19 03:34:22.615634+00 |
| updated_at | 2025-12-29 05:22:52.328066+00 |
| description | mdf4-rs is a Rust library for working with Measurement Data Format (ASAM MDF4) files. |
| homepage | https://github.com/reneherrero/mdf4-rs |
| repository | https://github.com/reneherrero/mdf4-rs |
| max_upload_size | |
| id | 1994146 |
| size | 704,229 |
A safe, efficient Rust library for reading and writing ASAM MDF 4 (Measurement Data Format) files.
#![forbid(unsafe_code)]serde/serde_json for serialization[dependencies]
mdf4-rs = "0.2"
use mdf4_rs::MDF;
let mdf = MDF::from_file("recording.mf4")?;
for group in mdf.channel_groups() {
for channel in group.channels() {
let values = channel.values()?;
println!("{}: {} samples", channel.name()?.unwrap_or_default(), values.len());
}
}
use mdf4_rs::{MdfWriter, DataType};
let mut writer = MdfWriter::new("output.mf4")?;
writer.init_mdf_file()?;
let cg = writer.add_channel_group(None, |_| {})?;
writer.add_channel(&cg, None, |ch| {
ch.data_type = DataType::FloatLE;
ch.name = Some("Temperature".into());
ch.bit_count = 64;
})?;
// ... write data
use mdf4_rs::can::CanDbcLogger;
let dbc = dbc_rs::Dbc::parse(dbc_content)?;
let mut logger = CanDbcLogger::builder(&dbc).build()?;
logger.log(0x100, timestamp_us, &frame_data);
let mdf_bytes = logger.finalize()?;
no_std)[dependencies]
mdf4-rs = { version = "0.2", default-features = false, features = ["alloc"] }
See examples/ for complete working examples:
read_file.rs - Reading MDF4 fileswrite_file.rs - Creating MDF4 filescan_logging.rs - CAN bus logging with DBC supportethernet_logging.rs - Ethernet frame logginglin_logging.rs - LIN bus loggingflexray_logging.rs - FlexRay bus loggingindex_operations.rs - Efficient file indexingmerge_files.rs - Merging multiple MDF4 filescut_file.rs - Extracting time segmentsno_std_write.rs - Writing MDF4 in no_std environments| Feature | Description | Default |
|---|---|---|
std |
Standard library with serde/serde_json | Yes |
alloc |
Heap allocation | Via std |
can |
CAN bus support via embedded-can |
Yes |
dbc |
DBC decoding via dbc-rs |
Yes |
serde |
Serialization support | Via std |
compression |
DZ block decompression via miniz_oxide |
No |
MIT OR Apache-2.0. See LICENSING.md.