mdf4-rs 0.1.0

mdf4-rs is a Rust library for working with Measurement Data Format (ASAM MDF4) files.
Documentation

mdf4-rs

⚠️ Work in Progress: This project is under active development and not yet ready for production use.

A safe, efficient Rust library for reading and writing ASAM MDF 4 (Measurement Data Format) files.

Crates.io Documentation License

Features

  • 100% safe Rust - #![forbid(unsafe_code)]
  • Minimal dependencies - Only serde/serde_json for serialization
  • Memory efficient - Streaming index for large files (335x faster, 50x less memory)
  • Full read/write - Create, read, and modify MDF4 files
  • CAN logging - Integrated CAN bus data logging with DBC support

Quick Start

[dependencies]
mdf4-rs = "0.1"

Reading

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());
    }
}

Writing

use mdf4_rs::{MdfWriter, DataType, DecodedValue};

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

CAN Logging

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()?;

Feature Flags

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

Minimal Configuration

[dependencies]
mdf4-rs = { version = "0.1", default-features = false, features = ["alloc"] }

Performance

File Size Streaming Index Memory Savings
1 MB 6x faster 50x less
40 MB 335x faster 50x less

Examples

See examples/ for complete working examples:

  • can_logging.rs - CAN bus logging workflows (decoded, raw, overlay, streaming)
  • read_file.rs - Reading MDF4 files
  • write_file.rs - Creating MDF4 files
  • index_operations.rs - Efficient file indexing
  • merge_files.rs - Merging multiple MDF4 files
  • cut_file.rs - Extracting time segments

Documentation

License

MIT OR Apache-2.0. See LICENSING.md.