{
  "added_at": "2026-11-03",
  "additional_evidence_urls": [
    "https://github.com/PabloSoage/opendash/blob/7c8d72953d8060f2dc49e606963e1d103eec64d9/README.md",
    "https://github.com/PabloSoage/opendash/blob/7c8d72953d8060f2dc49e606963e1d103eec64d9/core/src/frame.rs",
    "https://github.com/PabloSoage/opendash/blob/7c8d72953d8060f2dc49e606963e1d103eec64d9/core/src/h4.rs",
    "https://github.com/PabloSoage/opendash/blob/7c8d72953d8060f2dc49e606963e1d103eec64d9/core/tests/protocol.rs",
    "https://github.com/PabloSoage/opendash/blob/7c8d72953d8060f2dc49e606963e1d103eec64d9/.github/workflows/ci.yml",
    "https://github.com/PabloSoage/opendash/blob/7c8d72953d8060f2dc49e606963e1d103eec64d9/LICENSE",
    "https://github.com/PabloSoage/opendash/releases/tag/v0.4.2-beta"
  ],
  "category": "reconstruction-cases",
  "description_en": "Speaks the undocumented protocol of the Scanmatik SM3, a J2534 vehicle interface that otherwise talks only to its own Windows software, and exposes it to an Android phone as an ELM327 bridge with a diagnostics app on top. The author recovered the framing — a 16-byte header with sequence, CRC-based and sum-based check words, opcode and length — by capturing the device's bundled driver and measuring the replies, and docs/protocol.md separates what was established from what is still open. Reported results come from one Opel Astra J over five sessions with the car present.",
  "description_zh": "直接使用 Scanmatik SM3 未公开的协议——这款 J2534 车辆接口原本只与自家 Windows 软件通信——并以 ELM327 桥接的形式提供给 Android 手机，其上还有一个诊断应用。作者通过抓取设备随附驱动的通信并测量响应，恢复了报文结构：包含序号、基于 CRC 与求和的校验字、操作码和长度的 16 字节报头；docs/protocol.md 区分了已确认与仍待解决的部分。所报告的结果来自一辆 Opel Astra J、共五次有车在场的测试。",
  "entry_url": "https://awesomerea.org/resources/opendash-scanmatik-sm3-protocol-case/",
  "entry_url_zh": "https://awesomerea.org/zh/resources/opendash-scanmatik-sm3-protocol-case/",
  "evidence_url": "https://github.com/PabloSoage/opendash/blob/7c8d72953d8060f2dc49e606963e1d103eec64d9/docs/protocol.md",
  "group": "cases",
  "id": "opendash-scanmatik-sm3-protocol-case",
  "json_url": "https://awesomerea.org/resources/opendash-scanmatik-sm3-protocol-case/record.json",
  "kind": "case-study",
  "markdown_url": "https://awesomerea.org/resources/opendash-scanmatik-sm3-protocol-case/index.md",
  "markdown_url_zh": "https://awesomerea.org/zh/resources/opendash-scanmatik-sm3-protocol-case/index.md",
  "name": "opendash: reconstructing the Scanmatik SM3 J2534 adapter protocol",
  "name_zh": "opendash：重建 Scanmatik SM3 J2534 适配器协议",
  "record_type": "resource",
  "relationship": "independent-reconstruction",
  "requirements": [
    "Reviewed at the main-branch head of 2026-10-16, one README-only commit after the v0.4.2-beta release. README reports reading identification, standard OBD-II data and GM service 0x22 parameters, and module-driven streaming at about 98.7 Hz per packet, on one Opel Astra J 1.7 CDTI; the ELM327 bridge has been exercised against emulated modules but not yet against the car, and two long recordings stopped early for reasons not yet understood.",
    "Requires the user's own Scanmatik SM3 reached over its Wi-Fi access point. Standard SAE J1979 PIDs ship with the app; richer per-brand catalogues are generated from a GM GDS2 installation the user already has, and README says they are not distributed because the data belongs to GM. No catalogue data, vendor driver, firmware or driving recordings are committed.",
    "The app is read-only by design: README lists the diagnostic services it permits, and requests that write data, control inputs and outputs or routines, clear codes or request security access are refused before reaching the socket. One known actuator command sits behind a settings switch that requires the phone's device lock and is off by default.",
    "Android 8.0+ app built with Gradle, AGP 9.4.1, Kotlin 2.4.20 and JDK 21. A separate Rust core implements framing, check words, ISO-TP and ELM327 handling but is not yet wired into the app, whose Kotlin bridge README says has moved ahead of it. CI runs cargo test, which replays 200 recorded writes and checks the computed check word against what the device sent, and builds the debug APK without the Rust core; Kotlin unit tests exist but are not run in CI.",
    "GPL-3.0 (LICENSE). Scanmatik, GM, GDS2 and Opel remain trademarks of their owners."
  ],
  "requirements_zh": [
    "在 2026-10-16 的 main 分支最新提交处审阅，该提交位于 v0.4.2-beta 发布之后，只改动了 README。README 报告在一辆 Opel Astra J 1.7 CDTI 上实现了读取识别信息、标准 OBD-II 数据和 GM 0x22 服务参数，以及每个数据包约 98.7 Hz 的模块主动推流；ELM327 桥接已在模拟模块上测试，但尚未在实车上测试，另有两段长时间录制因尚不明确的原因提前中止。",
    "需要使用者自己的 Scanmatik SM3，并通过其 Wi-Fi 热点连接。标准 SAE J1979 PID 随应用提供；更丰富的各品牌参数目录由使用者已有的 GM GDS2 安装生成，README 称因数据属于 GM 而不予分发。仓库未收录任何参数目录数据、厂商驱动、固件或行车录制数据。",
    "应用在设计上只读：README 列出了允许的诊断服务，写入数据、控制输入输出或例程、清除故障码或请求安全访问的请求会在到达套接字前被拒绝。唯一已知的执行器命令位于设置开关之后，需要手机的设备锁验证，且默认关闭。",
    "Android 8.0+ 应用，使用 Gradle、AGP 9.4.1、Kotlin 2.4.20 和 JDK 21 构建。另有一个独立的 Rust 核心实现报文结构、校验字、ISO-TP 与 ELM327 处理，但尚未接入应用；README 称应用中的 Kotlin 桥接已领先于它。CI 运行 cargo test（重放 200 条记录的写入，并将计算出的校验字与设备实际发送的值比对），并在不含 Rust 核心的情况下构建调试版 APK；Kotlin 单元测试虽然存在，但不在 CI 中运行。",
    "采用 GPL-3.0 许可（LICENSE）。Scanmatik、GM、GDS2 与 Opel 仍为其权利人的商标。"
  ],
  "targets": [
    "protocol"
  ],
  "url": "https://github.com/PabloSoage/opendash",
  "verification": "source-reviewed",
  "verified_at": "2026-10-27"
}
