udsdoc 0.66.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- udsdoc-0.66.0/LICENSE +21 -0
- udsdoc-0.66.0/PKG-INFO +347 -0
- udsdoc-0.66.0/README.md +243 -0
- udsdoc-0.66.0/pyproject.toml +211 -0
- udsdoc-0.66.0/setup.cfg +4 -0
- udsdoc-0.66.0/src/udsdoc/__init__.py +288 -0
- udsdoc-0.66.0/src/udsdoc/__main__.py +7 -0
- udsdoc-0.66.0/src/udsdoc/_compat.py +74 -0
- udsdoc-0.66.0/src/udsdoc/_d3_interactive.py +324 -0
- udsdoc-0.66.0/src/udsdoc/_reprogramming.py +1288 -0
- udsdoc-0.66.0/src/udsdoc/_rich_output.py +208 -0
- udsdoc-0.66.0/src/udsdoc/_serialization.py +331 -0
- udsdoc-0.66.0/src/udsdoc/_style_presets.py +328 -0
- udsdoc-0.66.0/src/udsdoc/ap_parser.py +410 -0
- udsdoc-0.66.0/src/udsdoc/autosar_compat.py +208 -0
- udsdoc-0.66.0/src/udsdoc/boot_overlay.py +506 -0
- udsdoc-0.66.0/src/udsdoc/c_scanner.py +393 -0
- udsdoc-0.66.0/src/udsdoc/cantp_parser.py +493 -0
- udsdoc-0.66.0/src/udsdoc/cli.py +2299 -0
- udsdoc-0.66.0/src/udsdoc/comm_arxml_parser.py +420 -0
- udsdoc-0.66.0/src/udsdoc/completion.py +260 -0
- udsdoc-0.66.0/src/udsdoc/compliance_matrix.py +1357 -0
- udsdoc-0.66.0/src/udsdoc/config.py +64 -0
- udsdoc-0.66.0/src/udsdoc/csv_to_arxml.py +745 -0
- udsdoc-0.66.0/src/udsdoc/dem_parser.py +978 -0
- udsdoc-0.66.0/src/udsdoc/diff.py +562 -0
- udsdoc-0.66.0/src/udsdoc/doip_parser.py +268 -0
- udsdoc-0.66.0/src/udsdoc/ecu_log_analyzer.py +379 -0
- udsdoc-0.66.0/src/udsdoc/ecu_simulator.py +432 -0
- udsdoc-0.66.0/src/udsdoc/ecu_test/__init__.py +84 -0
- udsdoc-0.66.0/src/udsdoc/ecu_test/coverage.py +232 -0
- udsdoc-0.66.0/src/udsdoc/ecu_test/executor.py +296 -0
- udsdoc-0.66.0/src/udsdoc/ecu_test/formal_generator.py +298 -0
- udsdoc-0.66.0/src/udsdoc/ecu_test/fsm.py +565 -0
- udsdoc-0.66.0/src/udsdoc/ecu_test/generator.py +697 -0
- udsdoc-0.66.0/src/udsdoc/ecu_test/logger.py +532 -0
- udsdoc-0.66.0/src/udsdoc/ecu_test/models.py +122 -0
- udsdoc-0.66.0/src/udsdoc/ecu_test/transport.py +256 -0
- udsdoc-0.66.0/src/udsdoc/generator.py +7041 -0
- udsdoc-0.66.0/src/udsdoc/hardware.py +431 -0
- udsdoc-0.66.0/src/udsdoc/i18n.py +690 -0
- udsdoc-0.66.0/src/udsdoc/interactive.py +544 -0
- udsdoc-0.66.0/src/udsdoc/iso_versions.py +281 -0
- udsdoc-0.66.0/src/udsdoc/llm_integration.py +1436 -0
- udsdoc-0.66.0/src/udsdoc/lsp_server.py +322 -0
- udsdoc-0.66.0/src/udsdoc/models.py +1957 -0
- udsdoc-0.66.0/src/udsdoc/multi_ecu/__init__.py +59 -0
- udsdoc-0.66.0/src/udsdoc/multi_ecu/generator.py +2012 -0
- udsdoc-0.66.0/src/udsdoc/multi_ecu/inference.py +104 -0
- udsdoc-0.66.0/src/udsdoc/multi_ecu/loader.py +315 -0
- udsdoc-0.66.0/src/udsdoc/multi_ecu/models.py +406 -0
- udsdoc-0.66.0/src/udsdoc/multi_ecu/validator.py +207 -0
- udsdoc-0.66.0/src/udsdoc/multi_ecu/visualizations.py +379 -0
- udsdoc-0.66.0/src/udsdoc/obd_parser.py +245 -0
- udsdoc-0.66.0/src/udsdoc/odx/__init__.py +228 -0
- udsdoc-0.66.0/src/udsdoc/odx/mapper.py +1468 -0
- udsdoc-0.66.0/src/udsdoc/odx/models_odx.py +996 -0
- udsdoc-0.66.0/src/udsdoc/odx/pdx_packager.py +347 -0
- udsdoc-0.66.0/src/udsdoc/odx/serializers/__init__.py +85 -0
- udsdoc-0.66.0/src/udsdoc/odx/serializers/_shared.py +664 -0
- udsdoc-0.66.0/src/udsdoc/odx/serializers/odx_c.py +188 -0
- udsdoc-0.66.0/src/udsdoc/odx/serializers/odx_cs.py +143 -0
- udsdoc-0.66.0/src/udsdoc/odx/serializers/odx_d.py +935 -0
- udsdoc-0.66.0/src/udsdoc/odx/serializers/odx_e.py +268 -0
- udsdoc-0.66.0/src/udsdoc/odx/serializers/odx_f.py +260 -0
- udsdoc-0.66.0/src/udsdoc/odx/serializers/odx_fd.py +168 -0
- udsdoc-0.66.0/src/udsdoc/odx/serializers/odx_m.py +187 -0
- udsdoc-0.66.0/src/udsdoc/odx/serializers/odx_v.py +429 -0
- udsdoc-0.66.0/src/udsdoc/odx/supplement.py +342 -0
- udsdoc-0.66.0/src/udsdoc/odx/xsd/LICENSE +48 -0
- udsdoc-0.66.0/src/udsdoc/odx/xsd/odx-c.xsd +26 -0
- udsdoc-0.66.0/src/udsdoc/odx/xsd/odx-cs.xsd +26 -0
- udsdoc-0.66.0/src/udsdoc/odx/xsd/odx-d.xsd +28 -0
- udsdoc-0.66.0/src/udsdoc/odx/xsd/odx-e.xsd +27 -0
- udsdoc-0.66.0/src/udsdoc/odx/xsd/odx-f.xsd +26 -0
- udsdoc-0.66.0/src/udsdoc/odx/xsd/odx-fd.xsd +26 -0
- udsdoc-0.66.0/src/udsdoc/odx/xsd/odx-m.xsd +26 -0
- udsdoc-0.66.0/src/udsdoc/odx/xsd/odx-v.xsd +26 -0
- udsdoc-0.66.0/src/udsdoc/odx/xsd_validator.py +180 -0
- udsdoc-0.66.0/src/udsdoc/ollama_setup.py +513 -0
- udsdoc-0.66.0/src/udsdoc/parser.py +3480 -0
- udsdoc-0.66.0/src/udsdoc/plugin.py +110 -0
- udsdoc-0.66.0/src/udsdoc/py.typed +0 -0
- udsdoc-0.66.0/src/udsdoc/pytest_plugin.py +353 -0
- udsdoc-0.66.0/src/udsdoc/repo_scanner.py +1137 -0
- udsdoc-0.66.0/src/udsdoc/samples/boot_overlay_minimal.yaml +31 -0
- udsdoc-0.66.0/src/udsdoc/samples/boot_overlay_sample.yaml +103 -0
- udsdoc-0.66.0/src/udsdoc/samples/compliance_matrix_oem_annex.csv +103 -0
- udsdoc-0.66.0/src/udsdoc/samples/compliance_matrix_oem_did.csv +102 -0
- udsdoc-0.66.0/src/udsdoc/samples/compliance_matrix_oem_docan_ecu.csv +101 -0
- udsdoc-0.66.0/src/udsdoc/samples/compliance_matrix_oem_docan_standard.csv +102 -0
- udsdoc-0.66.0/src/udsdoc/samples/compliance_matrix_oem_dtc.csv +118 -0
- udsdoc-0.66.0/src/udsdoc/samples/compliance_matrix_oem_reprogramming.csv +99 -0
- udsdoc-0.66.0/src/udsdoc/samples/compliance_matrix_oem_rid.csv +106 -0
- udsdoc-0.66.0/src/udsdoc/samples/compliance_matrix_oem_sample.csv +7 -0
- udsdoc-0.66.0/src/udsdoc/samples/compliance_matrix_sources_sample.yaml +55 -0
- udsdoc-0.66.0/src/udsdoc/samples/compliance_matrix_supplier_sample.csv +5 -0
- udsdoc-0.66.0/src/udsdoc/samples/header_config_sample.yaml +22 -0
- udsdoc-0.66.0/src/udsdoc/samples/llm_config_ollama.json +9 -0
- udsdoc-0.66.0/src/udsdoc/samples/llm_config_openrouter.json +7 -0
- udsdoc-0.66.0/src/udsdoc/samples/odx_supplement_sample.yaml +87 -0
- udsdoc-0.66.0/src/udsdoc/samples/sample1_cantp.arxml +243 -0
- udsdoc-0.66.0/src/udsdoc/samples/sample1_dcm.arxml +2384 -0
- udsdoc-0.66.0/src/udsdoc/samples/sample1_dem.arxml +493 -0
- udsdoc-0.66.0/src/udsdoc/samples/sample1_did.c +127 -0
- udsdoc-0.66.0/src/udsdoc/samples/sample1_rid.c +104 -0
- udsdoc-0.66.0/src/udsdoc/samples/sample2_cantp.arxml +243 -0
- udsdoc-0.66.0/src/udsdoc/samples/sample2_dcm.arxml +1966 -0
- udsdoc-0.66.0/src/udsdoc/samples/sample2_dem.arxml +493 -0
- udsdoc-0.66.0/src/udsdoc/samples/sample2_did.c +110 -0
- udsdoc-0.66.0/src/udsdoc/samples/sample2_rid.c +104 -0
- udsdoc-0.66.0/src/udsdoc/samples/style_preset_demo.yaml +36 -0
- udsdoc-0.66.0/src/udsdoc/samples/system_redundant.yaml +76 -0
- udsdoc-0.66.0/src/udsdoc/samples/udsspec.cls +113 -0
- udsdoc-0.66.0/src/udsdoc/schema.py +286 -0
- udsdoc-0.66.0/src/udsdoc/templates/assets/mermaid.min.js +2029 -0
- udsdoc-0.66.0/src/udsdoc/templates/assets/search.js +138 -0
- udsdoc-0.66.0/src/udsdoc/templates/assets/tikz-uml.sty +5376 -0
- udsdoc-0.66.0/src/udsdoc/templates/structured_tex/root.tex.j2 +197 -0
- udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/0_intro/0_short_descript/short_descript.tex.j2 +113 -0
- udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/0_intro/1_about_doc/about_doc.tex.j2 +79 -0
- udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/0_intro/2_context/context.tex.j2 +75 -0
- udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/0_intro/intro.tex.j2 +3 -0
- udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/1_low_layer/2_datalink/datalink.tex.j2 +22 -0
- udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/1_low_layer/3_network/network.tex.j2 +87 -0
- udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/1_low_layer/4_transport/transport.tex.j2 +146 -0
- udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/1_low_layer/5_session/session.tex.j2 +127 -0
- udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/1_low_layer/low_layer.tex.j2 +7 -0
- udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/2_high_layer/09_overview/overview.tex.j2 +66 -0
- udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/2_high_layer/10-2_sid10/sid10.tex.j2 +148 -0
- udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/2_high_layer/10-3_sid11/sid11.tex.j2 +130 -0
- udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/2_high_layer/10-4_sid27/sid27.tex.j2 +312 -0
- udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/2_high_layer/10-5_sid28/sid28.tex.j2 +136 -0
- udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/2_high_layer/10-6_sid29/sid29.tex.j2 +144 -0
- udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/2_high_layer/10-7_sid3E/sid3E.tex.j2 +127 -0
- udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/2_high_layer/10-8_sid85/sid85.tex.j2 +136 -0
- udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/2_high_layer/11-2_sid22/sid22.tex.j2 +137 -0
- udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/2_high_layer/11-7_sid2E/sid2E.tex.j2 +140 -0
- udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/2_high_layer/12-2_sid14/sid14.tex.j2 +122 -0
- udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/2_high_layer/12-3_sid19/sid19.tex.j2 +126 -0
- udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/2_high_layer/14-2_sid31/sid31.tex.j2 +184 -0
- udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/2_high_layer/15-2_sid34/sid34.tex.j2 +127 -0
- udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/2_high_layer/15-4_sid36/sid36.tex.j2 +131 -0
- udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/2_high_layer/15-5_sid37/sid37.tex.j2 +118 -0
- udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/2_high_layer/high_layer.tex.j2 +50 -0
- udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/3_bootloader/bootloader.tex.j2 +8 -0
- udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/A_annex/annex.tex.j2 +249 -0
- udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/C_references/references.tex.j2 +31 -0
- udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/_cm_trace.tex.j2 +36 -0
- udsdoc-0.66.0/src/udsdoc/templates/structured_tex/sections/section.tex.j2 +10 -0
- udsdoc-0.66.0/src/udsdoc/templates/tikz-uml.sty +5386 -0
- udsdoc-0.66.0/src/udsdoc/templates/uds_spec.html.j2 +737 -0
- udsdoc-0.66.0/src/udsdoc/templates/uds_spec.tex.j2 +2248 -0
- udsdoc-0.66.0/src/udsdoc/templates/udsspec.cls +130 -0
- udsdoc-0.66.0/src/udsdoc/templates/web_ui.html +4548 -0
- udsdoc-0.66.0/src/udsdoc/tikz_svg.py +213 -0
- udsdoc-0.66.0/src/udsdoc/validator.py +450 -0
- udsdoc-0.66.0/src/udsdoc/visualizations.py +441 -0
- udsdoc-0.66.0/src/udsdoc/webserver.py +4732 -0
- udsdoc-0.66.0/src/udsdoc.egg-info/PKG-INFO +347 -0
- udsdoc-0.66.0/src/udsdoc.egg-info/SOURCES.txt +186 -0
- udsdoc-0.66.0/src/udsdoc.egg-info/dependency_links.txt +1 -0
- udsdoc-0.66.0/src/udsdoc.egg-info/entry_points.txt +6 -0
- udsdoc-0.66.0/src/udsdoc.egg-info/requires.txt +85 -0
- udsdoc-0.66.0/src/udsdoc.egg-info/top_level.txt +1 -0
- udsdoc-0.66.0/tests/test_bilingual_i18n.py +642 -0
- udsdoc-0.66.0/tests/test_boot_arxml_split.py +257 -0
- udsdoc-0.66.0/tests/test_boot_overlay.py +714 -0
- udsdoc-0.66.0/tests/test_cantp_15765_gaps.py +410 -0
- udsdoc-0.66.0/tests/test_compliance_matrix_html_report.py +156 -0
- udsdoc-0.66.0/tests/test_compliance_matrix_req_trace.py +185 -0
- udsdoc-0.66.0/tests/test_compliance_matrix_two_way_comments.py +148 -0
- udsdoc-0.66.0/tests/test_csv_to_arxml.py +176 -0
- udsdoc-0.66.0/tests/test_domain_column.py +250 -0
- udsdoc-0.66.0/tests/test_multi_lang.py +132 -0
- udsdoc-0.66.0/tests/test_odx_foundation.py +741 -0
- udsdoc-0.66.0/tests/test_odx_integration.py +419 -0
- udsdoc-0.66.0/tests/test_odx_serializer_c_cs.py +839 -0
- udsdoc-0.66.0/tests/test_odx_serializer_d.py +736 -0
- udsdoc-0.66.0/tests/test_odx_serializer_f_fd_m.py +886 -0
- udsdoc-0.66.0/tests/test_odx_serializer_v_e.py +846 -0
- udsdoc-0.66.0/tests/test_pdx_packager.py +465 -0
- udsdoc-0.66.0/tests/test_rename_compat.py +60 -0
- udsdoc-0.66.0/tests/test_repo_scanner.py +556 -0
- udsdoc-0.66.0/tests/test_reprogramming.py +678 -0
- udsdoc-0.66.0/tests/test_style_presets.py +524 -0
- udsdoc-0.66.0/tests/test_udsxml2tex.py +4360 -0
- udsdoc-0.66.0/tests/test_xsd_validator.py +230 -0
udsdoc-0.66.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 udsdoc contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
udsdoc-0.66.0/PKG-INFO
ADDED
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: udsdoc
|
|
3
|
+
Version: 0.66.0
|
|
4
|
+
Summary: Generate UDS (ISO 14229 / 15765) specification documents and ISO 22901-1 ODX/PDX from AUTOSAR DCM/CanTp/DEM ARXML (formerly udsxml2tex)
|
|
5
|
+
Author: udsdoc contributors
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/YutaroNakagama/udsdoc
|
|
8
|
+
Project-URL: Repository, https://github.com/YutaroNakagama/udsdoc
|
|
9
|
+
Project-URL: Changelog, https://github.com/YutaroNakagama/udsdoc/blob/main/CHANGELOG.md
|
|
10
|
+
Project-URL: Issues, https://github.com/YutaroNakagama/udsdoc/issues
|
|
11
|
+
Keywords: autosar,arxml,uds,dcm,dem,cantp,iso14229,iso15765,iso22901,odx,pdx,latex,tex,diagnostics,udsxml2tex
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Intended Audience :: Manufacturing
|
|
15
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
16
|
+
Classifier: Operating System :: OS Independent
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
23
|
+
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
24
|
+
Classifier: Topic :: Software Development :: Code Generators
|
|
25
|
+
Classifier: Topic :: Software Development :: Documentation
|
|
26
|
+
Classifier: Topic :: Software Development :: Embedded Systems
|
|
27
|
+
Classifier: Topic :: Text Processing :: Markup :: LaTeX
|
|
28
|
+
Classifier: Typing :: Typed
|
|
29
|
+
Requires-Python: >=3.9
|
|
30
|
+
Description-Content-Type: text/markdown
|
|
31
|
+
License-File: LICENSE
|
|
32
|
+
Requires-Dist: lxml>=4.9.0
|
|
33
|
+
Requires-Dist: Jinja2>=3.1.0
|
|
34
|
+
Provides-Extra: dev
|
|
35
|
+
Requires-Dist: pytest>=7.0; extra == "dev"
|
|
36
|
+
Requires-Dist: pytest-cov>=4.0; extra == "dev"
|
|
37
|
+
Requires-Dist: mypy>=1.0; extra == "dev"
|
|
38
|
+
Requires-Dist: ruff>=0.1; extra == "dev"
|
|
39
|
+
Provides-Extra: web
|
|
40
|
+
Requires-Dist: fastapi>=0.100.0; extra == "web"
|
|
41
|
+
Requires-Dist: uvicorn>=0.22.0; extra == "web"
|
|
42
|
+
Requires-Dist: python-multipart>=0.0.6; extra == "web"
|
|
43
|
+
Requires-Dist: PyYAML>=6.0; extra == "web"
|
|
44
|
+
Requires-Dist: python-dotenv>=1.0; extra == "web"
|
|
45
|
+
Requires-Dist: pymupdf>=1.24; extra == "web"
|
|
46
|
+
Provides-Extra: yaml
|
|
47
|
+
Requires-Dist: PyYAML>=6.0; extra == "yaml"
|
|
48
|
+
Provides-Extra: svg
|
|
49
|
+
Requires-Dist: pymupdf>=1.24; extra == "svg"
|
|
50
|
+
Provides-Extra: watch
|
|
51
|
+
Requires-Dist: watchdog>=3.0; extra == "watch"
|
|
52
|
+
Provides-Extra: docx
|
|
53
|
+
Requires-Dist: python-docx>=1.0; extra == "docx"
|
|
54
|
+
Provides-Extra: lsp
|
|
55
|
+
Requires-Dist: pygls>=1.2; extra == "lsp"
|
|
56
|
+
Provides-Extra: progress
|
|
57
|
+
Requires-Dist: tqdm>=4.65; extra == "progress"
|
|
58
|
+
Provides-Extra: rich
|
|
59
|
+
Requires-Dist: rich>=13.0; extra == "rich"
|
|
60
|
+
Provides-Extra: viz
|
|
61
|
+
Requires-Dist: matplotlib>=3.5; extra == "viz"
|
|
62
|
+
Requires-Dist: numpy>=1.20; extra == "viz"
|
|
63
|
+
Provides-Extra: llm
|
|
64
|
+
Requires-Dist: anthropic>=0.40.0; extra == "llm"
|
|
65
|
+
Requires-Dist: openai>=1.0.0; extra == "llm"
|
|
66
|
+
Provides-Extra: ecu-test
|
|
67
|
+
Requires-Dist: python-can>=4.3.0; extra == "ecu-test"
|
|
68
|
+
Requires-Dist: python-isotp>=2.0.0; extra == "ecu-test"
|
|
69
|
+
Provides-Extra: all
|
|
70
|
+
Requires-Dist: fastapi>=0.100.0; extra == "all"
|
|
71
|
+
Requires-Dist: uvicorn>=0.22.0; extra == "all"
|
|
72
|
+
Requires-Dist: python-multipart>=0.0.6; extra == "all"
|
|
73
|
+
Requires-Dist: PyYAML>=6.0; extra == "all"
|
|
74
|
+
Requires-Dist: python-dotenv>=1.0; extra == "all"
|
|
75
|
+
Requires-Dist: pymupdf>=1.24; extra == "all"
|
|
76
|
+
Requires-Dist: watchdog>=3.0; extra == "all"
|
|
77
|
+
Requires-Dist: python-docx>=1.0; extra == "all"
|
|
78
|
+
Requires-Dist: pygls>=1.2; extra == "all"
|
|
79
|
+
Requires-Dist: tqdm>=4.65; extra == "all"
|
|
80
|
+
Requires-Dist: rich>=13.0; extra == "all"
|
|
81
|
+
Requires-Dist: matplotlib>=3.5; extra == "all"
|
|
82
|
+
Requires-Dist: numpy>=1.20; extra == "all"
|
|
83
|
+
Requires-Dist: anthropic>=0.40.0; extra == "all"
|
|
84
|
+
Requires-Dist: openai>=1.0.0; extra == "all"
|
|
85
|
+
Requires-Dist: python-can>=4.3.0; extra == "all"
|
|
86
|
+
Requires-Dist: python-isotp>=2.0.0; extra == "all"
|
|
87
|
+
Provides-Extra: ci-test
|
|
88
|
+
Requires-Dist: fastapi>=0.100.0; extra == "ci-test"
|
|
89
|
+
Requires-Dist: uvicorn>=0.22.0; extra == "ci-test"
|
|
90
|
+
Requires-Dist: python-multipart>=0.0.6; extra == "ci-test"
|
|
91
|
+
Requires-Dist: PyYAML>=6.0; extra == "ci-test"
|
|
92
|
+
Requires-Dist: python-dotenv>=1.0; extra == "ci-test"
|
|
93
|
+
Requires-Dist: pymupdf>=1.24; extra == "ci-test"
|
|
94
|
+
Requires-Dist: watchdog>=3.0; extra == "ci-test"
|
|
95
|
+
Requires-Dist: python-docx>=1.0; extra == "ci-test"
|
|
96
|
+
Requires-Dist: pygls>=1.2; extra == "ci-test"
|
|
97
|
+
Requires-Dist: tqdm>=4.65; extra == "ci-test"
|
|
98
|
+
Requires-Dist: rich>=13.0; extra == "ci-test"
|
|
99
|
+
Requires-Dist: matplotlib>=3.5; extra == "ci-test"
|
|
100
|
+
Requires-Dist: numpy>=1.20; extra == "ci-test"
|
|
101
|
+
Requires-Dist: anthropic>=0.40.0; extra == "ci-test"
|
|
102
|
+
Requires-Dist: openai>=1.0.0; extra == "ci-test"
|
|
103
|
+
Dynamic: license-file
|
|
104
|
+
|
|
105
|
+
# udsdoc
|
|
106
|
+
|
|
107
|
+
**AUTOSAR DCM/CanTp/DEM ARXML → ISO 14229 (UDS) / ISO 15765 / ISO 22901-1 (ODX/PDX) specification documents.**
|
|
108
|
+
|
|
109
|
+
[](https://badge.fury.io/py/udsdoc)
|
|
110
|
+
[](https://pypi.org/project/udsdoc/)
|
|
111
|
+
[](https://opensource.org/licenses/MIT)
|
|
112
|
+
|
|
113
|
+
> **Renamed from `udsxml2tex` (v0.66.0).** The old PyPI package now installs
|
|
114
|
+
> this one; the `udsxml2tex` CLI command, `UDSXML2TEX_*` environment
|
|
115
|
+
> variables, `~/.udsxml2tex/` config directory and `udsxml2tex-*` pre-commit
|
|
116
|
+
> hook ids keep working as deprecated aliases until v1.0.
|
|
117
|
+
> Migration: `pip install udsdoc`, command `udsdoc`, `import udsdoc`.
|
|
118
|
+
|
|
119
|
+
`udsdoc` parses AUTOSAR diagnostic ARXML (DCM, CanTp, DEM, DoIP, COM, AP)
|
|
120
|
+
and renders a complete UDS specification in **LaTeX / PDF / HTML / Markdown
|
|
121
|
+
/ RST / CSV / YAML / JSON / DOCX**, plus **ASAM ODX 2.2.0 / PDX**
|
|
122
|
+
(ISO 22901-1) for industry diagnostic tooling.
|
|
123
|
+
|
|
124
|
+
It also ships a local **browser UI** (`--serve`) that one-clicks an entire
|
|
125
|
+
BSW software repository through the pipeline, auto-detecting single-ECU
|
|
126
|
+
vs multi-ECU layouts.
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## Install
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
pip install udsdoc # core (LaTeX / Markdown / JSON / YAML)
|
|
134
|
+
pip install udsdoc[web] # browser UI (--serve) + inline TikZ-UML SVG figures
|
|
135
|
+
pip install udsdoc[llm] # LLM analysis (Anthropic + OpenAI / Ollama)
|
|
136
|
+
pip install udsdoc[ecu-test] # CAN/ISO-TP hardware testing
|
|
137
|
+
pip install udsdoc[all] # everything
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Other extras: `yaml`, `svg`, `watch`, `docx`, `lsp`, `progress`, `rich`, `viz`.
|
|
141
|
+
|
|
142
|
+
A LaTeX distribution (TeX Live / MiKTeX with `xelatex` for CJK) is required
|
|
143
|
+
to compile generated `.tex` to PDF. The HTML output renders standalone.
|
|
144
|
+
TikZ-UML diagrams in the HTML output (SID 0x10 session FSM, SID 0x27
|
|
145
|
+
SecurityAccess FSM and sequence) are compiled to inline SVG when `xelatex`
|
|
146
|
+
plus a PDF→SVG tool are present — the `[web]` / `[svg]` extras pull in
|
|
147
|
+
`pymupdf`, which provides an in-process PDF→SVG converter so no system
|
|
148
|
+
binary (`pdftocairo` / `dvisvgm` / `pdf2svg` / `inkscape`) is required.
|
|
149
|
+
Without the toolchain the HTML output silently falls back to Mermaid.
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## Quick start
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
# Single ARXML → LaTeX
|
|
157
|
+
udsdoc dcm.arxml -o spec.tex
|
|
158
|
+
|
|
159
|
+
# Merge DCM + CanTp + DEM
|
|
160
|
+
udsdoc dcm.arxml cantp.arxml --dem dem.arxml -o spec.tex
|
|
161
|
+
|
|
162
|
+
# Auto-discover everything under a BSW repo (CLI mirror of the browser UI)
|
|
163
|
+
udsdoc --repo /path/to/bsw-project -o spec.tex
|
|
164
|
+
udsdoc --repo /path/to/bsw-project --repo-dry-run # show classification
|
|
165
|
+
|
|
166
|
+
# Application + Bootloader ARXMLs owned by separate teams — placed in
|
|
167
|
+
# parallel subtrees (app/, boot/) under the repo root. The scanner
|
|
168
|
+
# detects boot-domain files by path tokens (boot/, bootloader/, bl/,
|
|
169
|
+
# fbl/, pbl/, sbl/, *_boot*, *_bl*) and merges them into ONE spec with
|
|
170
|
+
# the Drive vs Boot domain tagged per session / service / DID / RID.
|
|
171
|
+
udsdoc --repo /path/to/bsw-project -o spec.tex
|
|
172
|
+
# → "INFO: …merged bootloader spec (1 sessions, 1 dids, 1 routines)"
|
|
173
|
+
|
|
174
|
+
# Hand-off helper: OEM team has only a requirement-analysis CSV (Compliance Matrix
|
|
175
|
+
# format from `udsdoc --compliance-matrix-csv …`) and needs a Dcm ARXML skeleton
|
|
176
|
+
# to give the external bootloader supplier as the contract. Generate one
|
|
177
|
+
# without parsing any ARXML at all:
|
|
178
|
+
udsdoc --gen-arxml-from-csv oem_boot_requirements.csv \
|
|
179
|
+
--gen-arxml-output boot_skeleton.arxml \
|
|
180
|
+
--gen-arxml-ecu-name BootMcuA \
|
|
181
|
+
--gen-arxml-domain boot # boot|drive|both|all
|
|
182
|
+
|
|
183
|
+
# Output formats
|
|
184
|
+
udsdoc dcm.arxml --format html -o spec.html
|
|
185
|
+
udsdoc dcm.arxml --format md -o spec.md
|
|
186
|
+
udsdoc dcm.arxml --format pdx -o ecu.pdx # ISO 22901-1 PDX
|
|
187
|
+
udsdoc dcm.arxml --pdf # compile to PDF
|
|
188
|
+
|
|
189
|
+
# Multi-language output:
|
|
190
|
+
# --lang en+ja+de → ONE document with stacked translations (browser UI default)
|
|
191
|
+
# --langs en,ja,de → one document per language (legacy multi-file mode)
|
|
192
|
+
udsdoc dcm.arxml --lang en+ja+de -o spec.tex
|
|
193
|
+
udsdoc dcm.arxml --langs en,ja,de -o spec.md --format md
|
|
194
|
+
|
|
195
|
+
# Validation, diff, multi-ECU systems
|
|
196
|
+
udsdoc dcm.arxml --validate
|
|
197
|
+
udsdoc new.arxml --diff old.arxml
|
|
198
|
+
udsdoc --system system.yaml --system-output-dir out/ # 1+1 / gateway
|
|
199
|
+
|
|
200
|
+
# Browser UI
|
|
201
|
+
udsdoc --serve # http://127.0.0.1:8765
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### Python API
|
|
205
|
+
|
|
206
|
+
```python
|
|
207
|
+
from udsdoc import ArxmlParser, TexGenerator, validate, diff_specs
|
|
208
|
+
|
|
209
|
+
spec = ArxmlParser().parse_multi(["dcm.arxml", "cantp.arxml"])
|
|
210
|
+
TexGenerator().generate(spec, "spec.tex")
|
|
211
|
+
TexGenerator().compile_pdf("spec.tex")
|
|
212
|
+
|
|
213
|
+
print(validate(spec).summary()) # ISO 14229-1 consistency
|
|
214
|
+
print(diff_specs(spec_a, spec_b).to_markdown())
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## Features
|
|
220
|
+
|
|
221
|
+
**Coverage**
|
|
222
|
+
|
|
223
|
+
- DCM (ISO 14229-1) — sessions, security, all 26 standard services, DIDs,
|
|
224
|
+
routines, DTCs, memory ranges, IO control / periodic / dynamic DIDs,
|
|
225
|
+
Authentication, ResponseOnEvent, LinkControl, multi-client.
|
|
226
|
+
- CanTp (ISO 15765-2) — channels, BS/STmin, N_As/Bs/Cs/Ar/Br/Cr, addressing.
|
|
227
|
+
- DEM (ISO 14229-1 §11) — DTC config, OBD/WWH-OBD, freeze frames, extended
|
|
228
|
+
data, operation cycles, indicators, combined DTCs.
|
|
229
|
+
- DoIP (ISO 13400), Communication ARXML, Adaptive Platform service interfaces.
|
|
230
|
+
- C/C++ source scanning — DID/RID global variables (transitive depth ≤3).
|
|
231
|
+
- Bootloader overlay — single document covering Drive + Boot domains via YAML.
|
|
232
|
+
|
|
233
|
+
**Output**
|
|
234
|
+
|
|
235
|
+
- `tex` (Jinja2 + structured ZIP), `pdf` (xelatex/latexmk), `html` (multi-page
|
|
236
|
+
ZIP with offline Mermaid + NRC ladders), `md`, `rst`, `csv`, `yaml`,
|
|
237
|
+
`json`, `docx`, `odx`, `pdx`.
|
|
238
|
+
- Visualizations: heatmaps, timing diagrams, UML sequences, byte-level
|
|
239
|
+
DID maps, session/security FSMs.
|
|
240
|
+
|
|
241
|
+
**Requirements Compliance (ASPICE SYS.2.BP4 / ISO 26262-8 §6.4.5)**
|
|
242
|
+
|
|
243
|
+
- `--compliance-matrix CSV [CSV ...]` + `--compliance-matrix-sources YAML` — append a Requirements
|
|
244
|
+
Compliance Matrix chapter to the LaTeX/PDF output that joins each
|
|
245
|
+
upstream requirement against the parsed ARXML (SID / DID / RID / DTC /
|
|
246
|
+
session / security level). Resolved coverage % is computed and shown;
|
|
247
|
+
unresolved rows are flagged with an asterisk.
|
|
248
|
+
|
|
249
|
+
**Quality**
|
|
250
|
+
|
|
251
|
+
- `--validate` — 17 ISO 14229-1 consistency checks.
|
|
252
|
+
- `--diff` — semantic spec diff (ARXML or JSON).
|
|
253
|
+
- `--iso-version {2006,2013,2020}` — drop features outside the chosen revision.
|
|
254
|
+
- `--autosar-compat-report` — flag features postdating the detected AUTOSAR release.
|
|
255
|
+
- Schema export: JSON Schema (draft-07), Pydantic v2 model source.
|
|
256
|
+
|
|
257
|
+
**LLM analysis** (`[llm]` extra)
|
|
258
|
+
|
|
259
|
+
- `--llm-summarize`, `--llm-query`, `--llm-nrc-descriptions`, `--llm-translate`.
|
|
260
|
+
- Backends: Anthropic Claude API or any OpenAI-compatible server (Ollama,
|
|
261
|
+
llama.cpp, vLLM, OpenRouter, Azure). One-shot setup:
|
|
262
|
+
`udsdoc --bootstrap-ollama` (Linux/macOS).
|
|
263
|
+
|
|
264
|
+
**ECU hardware testing** (`[ecu-test]` extra)
|
|
265
|
+
|
|
266
|
+
- Auto-generates UDS test cases from the parsed spec, executes over CAN /
|
|
267
|
+
ISO-TP via python-can. Heuristic generator or formal `--ecu-formal`
|
|
268
|
+
state-machine explorer (all-transitions coverage). HTML / JUnit XML /
|
|
269
|
+
CSV / coverage reports.
|
|
270
|
+
|
|
271
|
+
**Multi-ECU systems**
|
|
272
|
+
|
|
273
|
+
- Declarative YAML config (`--system`) for redundant / gateway-with-forwarder
|
|
274
|
+
topologies, per-ECU spec + integration document, ARXML coverage-gap
|
|
275
|
+
routing inference, cross-ECU validator.
|
|
276
|
+
|
|
277
|
+
**Browser UI** (`--serve`, `[web]` extra)
|
|
278
|
+
|
|
279
|
+
- Local FastAPI server with five sidebar tabs:
|
|
280
|
+
- **Generate** — pick a BSW repository folder; the server uploads
|
|
281
|
+
UDS-relevant files (`.arxml`, `.c`, `.h`, `.yaml`, `.json`),
|
|
282
|
+
classifies each ARXML by AUTOSAR module, **auto-detects single vs
|
|
283
|
+
multi-ECU**, and generates the chosen format. `format=tex` ZIPs
|
|
284
|
+
include a compiled `spec.pdf` when `xelatex` is on PATH; otherwise
|
|
285
|
+
the UI flags the failure (and the ZIP carries a
|
|
286
|
+
`PDF_NOT_COMPILED.txt` with the underlying reason). Optional
|
|
287
|
+
**Compliance Matrix (Compliance Matrix)** CSV upload (ASPICE
|
|
288
|
+
SYS.2.BP4 / ISO 26262-8 §6.4.5 — DOORS-style) appends a per-row
|
|
289
|
+
compliance chapter with LaTeX `\cite{}` references; a
|
|
290
|
+
*Load sample bundle* button materialises a complete demo repo +
|
|
291
|
+
two Compliance Matrix CSVs server-side for a one-click pipeline preview.
|
|
292
|
+
- **Spec** — parsed SID / NRC / DID / RID / DTC tables shown
|
|
293
|
+
after a successful Parse & Preview.
|
|
294
|
+
- **Chat** — multi-turn LLM Q&A with streaming responses
|
|
295
|
+
(Anthropic Claude API / Ollama / OpenAI-compatible). Installed
|
|
296
|
+
Ollama / OpenAI models are auto-detected, and host RAM is read
|
|
297
|
+
server-side to recommend a model size class.
|
|
298
|
+
- **UDS Workbench** — interactive UDS request simulator (no
|
|
299
|
+
hardware required), CAN trace log analyzer (ASC / BLF), one-click
|
|
300
|
+
ODX / PDX export for CANalyzer & CANoe, and a collapsible
|
|
301
|
+
hardware-in-the-loop test runner for CAN / ISO-TP campaigns.
|
|
302
|
+
- **About** — version, links, feature list.
|
|
303
|
+
|
|
304
|
+
**Tooling**
|
|
305
|
+
|
|
306
|
+
- Interactive wizard (`-I`), config files (`--config`), file watching
|
|
307
|
+
(`--watch`), parallel parse, incremental cache, XSD validation,
|
|
308
|
+
pytest plugin (`uds_spec` fixture), LSP server, shell completion,
|
|
309
|
+
plugin system (`ParserPlugin` / `GeneratorPlugin`), i18n (en / de / ja
|
|
310
|
+
with bilingual `--lang ja+en` mode + multi-language `--langs en,ja,de`).
|
|
311
|
+
|
|
312
|
+
**Distribution**
|
|
313
|
+
|
|
314
|
+
- Docker image (TeX Live + `udsdoc[all]`).
|
|
315
|
+
- GitHub Action (Marketplace-ready).
|
|
316
|
+
- pre-commit hooks (validate / regen PDF / regen TeX ZIP).
|
|
317
|
+
- VS Code extension (right-click `.arxml` → generate / validate / diff / LLM).
|
|
318
|
+
|
|
319
|
+
---
|
|
320
|
+
|
|
321
|
+
## Documentation
|
|
322
|
+
|
|
323
|
+
- **Full feature reference & Python API**:
|
|
324
|
+
[`docs/README_full.md`](docs/README_full.md)
|
|
325
|
+
- **Standards coverage matrices** (ISO ↔ AUTOSAR ECUC ↔ udsdoc,
|
|
326
|
+
with `file:line` source citations):
|
|
327
|
+
[`docs/standards/`](docs/standards/)
|
|
328
|
+
— ISO 15765-2 (CanTp), ISO 14229-2 (session/timing),
|
|
329
|
+
ISO 14229-1 (services, DTC/Dem), required-ARXMLs note.
|
|
330
|
+
- **App + Boot ARXML split & CSV → ARXML hand-off**:
|
|
331
|
+
[`docs/app-boot-arxml.md`](docs/app-boot-arxml.md)
|
|
332
|
+
- **Changelog**: [`CHANGELOG.md`](CHANGELOG.md)
|
|
333
|
+
- **Contributing**: [`CONTRIBUTING.md`](CONTRIBUTING.md)
|
|
334
|
+
|
|
335
|
+
---
|
|
336
|
+
|
|
337
|
+
## Requirements
|
|
338
|
+
|
|
339
|
+
- Python ≥ 3.9
|
|
340
|
+
- `lxml` ≥ 4.9, `Jinja2` ≥ 3.1
|
|
341
|
+
- LaTeX with `xelatex` (TeX Live / MiKTeX) for PDF output
|
|
342
|
+
|
|
343
|
+
---
|
|
344
|
+
|
|
345
|
+
## License
|
|
346
|
+
|
|
347
|
+
MIT
|
udsdoc-0.66.0/README.md
ADDED
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
# udsdoc
|
|
2
|
+
|
|
3
|
+
**AUTOSAR DCM/CanTp/DEM ARXML → ISO 14229 (UDS) / ISO 15765 / ISO 22901-1 (ODX/PDX) specification documents.**
|
|
4
|
+
|
|
5
|
+
[](https://badge.fury.io/py/udsdoc)
|
|
6
|
+
[](https://pypi.org/project/udsdoc/)
|
|
7
|
+
[](https://opensource.org/licenses/MIT)
|
|
8
|
+
|
|
9
|
+
> **Renamed from `udsxml2tex` (v0.66.0).** The old PyPI package now installs
|
|
10
|
+
> this one; the `udsxml2tex` CLI command, `UDSXML2TEX_*` environment
|
|
11
|
+
> variables, `~/.udsxml2tex/` config directory and `udsxml2tex-*` pre-commit
|
|
12
|
+
> hook ids keep working as deprecated aliases until v1.0.
|
|
13
|
+
> Migration: `pip install udsdoc`, command `udsdoc`, `import udsdoc`.
|
|
14
|
+
|
|
15
|
+
`udsdoc` parses AUTOSAR diagnostic ARXML (DCM, CanTp, DEM, DoIP, COM, AP)
|
|
16
|
+
and renders a complete UDS specification in **LaTeX / PDF / HTML / Markdown
|
|
17
|
+
/ RST / CSV / YAML / JSON / DOCX**, plus **ASAM ODX 2.2.0 / PDX**
|
|
18
|
+
(ISO 22901-1) for industry diagnostic tooling.
|
|
19
|
+
|
|
20
|
+
It also ships a local **browser UI** (`--serve`) that one-clicks an entire
|
|
21
|
+
BSW software repository through the pipeline, auto-detecting single-ECU
|
|
22
|
+
vs multi-ECU layouts.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Install
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
pip install udsdoc # core (LaTeX / Markdown / JSON / YAML)
|
|
30
|
+
pip install udsdoc[web] # browser UI (--serve) + inline TikZ-UML SVG figures
|
|
31
|
+
pip install udsdoc[llm] # LLM analysis (Anthropic + OpenAI / Ollama)
|
|
32
|
+
pip install udsdoc[ecu-test] # CAN/ISO-TP hardware testing
|
|
33
|
+
pip install udsdoc[all] # everything
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Other extras: `yaml`, `svg`, `watch`, `docx`, `lsp`, `progress`, `rich`, `viz`.
|
|
37
|
+
|
|
38
|
+
A LaTeX distribution (TeX Live / MiKTeX with `xelatex` for CJK) is required
|
|
39
|
+
to compile generated `.tex` to PDF. The HTML output renders standalone.
|
|
40
|
+
TikZ-UML diagrams in the HTML output (SID 0x10 session FSM, SID 0x27
|
|
41
|
+
SecurityAccess FSM and sequence) are compiled to inline SVG when `xelatex`
|
|
42
|
+
plus a PDF→SVG tool are present — the `[web]` / `[svg]` extras pull in
|
|
43
|
+
`pymupdf`, which provides an in-process PDF→SVG converter so no system
|
|
44
|
+
binary (`pdftocairo` / `dvisvgm` / `pdf2svg` / `inkscape`) is required.
|
|
45
|
+
Without the toolchain the HTML output silently falls back to Mermaid.
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Quick start
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
# Single ARXML → LaTeX
|
|
53
|
+
udsdoc dcm.arxml -o spec.tex
|
|
54
|
+
|
|
55
|
+
# Merge DCM + CanTp + DEM
|
|
56
|
+
udsdoc dcm.arxml cantp.arxml --dem dem.arxml -o spec.tex
|
|
57
|
+
|
|
58
|
+
# Auto-discover everything under a BSW repo (CLI mirror of the browser UI)
|
|
59
|
+
udsdoc --repo /path/to/bsw-project -o spec.tex
|
|
60
|
+
udsdoc --repo /path/to/bsw-project --repo-dry-run # show classification
|
|
61
|
+
|
|
62
|
+
# Application + Bootloader ARXMLs owned by separate teams — placed in
|
|
63
|
+
# parallel subtrees (app/, boot/) under the repo root. The scanner
|
|
64
|
+
# detects boot-domain files by path tokens (boot/, bootloader/, bl/,
|
|
65
|
+
# fbl/, pbl/, sbl/, *_boot*, *_bl*) and merges them into ONE spec with
|
|
66
|
+
# the Drive vs Boot domain tagged per session / service / DID / RID.
|
|
67
|
+
udsdoc --repo /path/to/bsw-project -o spec.tex
|
|
68
|
+
# → "INFO: …merged bootloader spec (1 sessions, 1 dids, 1 routines)"
|
|
69
|
+
|
|
70
|
+
# Hand-off helper: OEM team has only a requirement-analysis CSV (Compliance Matrix
|
|
71
|
+
# format from `udsdoc --compliance-matrix-csv …`) and needs a Dcm ARXML skeleton
|
|
72
|
+
# to give the external bootloader supplier as the contract. Generate one
|
|
73
|
+
# without parsing any ARXML at all:
|
|
74
|
+
udsdoc --gen-arxml-from-csv oem_boot_requirements.csv \
|
|
75
|
+
--gen-arxml-output boot_skeleton.arxml \
|
|
76
|
+
--gen-arxml-ecu-name BootMcuA \
|
|
77
|
+
--gen-arxml-domain boot # boot|drive|both|all
|
|
78
|
+
|
|
79
|
+
# Output formats
|
|
80
|
+
udsdoc dcm.arxml --format html -o spec.html
|
|
81
|
+
udsdoc dcm.arxml --format md -o spec.md
|
|
82
|
+
udsdoc dcm.arxml --format pdx -o ecu.pdx # ISO 22901-1 PDX
|
|
83
|
+
udsdoc dcm.arxml --pdf # compile to PDF
|
|
84
|
+
|
|
85
|
+
# Multi-language output:
|
|
86
|
+
# --lang en+ja+de → ONE document with stacked translations (browser UI default)
|
|
87
|
+
# --langs en,ja,de → one document per language (legacy multi-file mode)
|
|
88
|
+
udsdoc dcm.arxml --lang en+ja+de -o spec.tex
|
|
89
|
+
udsdoc dcm.arxml --langs en,ja,de -o spec.md --format md
|
|
90
|
+
|
|
91
|
+
# Validation, diff, multi-ECU systems
|
|
92
|
+
udsdoc dcm.arxml --validate
|
|
93
|
+
udsdoc new.arxml --diff old.arxml
|
|
94
|
+
udsdoc --system system.yaml --system-output-dir out/ # 1+1 / gateway
|
|
95
|
+
|
|
96
|
+
# Browser UI
|
|
97
|
+
udsdoc --serve # http://127.0.0.1:8765
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Python API
|
|
101
|
+
|
|
102
|
+
```python
|
|
103
|
+
from udsdoc import ArxmlParser, TexGenerator, validate, diff_specs
|
|
104
|
+
|
|
105
|
+
spec = ArxmlParser().parse_multi(["dcm.arxml", "cantp.arxml"])
|
|
106
|
+
TexGenerator().generate(spec, "spec.tex")
|
|
107
|
+
TexGenerator().compile_pdf("spec.tex")
|
|
108
|
+
|
|
109
|
+
print(validate(spec).summary()) # ISO 14229-1 consistency
|
|
110
|
+
print(diff_specs(spec_a, spec_b).to_markdown())
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Features
|
|
116
|
+
|
|
117
|
+
**Coverage**
|
|
118
|
+
|
|
119
|
+
- DCM (ISO 14229-1) — sessions, security, all 26 standard services, DIDs,
|
|
120
|
+
routines, DTCs, memory ranges, IO control / periodic / dynamic DIDs,
|
|
121
|
+
Authentication, ResponseOnEvent, LinkControl, multi-client.
|
|
122
|
+
- CanTp (ISO 15765-2) — channels, BS/STmin, N_As/Bs/Cs/Ar/Br/Cr, addressing.
|
|
123
|
+
- DEM (ISO 14229-1 §11) — DTC config, OBD/WWH-OBD, freeze frames, extended
|
|
124
|
+
data, operation cycles, indicators, combined DTCs.
|
|
125
|
+
- DoIP (ISO 13400), Communication ARXML, Adaptive Platform service interfaces.
|
|
126
|
+
- C/C++ source scanning — DID/RID global variables (transitive depth ≤3).
|
|
127
|
+
- Bootloader overlay — single document covering Drive + Boot domains via YAML.
|
|
128
|
+
|
|
129
|
+
**Output**
|
|
130
|
+
|
|
131
|
+
- `tex` (Jinja2 + structured ZIP), `pdf` (xelatex/latexmk), `html` (multi-page
|
|
132
|
+
ZIP with offline Mermaid + NRC ladders), `md`, `rst`, `csv`, `yaml`,
|
|
133
|
+
`json`, `docx`, `odx`, `pdx`.
|
|
134
|
+
- Visualizations: heatmaps, timing diagrams, UML sequences, byte-level
|
|
135
|
+
DID maps, session/security FSMs.
|
|
136
|
+
|
|
137
|
+
**Requirements Compliance (ASPICE SYS.2.BP4 / ISO 26262-8 §6.4.5)**
|
|
138
|
+
|
|
139
|
+
- `--compliance-matrix CSV [CSV ...]` + `--compliance-matrix-sources YAML` — append a Requirements
|
|
140
|
+
Compliance Matrix chapter to the LaTeX/PDF output that joins each
|
|
141
|
+
upstream requirement against the parsed ARXML (SID / DID / RID / DTC /
|
|
142
|
+
session / security level). Resolved coverage % is computed and shown;
|
|
143
|
+
unresolved rows are flagged with an asterisk.
|
|
144
|
+
|
|
145
|
+
**Quality**
|
|
146
|
+
|
|
147
|
+
- `--validate` — 17 ISO 14229-1 consistency checks.
|
|
148
|
+
- `--diff` — semantic spec diff (ARXML or JSON).
|
|
149
|
+
- `--iso-version {2006,2013,2020}` — drop features outside the chosen revision.
|
|
150
|
+
- `--autosar-compat-report` — flag features postdating the detected AUTOSAR release.
|
|
151
|
+
- Schema export: JSON Schema (draft-07), Pydantic v2 model source.
|
|
152
|
+
|
|
153
|
+
**LLM analysis** (`[llm]` extra)
|
|
154
|
+
|
|
155
|
+
- `--llm-summarize`, `--llm-query`, `--llm-nrc-descriptions`, `--llm-translate`.
|
|
156
|
+
- Backends: Anthropic Claude API or any OpenAI-compatible server (Ollama,
|
|
157
|
+
llama.cpp, vLLM, OpenRouter, Azure). One-shot setup:
|
|
158
|
+
`udsdoc --bootstrap-ollama` (Linux/macOS).
|
|
159
|
+
|
|
160
|
+
**ECU hardware testing** (`[ecu-test]` extra)
|
|
161
|
+
|
|
162
|
+
- Auto-generates UDS test cases from the parsed spec, executes over CAN /
|
|
163
|
+
ISO-TP via python-can. Heuristic generator or formal `--ecu-formal`
|
|
164
|
+
state-machine explorer (all-transitions coverage). HTML / JUnit XML /
|
|
165
|
+
CSV / coverage reports.
|
|
166
|
+
|
|
167
|
+
**Multi-ECU systems**
|
|
168
|
+
|
|
169
|
+
- Declarative YAML config (`--system`) for redundant / gateway-with-forwarder
|
|
170
|
+
topologies, per-ECU spec + integration document, ARXML coverage-gap
|
|
171
|
+
routing inference, cross-ECU validator.
|
|
172
|
+
|
|
173
|
+
**Browser UI** (`--serve`, `[web]` extra)
|
|
174
|
+
|
|
175
|
+
- Local FastAPI server with five sidebar tabs:
|
|
176
|
+
- **Generate** — pick a BSW repository folder; the server uploads
|
|
177
|
+
UDS-relevant files (`.arxml`, `.c`, `.h`, `.yaml`, `.json`),
|
|
178
|
+
classifies each ARXML by AUTOSAR module, **auto-detects single vs
|
|
179
|
+
multi-ECU**, and generates the chosen format. `format=tex` ZIPs
|
|
180
|
+
include a compiled `spec.pdf` when `xelatex` is on PATH; otherwise
|
|
181
|
+
the UI flags the failure (and the ZIP carries a
|
|
182
|
+
`PDF_NOT_COMPILED.txt` with the underlying reason). Optional
|
|
183
|
+
**Compliance Matrix (Compliance Matrix)** CSV upload (ASPICE
|
|
184
|
+
SYS.2.BP4 / ISO 26262-8 §6.4.5 — DOORS-style) appends a per-row
|
|
185
|
+
compliance chapter with LaTeX `\cite{}` references; a
|
|
186
|
+
*Load sample bundle* button materialises a complete demo repo +
|
|
187
|
+
two Compliance Matrix CSVs server-side for a one-click pipeline preview.
|
|
188
|
+
- **Spec** — parsed SID / NRC / DID / RID / DTC tables shown
|
|
189
|
+
after a successful Parse & Preview.
|
|
190
|
+
- **Chat** — multi-turn LLM Q&A with streaming responses
|
|
191
|
+
(Anthropic Claude API / Ollama / OpenAI-compatible). Installed
|
|
192
|
+
Ollama / OpenAI models are auto-detected, and host RAM is read
|
|
193
|
+
server-side to recommend a model size class.
|
|
194
|
+
- **UDS Workbench** — interactive UDS request simulator (no
|
|
195
|
+
hardware required), CAN trace log analyzer (ASC / BLF), one-click
|
|
196
|
+
ODX / PDX export for CANalyzer & CANoe, and a collapsible
|
|
197
|
+
hardware-in-the-loop test runner for CAN / ISO-TP campaigns.
|
|
198
|
+
- **About** — version, links, feature list.
|
|
199
|
+
|
|
200
|
+
**Tooling**
|
|
201
|
+
|
|
202
|
+
- Interactive wizard (`-I`), config files (`--config`), file watching
|
|
203
|
+
(`--watch`), parallel parse, incremental cache, XSD validation,
|
|
204
|
+
pytest plugin (`uds_spec` fixture), LSP server, shell completion,
|
|
205
|
+
plugin system (`ParserPlugin` / `GeneratorPlugin`), i18n (en / de / ja
|
|
206
|
+
with bilingual `--lang ja+en` mode + multi-language `--langs en,ja,de`).
|
|
207
|
+
|
|
208
|
+
**Distribution**
|
|
209
|
+
|
|
210
|
+
- Docker image (TeX Live + `udsdoc[all]`).
|
|
211
|
+
- GitHub Action (Marketplace-ready).
|
|
212
|
+
- pre-commit hooks (validate / regen PDF / regen TeX ZIP).
|
|
213
|
+
- VS Code extension (right-click `.arxml` → generate / validate / diff / LLM).
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## Documentation
|
|
218
|
+
|
|
219
|
+
- **Full feature reference & Python API**:
|
|
220
|
+
[`docs/README_full.md`](docs/README_full.md)
|
|
221
|
+
- **Standards coverage matrices** (ISO ↔ AUTOSAR ECUC ↔ udsdoc,
|
|
222
|
+
with `file:line` source citations):
|
|
223
|
+
[`docs/standards/`](docs/standards/)
|
|
224
|
+
— ISO 15765-2 (CanTp), ISO 14229-2 (session/timing),
|
|
225
|
+
ISO 14229-1 (services, DTC/Dem), required-ARXMLs note.
|
|
226
|
+
- **App + Boot ARXML split & CSV → ARXML hand-off**:
|
|
227
|
+
[`docs/app-boot-arxml.md`](docs/app-boot-arxml.md)
|
|
228
|
+
- **Changelog**: [`CHANGELOG.md`](CHANGELOG.md)
|
|
229
|
+
- **Contributing**: [`CONTRIBUTING.md`](CONTRIBUTING.md)
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## Requirements
|
|
234
|
+
|
|
235
|
+
- Python ≥ 3.9
|
|
236
|
+
- `lxml` ≥ 4.9, `Jinja2` ≥ 3.1
|
|
237
|
+
- LaTeX with `xelatex` (TeX Live / MiKTeX) for PDF output
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
## License
|
|
242
|
+
|
|
243
|
+
MIT
|