pydiag 1.0.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.
- pydiag-1.0.0/CHANGELOG.md +36 -0
- pydiag-1.0.0/CONTRIBUTING.md +83 -0
- pydiag-1.0.0/LICENSE +21 -0
- pydiag-1.0.0/MANIFEST.in +19 -0
- pydiag-1.0.0/PKG-INFO +703 -0
- pydiag-1.0.0/README.md +666 -0
- pydiag-1.0.0/SECURITY.md +49 -0
- pydiag-1.0.0/THIRD_PARTY_NOTICES.md +35 -0
- pydiag-1.0.0/pyproject.toml +72 -0
- pydiag-1.0.0/setup.cfg +4 -0
- pydiag-1.0.0/setup.py +5 -0
- pydiag-1.0.0/src/pydiag/__init__.py +5 -0
- pydiag-1.0.0/src/pydiag/autodetect.py +105 -0
- pydiag-1.0.0/src/pydiag/cli.py +904 -0
- pydiag-1.0.0/src/pydiag/config.py +112 -0
- pydiag-1.0.0/src/pydiag/devices/__init__.py +59 -0
- pydiag-1.0.0/src/pydiag/devices/core.py +353 -0
- pydiag-1.0.0/src/pydiag/devices/lin.py +296 -0
- pydiag-1.0.0/src/pydiag/devices/linux_vci.py +321 -0
- pydiag-1.0.0/src/pydiag/devices/pcan.py +300 -0
- pydiag-1.0.0/src/pydiag/devices/socketcan.py +198 -0
- pydiag-1.0.0/src/pydiag/devices/vector.py +192 -0
- pydiag-1.0.0/src/pydiag/devices/virtual.py +44 -0
- pydiag-1.0.0/src/pydiag/devices/zlg.py +539 -0
- pydiag-1.0.0/src/pydiag/logutil.py +146 -0
- pydiag-1.0.0/src/pydiag/platform.py +71 -0
- pydiag-1.0.0/src/pydiag/py.typed +1 -0
- pydiag-1.0.0/src/pydiag/sec_algo.py +152 -0
- pydiag-1.0.0/src/pydiag/selftest.py +173 -0
- pydiag-1.0.0/src/pydiag/vendor/__init__.py +86 -0
- pydiag-1.0.0/src/pydiag/vendor/__main__.py +127 -0
- pydiag-1.0.0/src/pydiag/vendor/pcan/PCANBasic.dll +0 -0
- pydiag-1.0.0/src/pydiag/vendor/pcan/__init__.py +2 -0
- pydiag-1.0.0/src/pydiag/vendor/vector/__init__.py +2 -0
- pydiag-1.0.0/src/pydiag/vendor/zlg/__init__.py +2 -0
- pydiag-1.0.0/src/pydiag/vendor/zlg/linux/50-usbcanfd.rules +3 -0
- pydiag-1.0.0/src/pydiag/vendor/zlg/linux/README.md +21 -0
- pydiag-1.0.0/src/pydiag/vendor/zlg/linux/libusb-1.0.so +0 -0
- pydiag-1.0.0/src/pydiag/vendor/zlg/linux/libusbcanfd.so +0 -0
- pydiag-1.0.0/src/pydiag/vendor/zlg/linux/libzuds.so +0 -0
- pydiag-1.0.0/src/pydiag/vendor/zlg/zlgcan.dll +0 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/README_platforms.md +98 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/__init__.py +1 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/bus.py +145 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/CANDTU_NET.dll +0 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/CANDevCore.dll +0 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/CANDevice.dll +0 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/CANETE.dll +0 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/CANET_TCP.dll +0 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/CANFDCOM.dll +0 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/CANFDNET.dll +0 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/CANWIFI_TCP.dll +0 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/CANWIFI_UDP.dll +0 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/USBCAN.dll +0 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/USBCAN.xml +198 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/USBCANFD.dll +0 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/USBCANFD800U.dll +0 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/VCI_USBCAN2.xml +42 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/VirtualUSBCAN.dll +0 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/ZlgCloud.dll +0 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/__init__.py +0 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/devices_property/__init__.py +0 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/devices_property/can.xml +629 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/devices_property/candtu-100ur.xml +119 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/devices_property/candtu-200ur.xml +207 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/devices_property/candtu-net-400.xml +207 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/devices_property/candtu-net.xml +131 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/devices_property/candtu.ini +55 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/devices_property/canet-tcp.xml +69 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/devices_property/canet-udp.xml +55 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/devices_property/canfdblue-200u.xml +219 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/devices_property/canfdcom-100ie.xml +65 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/devices_property/canfdnet-tcp.xml +433 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/devices_property/canfdnet-udp.xml +405 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/devices_property/canfdnet100-tcp.xml +244 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/devices_property/canfdnet100-udp.xml +230 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/devices_property/canfdnet400u-tcp.xml +875 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/devices_property/canfdnet400u-udp.xml +819 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/devices_property/canfdnet800u-tcp.xml +1695 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/devices_property/canfdnet800u-udp.xml +1583 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/devices_property/canfdwifi-tcp.xml +148 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/devices_property/canfdwifi-udp.xml +134 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/devices_property/canscope.xml +65 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/devices_property/device_locale_strings.xml +614 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/devices_property/pci-5010-u.xml +126 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/devices_property/pci-5020-u.xml +253 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/devices_property/pcie-canfd-100u-ex.xml +308 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/devices_property/pcie-canfd-100u.xml +290 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/devices_property/pcie-canfd-200u-ex.xml +561 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/devices_property/pcie-canfd-200u.xml +525 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/devices_property/pcie-canfd-400u-ex.xml +1067 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/devices_property/pcie-canfd-400u.xml +995 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/devices_property/usbcan-4e-u.xml +683 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/devices_property/usbcan-8e-u.xml +1575 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/devices_property/usbcan1.xml +141 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/devices_property/usbcan2.xml +226 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/devices_property/usbcan4.xml +399 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/devices_property/usbcanfd-100u.xml +432 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/devices_property/usbcanfd-200u.xml +809 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/devices_property/usbcanfd-800u.xml +2551 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/devices_property/virtual.xml +144 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/kerneldlls/dll_cfg.ini +69 -0
- pydiag-1.0.0/src/pydiag/zlg_runtime/zlgcan.py +558 -0
- pydiag-1.0.0/src/pydiag/zuds.py +1819 -0
- pydiag-1.0.0/src/pydiag/zuds_security.py +516 -0
- pydiag-1.0.0/src/pydiag.egg-info/PKG-INFO +703 -0
- pydiag-1.0.0/src/pydiag.egg-info/SOURCES.txt +109 -0
- pydiag-1.0.0/src/pydiag.egg-info/dependency_links.txt +1 -0
- pydiag-1.0.0/src/pydiag.egg-info/entry_points.txt +2 -0
- pydiag-1.0.0/src/pydiag.egg-info/requires.txt +8 -0
- pydiag-1.0.0/src/pydiag.egg-info/top_level.txt +1 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
本文件记录 pydiag 的所有重要变更。
|
|
4
|
+
格式参照 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/),
|
|
5
|
+
版本号遵循 [语义化版本](https://semver.org/lang/zh-CN/)。
|
|
6
|
+
|
|
7
|
+
## [Unreleased]
|
|
8
|
+
|
|
9
|
+
## [1.0.0] - 2026-10-22
|
|
10
|
+
|
|
11
|
+
首个公开发布版本(公开版本号自 1.0.0 起算)。
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
- **多设备自动探测**:遍历所有厂商 → 设备 → 通道,以「收到 ECU 应答」为判据定位诊断通道;
|
|
16
|
+
探测结果写回配置,下次启动走缓存快速校验(约 0.6 秒)。
|
|
17
|
+
- **多厂商设备驱动**:ZLG(Windows DLL / Linux libusb 两套)、PEAK PCAN、Vector XL、Linux SocketCAN、虚拟回环。
|
|
18
|
+
多盒同时在线按序列号 / UID 稳定区分。
|
|
19
|
+
- **四种协议**:DoCAN(ISO 15765-2)、DoLIN(ISO 17987-2)、DoIP(ISO 13400)、OBD-II(SAE J1979),
|
|
20
|
+
统一 `--protocol` 入口。
|
|
21
|
+
- **四种安全访问算法形态**:固定 key、内置算法(`xor` / `const_add` / `invert` / `swap` / `mask_shift` / `aes_ecb`)、
|
|
22
|
+
Python 脚本、OEM DLL(A/B/C 三种调用约定)。
|
|
23
|
+
- **交互模式 S3 心跳保活**:进入扩展会话后后台每 2 秒发 `3E 00`(抑制响应),手动输入慢不掉会话。
|
|
24
|
+
- **NRC 负响应码中文描述**:所有 `[NEG]` 输出自动附带含义与处置建议。
|
|
25
|
+
- **可插拔驱动的四层配置**:命令行显式参数 > profile 配置 > 自动探测 > 内置默认。
|
|
26
|
+
- **多 profile 持久化**:每个 ECU 独立记住设备 / 通道 / ID / 波特率 / 算法。
|
|
27
|
+
- **轮转日志**(5 MB × 5 份)+ `pydiag logs` 子命令 + `PYDIAG_LOG_LEVEL=DEBUG` 帧级日志。
|
|
28
|
+
- **内置自检** `pydiag selftest`:6 项检查全部跑在虚拟设备上,无需硬件。
|
|
29
|
+
- 10 个子命令:`devices` / `probe` / `smoke` / `request` / `security` / `diag-round` /
|
|
30
|
+
`interactive` / `selftest` / `config` / `logs`。
|
|
31
|
+
|
|
32
|
+
### Notes
|
|
33
|
+
|
|
34
|
+
- 基础安装零第三方 Python 依赖;`aes_ecb` 算法需 `pip install "pydiag[crypto]"`。
|
|
35
|
+
- 随包分发 ZLG / PEAK 的厂商驱动二进制,版权与来源见 [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md)。
|
|
36
|
+
- Vector `vxlapi64.dll` 因 EULA 限制不随包分发。
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# 贡献指南
|
|
2
|
+
|
|
3
|
+
感谢你愿意改进 pydiag。这个项目的目标很具体:**把 UDS 诊断这件事在命令行里做到可靠、可复现**。
|
|
4
|
+
所以贡献门槛不在代码量,而在「能不能被验证」。
|
|
5
|
+
|
|
6
|
+
## 开发环境
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
git clone https://github.com/zhifou5065/pydiag.git
|
|
10
|
+
cd pydiag
|
|
11
|
+
python -m venv .venv
|
|
12
|
+
. .venv/Scripts/activate # Windows
|
|
13
|
+
# . .venv/bin/activate # Linux / macOS
|
|
14
|
+
pip install -e ".[dev]"
|
|
15
|
+
pydiag selftest # 应输出 6/6 通过
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
要求 Python 3.10+。没有硬件也可以开发 —— 所有自检跑在 `virtual:0` 虚拟设备上。
|
|
19
|
+
|
|
20
|
+
## 改动前先跑这两条
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
pydiag selftest # 六项基本链路
|
|
24
|
+
python tools/build_dist.py # 确认还能正常打包
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
自检里有任何一项 `NG`,先在干净环境下复现再改代码。
|
|
28
|
+
|
|
29
|
+
## 代码结构约定
|
|
30
|
+
|
|
31
|
+
| 目录 | 职责 | 改动影响面 |
|
|
32
|
+
|---|---|---|
|
|
33
|
+
| `zuds.py` | UDS 核心:ISO-TP、会话、27 服务、DoLIN / DoIP 传输 | 全局,改前务必跑全量自检 |
|
|
34
|
+
| `zuds_security.py` | 安全访问编排、DLL 调用约定、内置算法注册表 | 安全相关 |
|
|
35
|
+
| `sec_algo.py` | 命令行 / profile → 算法函数的解析层 | 只影响 27 服务入口 |
|
|
36
|
+
| `devices/` | 各厂商驱动实现 | 只影响对应厂商 |
|
|
37
|
+
| `autodetect.py` | 多设备多通道探测 | 影响所有裸跑命令 |
|
|
38
|
+
| `cli.py` | 参数定义与输出渲染 | 影响用户可见行为 |
|
|
39
|
+
|
|
40
|
+
**分层原则**:协议层不认识设备,设备层不认识 UDS。新增能力尽量落在对应层,不要跨层写死。
|
|
41
|
+
|
|
42
|
+
### 新增设备驱动
|
|
43
|
+
|
|
44
|
+
实现 `BaseDriver`(`is_available` / `list_devices` / `open`)与 `BaseCANDevice.open_channel`,
|
|
45
|
+
在 `devices/__init__.py` 注册。CLI、自动探测、配置层不需要任何改动 —— 如果你的改动需要改这三个地方,
|
|
46
|
+
说明抽象漏了,先补抽象。
|
|
47
|
+
|
|
48
|
+
### 新增内置安全算法
|
|
49
|
+
|
|
50
|
+
```python
|
|
51
|
+
from pydiag.zuds_security import register_builtin
|
|
52
|
+
|
|
53
|
+
@register_builtin("my_algo")
|
|
54
|
+
def factory(key: str = "00000000"):
|
|
55
|
+
kb = bytes.fromhex(key)
|
|
56
|
+
def fn(seed: bytes, level: int) -> bytes:
|
|
57
|
+
return bytes((s ^ kb[i % len(kb)]) + level for i, s in enumerate(seed))
|
|
58
|
+
return fn
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
并在 `zuds_security.py` 的算法表与 README 的「内置算法」表格里同步登记。
|
|
62
|
+
|
|
63
|
+
## 绝对不要提交的东西
|
|
64
|
+
|
|
65
|
+
- `.pydiag_config/` 或任何含**真实 ECU 解锁密钥、设备序列号、VIN** 的配置与日志
|
|
66
|
+
- 抓包文件、`*.log`、`*.jsonl`
|
|
67
|
+
- 你所在公司的 DBC / ODX / CDD 文件与诊断规范原文
|
|
68
|
+
- 任何厂商 NDA 覆盖的算法 DLL
|
|
69
|
+
|
|
70
|
+
提 issue 贴输出时同样注意:把序列号和 key 抹掉。需要展示密钥形态时用 `1A2B3C4D` 这类中性值。
|
|
71
|
+
|
|
72
|
+
## 提交与 PR
|
|
73
|
+
|
|
74
|
+
- 一个 PR 解决一个问题。重构与功能改动尽量分开。
|
|
75
|
+
- commit message 说明**改了什么 + 为什么**,不要求特定格式,但要能读懂。
|
|
76
|
+
- PR 描述里请写清:**怎么验证的**(跑了哪些命令、接的什么硬件、输出是什么)。
|
|
77
|
+
只说「已测试」不写过程的 PR 会被要求补充。
|
|
78
|
+
- 新增用户可见行为 → 同步更新 `README.md`;新增版本 → 更新 `CHANGELOG.md` 的 `[Unreleased]`。
|
|
79
|
+
|
|
80
|
+
## 报告问题
|
|
81
|
+
|
|
82
|
+
- 功能异常 / 用法疑问 → [Issues](https://github.com/zhifou5065/pydiag/issues)
|
|
83
|
+
- 安全漏洞 → 不要开 issue,按 [SECURITY.md](SECURITY.md) 私下报告
|
pydiag-1.0.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Diag Team
|
|
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.
|
pydiag-1.0.0/MANIFEST.in
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
include README.md
|
|
2
|
+
include LICENSE
|
|
3
|
+
include CHANGELOG.md
|
|
4
|
+
include CONTRIBUTING.md
|
|
5
|
+
include SECURITY.md
|
|
6
|
+
include THIRD_PARTY_NOTICES.md
|
|
7
|
+
include pyproject.toml
|
|
8
|
+
include setup.py
|
|
9
|
+
|
|
10
|
+
# 第三方驱动二进制(随包分发,见 THIRD_PARTY_NOTICES.md)
|
|
11
|
+
recursive-include src/pydiag/vendor *.dll *.so *.dylib *.rules *.md
|
|
12
|
+
recursive-include src/pydiag/zlg_runtime *.dll *.xml *.ini *.md
|
|
13
|
+
|
|
14
|
+
# 排除运行时产物与缓存
|
|
15
|
+
prune .pydiag_config
|
|
16
|
+
prune .venv
|
|
17
|
+
prune dist
|
|
18
|
+
prune build
|
|
19
|
+
global-exclude *.py[cod] *.log *.jsonl
|