Skip to main content

Convert AUTOSAR DCM/CanTp/DEM arxml to LaTeX UDS (ISO 14229 / 15765) specification documents

Project description

udsxml2tex

Convert AUTOSAR DCM/CanTp arxml to LaTeX UDS specification documents

A Python library that parses AUTOSAR DCM (Diagnostic Communication Manager) and CanTp (CAN Transport Protocol) arxml configuration files and automatically generates ISO 14229 (UDS) / ISO 15765 (UDS on CAN) specification documents in LaTeX format.

Features

  • Automatically extracts UDS specification data from DCM arxml files
    • Diagnostic sessions
    • Security access levels
    • UDS service list (SID, supported sessions, NRCs, etc.)
    • DID (Data Identifier) definitions
    • Routine Control definitions
  • Parses CanTp arxml for transport layer configuration
    • Channel parameters (Block Size, STmin, channel mode)
    • ISO 15765-2 timing parameters (N_As, N_Bs, N_Cs, N_Ar, N_Br, N_Cr)
    • Addressing format and padding configuration
  • Multiple output formats — LaTeX (.tex), HTML, and direct PDF compilation
  • ARXML validation — pre-parse validation with detailed error messages and warnings
  • Interactive mode — step-by-step guided generation via CLI
  • Config file support — save/load generation settings as JSON
  • Dry-run mode — preview parsed specification summary without generating output
  • NRC 0x22 detail auto-extraction from C source code
  • ISO 14229-1 standard NRC common format table (automatically included)
  • Full message format definitions for 24 UDS services including LinkControl (0x87)
  • Customizable via Jinja2 templates and document class
  • Available as CLI command, interactive wizard, and Python API
  • Supports merging multiple arxml files (DCM + CanTp)

Installation

pip install udsxml2tex

From source (for development):

git clone https://github.com/YutaroNakagama/udsxml2tex.git
cd udsxml2tex
pip install -e ".[dev]"

Usage

CLI (Direct Mode)

# Basic conversion
udsxml2tex input.arxml

# Specify output file
udsxml2tex input.arxml -o output.tex

# Override ECU name
udsxml2tex input.arxml --ecu-name "MyECU"

# Merge and convert multiple files (DCM + CanTp)
udsxml2tex dcm_config.arxml cantp_config.arxml -o merged_spec.tex

# Generate HTML output
udsxml2tex input.arxml --html -o spec.html

# Generate LaTeX and compile directly to PDF
udsxml2tex input.arxml --pdf -o spec.tex

# Dry run — preview parsed data without generating output
udsxml2tex input.arxml --dry-run

# Verbose logging
udsxml2tex input.arxml -v

Interactive Mode

Launch an interactive wizard that guides you through the entire generation process:

udsxml2tex -I

The wizard will ask you:

  1. ARXML type — DCM, CanTp, or both
  2. File paths — path to each ARXML file
  3. ECU name
  4. Item selection — which SIDs, DIDs, routines, and sessions to include
  5. Timing parameters — whether to include P2/P2* and CanTp timing
  6. NRC 0x22 details — for services supporting conditionsNotCorrect:
    • Free-text description, or
    • Path to C source code for automatic extraction
  7. Document class — use default udsspec.cls or specify a custom .cls
  8. Output path
  9. Save config — optionally save all settings to a JSON file for reuse

Config File Mode

Use a previously saved configuration file to reproduce a generation run:

# Run from config file
udsxml2tex --config udsxml2tex_config.json

# Override specific settings on top of config
udsxml2tex --config udsxml2tex_config.json -o different_output.tex --ecu-name "NewECU"

Config files are JSON and can be created via interactive mode or manually:

{
  "arxml_type": "dcm",
  "dcm_arxml_path": "/path/to/dcm_config.arxml",
  "cantp_arxml_path": "",
  "include_services": [16, 34, 39],
  "include_dids": [61840, 61841],
  "include_routines": [],
  "include_sessions": [],
  "include_timing_params": true,
  "include_cantp_timing": true,
  "nrc22_details": {"34": "Flash memory is busy"},
  "ecu_name": "MyECU",
  "output_path": "output/uds_spec.tex",
  "cls_file_path": "",
  "template": "uds_spec.tex.j2",
  "template_dir": ""
}

Python API

from udsxml2tex import ArxmlParser, TexGenerator

# Parse ARXML (DCM + CanTp)
parser = ArxmlParser()
spec = parser.parse("path/to/dcm_config.arxml")

# Or merge multiple files
spec = parser.parse_multi(["dcm_config.arxml", "cantp_config.arxml"])

# Validate before parsing (returns list of warnings)
warnings = parser.validate("path/to/dcm_config.arxml")

# Generate LaTeX
generator = TexGenerator()
generator.generate(spec, "output/uds_spec.tex")

# Get as string
tex_content = generator.generate_string(spec)

# Generate HTML
html_path = generator.generate_html(spec, "output/uds_spec.html")

# Compile LaTeX to PDF (requires pdflatex or latexmk)
pdf_path = generator.compile_pdf("output/uds_spec.tex")

