Tier 3: Bi-directional & service functions (actuator tests, resets, module config) #2

Open
opened 2026-07-01 08:19:50 -04:00 by claude · 1 comment

What

FORScan/Autel-class bi-directional control: actuator/output tests (injector buzz, cylinder contribution/balance, KOEO/KOER self-tests, command fans/relays), and service functions (oil reset, TPMS relearn, throttle/SAS relearn, DPF regen, EPB/brake service, battery registration). Optionally module configuration/As-Built.

Approach

Model the commands as data in the vehicle profile (a new actions/routines section) the same way PIDs are — UDS Mode 2F (input/output control) and Mode 31 (routine control). Community-contributable per vehicle; sandbox any write. Start read-only (self-tests), add writes behind strong confirmations. Extend PROFILE_SPEC.md.

Notes

This is the real "match FORScan" milestone and the biggest lift — needs per-vehicle reverse engineering and carries risk (can mis-actuate/brick modules). P2, feature.

## What FORScan/Autel-class **bi-directional** control: actuator/output tests (injector buzz, cylinder contribution/balance, KOEO/KOER self-tests, command fans/relays), and **service functions** (oil reset, TPMS relearn, throttle/SAS relearn, DPF regen, EPB/brake service, battery registration). Optionally module **configuration/As-Built**. ## Approach Model the commands as **data in the vehicle profile** (a new `actions`/`routines` section) the same way PIDs are — UDS Mode 2F (input/output control) and Mode 31 (routine control). Community-contributable per vehicle; sandbox any write. Start **read-only** (self-tests), add writes behind strong confirmations. Extend PROFILE_SPEC.md. ## Notes This is the real "match FORScan" milestone and the biggest lift — needs per-vehicle reverse engineering and carries risk (can mis-actuate/brick modules). P2, feature.
claude added the featureP2 labels 2026-07-01 08:19:50 -04:00
Author

Framework landed in d435384 (first increment):

  • obdcore/actions.py — profile-defined UDS action sequences: session (Mode 10) → security (Mode 27 seed→key) → command steps (2F/31/11/3E/…), with response checks. Runs ONLY profile-defined hex; per-vehicle seed→key algorithms deliberately NOT bundled (unknown algorithm = blocked, fails safe).
  • Profile actions[] block (loaded/saved/validated); ElmLink/MockLink.read_raw.
  • GUI: Diagnostics → Service & Bi-directional dialog, risk-gated confirmations.
  • Ships 2 safe STANDARD actions (Tester-Present, ECU-Reset). PROFILE_SPEC.md documents the schema + safety rules. Tests: runner/security/safety-block/validation.

Remaining (keep open):

  1. Verified per-vehicle actions as profile data (Ford KOEO/KOER, injector buzz/cylinder contribution; Honda/Chrysler service resets) — needs service-manual / bench-confirmed command bytes + routine IDs.
  2. Real security-access algorithms (per-make, reverse-engineered) — big, sensitive.
  3. Actuator tests that hold state need a Tester-Present (3E) keepalive loop during the routine.
  4. GUI polish: live result values for routines that return data (Mode 31 requestResults), grouping by kind.
Framework landed in d435384 (first increment): - `obdcore/actions.py` — profile-defined UDS action sequences: session (Mode 10) → security (Mode 27 seed→key) → command steps (2F/31/11/3E/…), with response checks. Runs ONLY profile-defined hex; per-vehicle seed→key algorithms deliberately NOT bundled (unknown algorithm = blocked, fails safe). - Profile `actions[]` block (loaded/saved/validated); `ElmLink/MockLink.read_raw`. - GUI: Diagnostics → Service & Bi-directional dialog, risk-gated confirmations. - Ships 2 safe STANDARD actions (Tester-Present, ECU-Reset). PROFILE_SPEC.md documents the schema + safety rules. Tests: runner/security/safety-block/validation. **Remaining (keep open):** 1. Verified per-vehicle actions as profile data (Ford KOEO/KOER, injector buzz/cylinder contribution; Honda/Chrysler service resets) — needs service-manual / bench-confirmed command bytes + routine IDs. 2. Real security-access algorithms (per-make, reverse-engineered) — big, sensitive. 3. Actuator tests that hold state need a Tester-Present (3E) keepalive loop during the routine. 4. GUI polish: live result values for routines that return data (Mode 31 requestResults), grouping by kind.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: justin/obdash#2