Low-level FFI bindings to the COVESA DLT (Diagnostic Log and Trace) C library (
libdlt).
dlt-sys provides unsafe Rust bindings to the COVESA DLT daemon C library.
This crate is intended to be used as a foundation for higher-level safe Rust abstractions (see dlt-rs).
Please note that this is only implements functionality required for dlt-rs and does not cover the entire libdlt API.
- Direct FFI bindings to
libdltfunctions - Custom C wrapper for improved API ergonomics
- Support for all DLT log levels and message types
- Optional
trace_load_ctrlfeature for load control support
- libdlt and its development headers must be installed on your system.
You can install it like so:- On Debian-based systems:
apt install libdlt-dev - On macOS with Homebrew:
brew tap COVESA/dlt-daemon https://github.com/COVESA/dlt-daemon brew install COVESA/dlt-daemon/dlt-daemon
- On Debian-based systems:
- bindgen prerequisites must be available at build time (
clangandlibclang).dlt-sysgenerates Rust bindings on the fly duringcargo build, using the installed DLT headers.
This is a low-level crate with unsafe APIs. Most users should use dlt-rs instead for a safe, idiomatic Rust API.
trace_load_ctrl- Enable DLT load control support (may be required in some environments, depending on the DLT build time daemon configuration)generate-bindings- Regenerate bindings from C headers (development only)
dlt-sysis designed to work with multiplelibdltreleases.- Bindings are generated at build time from the locally installed DLT headers, so the Rust FFI shape matches the installed release.
DltContextDatauses zero-initialization in Rust to remain source-compatible whenlibdltadds fields.- Optional C APIs are resolved dynamically in the wrapper at runtime.
If
dlt_register_log_level_changed_callbackis unavailable in an olderlibdlt, callback registration returns a DLT error instead of failing at link time. - In CI, the repository setup action supports selecting a DLT daemon ref (
dlt-ref) so workflows can validate multiple releases.
When consuming this crate from crates.io, select the installed DLT release by pointing include and library paths to that installation.
DLT_INCLUDE_DIR: include directory containingdlt/headersDLT_LIB_DIR: library directory containinglibdltDLT_USER_INCLUDE_DIR: optional additional include directoryDLT_LIB_NAME: optional library name override (default:dlt)
Example:
DLT_INCLUDE_DIR=/opt/homebrew/include \
DLT_LIB_DIR=/opt/homebrew/lib \
cargo buildAll functions in this crate are unsafe as they directly call C library functions. Proper usage requires understanding of:
- DLT library initialization and cleanup
- Memory management across FFI boundaries
- Thread safety considerations
For safe abstractions, use the
dlt-rscrate.
Licensed under the Apache License, Version 2.0. See LICENSE for details.
This project is part of Eclipse OpenSOVD, but can be used independently. See CONTRIBUTING.md for guidelines.