You can also use the config/interactive components programmatically:

from udsxml2tex import GenerationConfig, InteractiveSession
from udsxml2tex.interactive import generate_from_config

# Load and run from config
config = GenerationConfig.load("udsxml2tex_config.json")
generate_from_config(config)

# Or launch interactive mode from code
session = InteractiveSession()
session.run()

Custom Templates

You can use your own LaTeX templates:

generator = TexGenerator(template_dir="my_templates/")
generator.generate(spec, "output.tex", template_name="custom.tex.j2")
udsxml2tex input.arxml --template-dir my_templates/ --template custom.tex.j2

Document Class (udsspec.cls)

The generated documents use the udsspec document class, which encapsulates all package imports, page layout, header/footer styling, and custom commands. The .cls file is automatically copied alongside the output .tex file during generation.

When creating a custom template, use \documentclass{udsspec} and configure metadata via the following commands:

\documentclass{udsspec}

\ecuname{MyECU}              % ECU name (appears in header and title)
\docversion{2.0}             % Document version (default: 1.0)
\docresponsible{John Doe}    % Responsible person (header field)
\docauthor{Jane Smith}       % Author (header field)
\docfooter{CONFIDENTIAL}     % Footer text (default: Generated by udsxml2tex)

The class provides the following commands for use in document body:

Command Example Output
\serviceid{10} \serviceid{10} 10₁₆
\hexval{FF} \hexval{FF} FF₁₆

Custom column types C{width} (centered) and L{width} (left-aligned) are also available.

Compiling to PDF

Via CLI (recommended)

# Compile to PDF directly
udsxml2tex input.arxml --pdf -o output.tex

Manual compilation

The generated .tex file can be compiled to PDF using pdflatex:

# Basic compilation
pdflatex output.tex

# Full compilation (recommended — resolves cross-references and TOC)
pdflatex output.tex && pdflatex output.tex

Note: A LaTeX distribution with pdflatex is required (e.g., TeX Live, MiKTeX). The udsspec.cls document class and tikz-uml.sty style file are bundled with the generated output, so no additional package installation is needed.

Generated Document Structure

The document is structured according to the OSI reference model:

  1. Title Page — ECU name, date
  2. Table of Contents
  3. Document Overview — OSI layer mapping overview
  4. Transport Layer (ISO 15765-2 / CanTp) — Channel overview, timing parameters, addressing & padding
  5. Session Layer (ISO 14229-2) — Diagnostic sessions (ID, P2/P2* timers)
  6. Application Layer (ISO 14229-1)
    • Negative Response common format & standard NRC code reference (ISO 14229-1)
    • UDS Services — Service overview + per-service details (sub-functions, NRCs)
      • SecurityAccess (0x27) includes security access levels
      • RoutineControl (0x31) includes routine overview + parameter details
    • Data Identifiers (DIDs) — DID overview + data element details

Supported arxml Structure

The following AUTOSAR module configuration elements are parsed:

Module Element Description
DCM DcmDsl Diagnostic Session Layer (protocol, timing)
DCM DcmDsp Diagnostic Service Processing (sessions, security, DIDs, routines)
DCM DcmDsd Diagnostic Service Dispatcher (service table)
CanTp CanTpGeneral Main function period
CanTp CanTpChannel Channel mode, RxNSdu/TxNSdu (BS, STmin, N_As/N_Bs/N_Cs/N_Ar/N_Br/N_Cr, padding, addressing)

Supports AUTOSAR R4.x arxml format.

Requirements

  • Python >= 3.9
  • lxml >= 4.9.0
  • Jinja2 >= 3.1.0
  • LaTeX distribution (for compiling the generated .tex files)

License

MIT License

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

udsxml2tex-0.18.0.tar.gz (128.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

udsxml2tex-0.18.0-py3-none-any.whl (114.8 kB view details)

Uploaded Python 3

File details

Details for the file udsxml2tex-0.18.0.tar.gz.

File metadata

  • Download URL: udsxml2tex-0.18.0.tar.gz
  • Upload date:
  • Size: 128.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.2

File hashes

Hashes for udsxml2tex-0.18.0.tar.gz
Algorithm Hash digest
SHA256 20e16cbb90f45268ce45bafe971be27a8721e5de4420ab2269cb6c09a301a134
MD5 41ea7700020c2d932ebbb93fa4752e34
BLAKE2b-256 1633ce855127b178dd4bb35e570b7b9eeb07c445a139fc368277260095d3f208

See more details on using hashes here.

File details

Details for the file udsxml2tex-0.18.0-py3-none-any.whl.

File metadata

  • Download URL: udsxml2tex-0.18.0-py3-none-any.whl
  • Upload date:
  • Size: 114.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.2

File hashes

Hashes for udsxml2tex-0.18.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f229a444d7fe93e58615dc12b5caa1b9b4fc6a4de256b7cbf422e8c2321b587c
MD5 ba0603e4ea63dae930e385805fc3790c
BLAKE2b-256 126791c0f4af8233aa1189fec1bd2d1bca53991ed9ffb2481172bfc3ac6ef4c2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page