registry: add remaining documented Ford 6.0 PIDs (20 -> 27)

The initial registry was a curated core; add the rest of the PIDs the
ford-60-pid-hunt workflow surfaced, with honest confidence tags:
- doc:       VGT duty (096D), Fan speed (099F)
- tentative: Injection timing (09CC, *10/64 not /10), PCM battery (1172),
             fuel-pump duty (1672), fuel level (16C1, uncalibrated),
             mass-fuel-desired (1411, raw only -- no verified GPH formula)
Add VGT to the driving preset. Tests still pass.

Tier reminder: 'verified' = multi-source/standard or truck-confirmed; the
on-truck-confirmed subset remains ICP/EBP/MAP/BARO/EOT/gear/TSS + FICM_M.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016yT89n4zR4qbrySoSiEyZs
This commit is contained in:
2026-06-30 14:19:57 -04:00
parent 4589904b97
commit 45691334e1
+23 -1
View File
@@ -89,6 +89,28 @@ def _build():
lambda b: round(b[0] * 100 / 255), "%", "engine", 0, 100, "verified"))
a(Pid("VPCM", "Module Voltage", "01", "42", 2,
lambda b: round(_u16(b) / 1000.0, 2), "V", "power", 0, 16, "verified"))
# ---- More documented PIDs from the workflow (not yet truck-verified) ----
a(Pid("VGT", "VGT Duty Cycle", "22", "096D", 2,
lambda b: round(_u16(b) * 100 / 32767, 1), "%", "air", 0, 100,
"doc", notes="turbo vane duty"))
a(Pid("FAN", "Fan Speed", "22", "099F", 2,
lambda b: round(_u16(b) / 4), "rpm", "engine", 0, 4000,
"doc", notes="real ceiling ~3500"))
a(Pid("INJ_TIMING", "Injection Timing", "22", "09CC", 2,
lambda b: round(_u16(b) * 10 / 64, 1), "degBTDC", "fuel", -10, 30,
"tentative", notes="scaling disputed; using *10/64 (ScanGauge), not /10"))
a(Pid("VBAT", "Battery (PCM)", "22", "1172", 1,
lambda b: round(b[0] / 16, 1), "V", "power", 0, 16,
"tentative", notes="PCM-reported B+; distinct from ATRV port voltage"))
a(Pid("FUEL_PUMP", "Fuel Pump Duty (HFCM)", "22", "1672", 1,
lambda b: round(b[0] * 100 / 128, 1), "%", "fuel", 0, 100,
"tentative", notes="sits ~100%, drops on high EOT"))
a(Pid("FUEL_LVL", "Fuel Level", "22", "16C1", 2,
lambda b: round(_u16(b) * 100 / 328, 1), "%", "misc", 0, 100,
"tentative", notes="UNCALIBRATED -- needs per-truck full/empty cal"))
a(Pid("MFDES", "Mass Fuel Desired", "22", "1411", 2,
lambda b: _u16(b), "raw", "fuel", 0, 65535,
"tentative", notes="~mg/stroke internal count; no verified GPH formula"))
# ---- Pseudo / derived ----
a(Pid("BATT", "Battery (OBD port)", "atrv", "", 0,
None, "V", "power", 0, 16, "verified"))
@@ -101,7 +123,7 @@ def _build():
# Subscription presets per perspective (key -> default poll Hz set by scheduler)
PRESETS = {
"crank": ["ICP", "FICM_M", "BATT", "RPM"],
"driving": ["BOOST", "EOT", "ECT", "EBP", "LOAD", "RPM", "IPR", "FICM_M", "BATT"],
"driving": ["BOOST", "VGT", "EOT", "ECT", "EBP", "LOAD", "RPM", "IPR", "BATT"],
"vitals": ["ICP", "FICM_M", "FICM_L", "IPR", "BATT", "RPM", "ECT", "EOT",
"IAT", "VPCM"],
}