dlt-sys
Low-level FFI bindings to the COVESA DLT (Diagnostic Log and Trace) C library (
libdlt).
Overview
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.
Features
- 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
Prerequisites
- 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.
Usage
This is a low-level crate with unsafe APIs. Most users should use dlt-rs instead for a safe, idiomatic Rust API.
Features
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)
Compatibility Across DLT Releases
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.
Selecting The Linked DLT Release
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 \
Safety
All 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.
License
Licensed under the Apache License, Version 2.0. See LICENSE for details.
Contributing
This project is part of Eclipse OpenSOVD, but can be used independently. See CONTRIBUTING.md for guidelines.