From 2aaa6e32a5fac457afddbc959d8bc29453019d22 Mon Sep 17 00:00:00 2001 From: Ryan Malloy Date: Fri, 13 Feb 2026 08:31:34 -0700 Subject: [PATCH] Rename library from AutoWire to K-Line Library dir: lib/AutoWire/ -> lib/KLine/ Site title, docs, CLAUDE.md, platformio.ini all updated. All 4 firmware environments build clean. --- CLAUDE.md | 6 +++--- docs/architecture.md | 4 ++-- docs/development-journal.md | 10 +++++----- firmware/lib/{AutoWire => KLine}/E46Codes.h | 0 firmware/lib/{AutoWire => KLine}/IbusEsp32.cpp | 0 firmware/lib/{AutoWire => KLine}/IbusEsp32.h | 0 firmware/lib/{AutoWire => KLine}/IbusHandler.cpp | 0 firmware/lib/{AutoWire => KLine}/IbusHandler.h | 0 firmware/lib/{AutoWire => KLine}/KLineObd2.cpp | 0 firmware/lib/{AutoWire => KLine}/KLineObd2.h | 0 .../lib/{AutoWire => KLine}/KLineTransport.cpp | 0 firmware/lib/{AutoWire => KLine}/KLineTransport.h | 0 firmware/lib/{AutoWire => KLine}/Obd2Pids.h | 0 firmware/lib/{AutoWire => KLine}/RingBuffer.cpp | 0 firmware/lib/{AutoWire => KLine}/RingBuffer.h | 0 firmware/lib/{AutoWire => KLine}/library.json | 2 +- firmware/platformio.ini | 2 +- site/Makefile | 2 +- site/astro.config.mjs | 2 +- site/package.json | 2 +- .../content/docs/guides/development-journal.mdx | 10 +++++----- site/src/content/docs/guides/getting-started.mdx | 6 +++--- site/src/content/docs/index.mdx | 6 +++--- site/src/content/docs/reference/architecture.mdx | 4 ++-- site/src/content/docs/reference/obd2-protocol.mdx | 4 ++-- .../docs/reference/vehicle-compatibility.mdx | 14 +++++++------- site/src/styles/custom.css | 2 +- 27 files changed, 38 insertions(+), 38 deletions(-) rename firmware/lib/{AutoWire => KLine}/E46Codes.h (100%) rename firmware/lib/{AutoWire => KLine}/IbusEsp32.cpp (100%) rename firmware/lib/{AutoWire => KLine}/IbusEsp32.h (100%) rename firmware/lib/{AutoWire => KLine}/IbusHandler.cpp (100%) rename firmware/lib/{AutoWire => KLine}/IbusHandler.h (100%) rename firmware/lib/{AutoWire => KLine}/KLineObd2.cpp (100%) rename firmware/lib/{AutoWire => KLine}/KLineObd2.h (100%) rename firmware/lib/{AutoWire => KLine}/KLineTransport.cpp (100%) rename firmware/lib/{AutoWire => KLine}/KLineTransport.h (100%) rename firmware/lib/{AutoWire => KLine}/Obd2Pids.h (100%) rename firmware/lib/{AutoWire => KLine}/RingBuffer.cpp (100%) rename firmware/lib/{AutoWire => KLine}/RingBuffer.h (100%) rename firmware/lib/{AutoWire => KLine}/library.json (96%) diff --git a/CLAUDE.md b/CLAUDE.md index 3862dc6..c701288 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,4 +1,4 @@ -# AutoWire — Multi-Protocol Automotive Bus Interface (ESP32) +# K-Line — Multi-Protocol Automotive Bus Interface (ESP32) ## Attribution @@ -315,7 +315,7 @@ PlatformIO project in `firmware/` — builds for ESP32, ESP32-C3, ESP32-S3, and firmware/ ├── platformio.ini # 4 environments (BMW sniffer x3, OBD-II scanner) ├── include/config.h # Pin defaults + protocol constants (IBUS_* and KLINE_*) -├── lib/AutoWire/ +├── lib/KLine/ │ ├── library.json # PlatformIO lib metadata (v2026.02.13) │ ├── KLineTransport.h / .cpp # Hardware transport (UART, ISR, ring buffers, idle detect) │ ├── IbusHandler.h / .cpp # BMW I/K-Bus FSM (FIND_SOURCE -> checksum validation) @@ -408,7 +408,7 @@ pio device monitor # serial monitor at 115200 5. **SPICE simulation validated** — both RX and TX paths simulated with LTspice PC817 model at 9600 baud. RX path gives clean 0-3.13V logic at 3.3V VCC. TX path confirms signal inversion and 0.27V bus LOW on 1kΩ bus. Rise/fall times within 9600 baud budget. 6. **R2 optimized for 3.3V** — parameter sweeps across R2, bus impedance, and CTR grade identified R2=220Ω (down from 470Ω) as the fix for 3.3V ESP32. Doubles LED drive current to 9.71mA, supports bus pull-ups down to ~530Ω. 7. **IbusSerial ported to ESP32** — PlatformIO project with IbusEsp32 library. Bus sniffer sketch included. Builds for ESP32, ESP32-C3, ESP32-S3. Code reviewed for ISR safety, race conditions, buffer overflows. -8. **Multi-protocol refactor (AutoWire)** — split monolithic IbusEsp32 into KLineTransport (hardware) + IbusHandler (BMW FSM). Library renamed from IbusEsp32 to AutoWire. IbusEsp32 preserved as backward-compatible facade. Zero changes to existing BMW sniffer sketch. +8. **Multi-protocol refactor (K-Line)** — split monolithic IbusEsp32 into KLineTransport (hardware) + IbusHandler (BMW FSM). Library renamed from IbusEsp32 to KLine. IbusEsp32 preserved as backward-compatible facade. Zero changes to existing BMW sniffer sketch. 9. **OBD-II K-line support** — KLineObd2 handler with ISO 9141 5-baud slow init, ISO 14230 fast init (TiniPulse), request/response with half-duplex echo clearing. Obd2Pids.h with ~20 common PID decode helpers (SAE J1979). Scanner example sketch polls RPM, speed, coolant temp, throttle, voltage. 10. **OBD-II code review + hardening** — Apollo code review identified 4 critical and 7 important issues. All fixed: proper UART pin detach (`pinMatrixOutDetach`), timeout underflow guards, checksum validation, echo verification, RX buffer flush after init, structural ISO 14230 frame parsing, negative response handling, TesterPresent keepalive, and session re-initialization. diff --git a/docs/architecture.md b/docs/architecture.md index 3ae5e05..ec2363a 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -1,4 +1,4 @@ -# AutoWire Library Architecture +# K-Line Library Architecture Multi-protocol automotive bus library for ESP32. Handles BMW I/K-Bus and OBD-II K-line (ISO 9141 / ISO 14230) over a shared single-wire bus interface with PC817 optocoupler isolation. @@ -63,7 +63,7 @@ IbusHandler and KLineObd2 sit as parallel protocol handlers on top of a shared K ## File Inventory ``` -firmware/lib/AutoWire/ +firmware/lib/KLine/ library.json PlatformIO metadata (v2026.02.13) KLineTransport.h/cpp Shared hardware layer IbusHandler.h/cpp BMW I/K-Bus protocol diff --git a/docs/development-journal.md b/docs/development-journal.md index 91c485c..bbca645 100644 --- a/docs/development-journal.md +++ b/docs/development-journal.md @@ -255,10 +255,10 @@ This was the big build session. Three phases, done sequentially because each dep The rule here was: extract KLineTransport and IbusHandler from the existing IbusEsp32 code, rewire everything, and verify that all three ESP32 environments still build with zero changes to `main.cpp`. If the sniffer sketch works identically before and after, the refactor is clean. -Created `lib/AutoWire/` with the new file structure: +Created `lib/KLine/` with the new file structure: ``` -lib/AutoWire/ +lib/KLine/ KLineTransport.h / .cpp <-- extracted from IbusEsp32 IbusHandler.h / .cpp <-- extracted from IbusEsp32 IbusEsp32.h / .cpp <-- now just a facade @@ -338,7 +338,7 @@ All four environments (3 BMW sniffer + 1 OBD-II scanner) built clean. ### Phase 3: Documentation -Updated `library.json` metadata with the new library name (AutoWire) and file list. Updated CLAUDE.md with the architecture diagram, new file structure, OBD-II section, and the build instructions for the fourth environment. Not glamorous work but someone has to do it. +Updated `library.json` metadata with the new library name (K-Line) and file list. Updated CLAUDE.md with the architecture diagram, new file structure, OBD-II section, and the build instructions for the fourth environment. Not glamorous work but someone has to do it. --- @@ -448,10 +448,10 @@ Looking back across all four sessions, a few things stand out: As of the last commit, the project has: - Two validated SPICE netlists (RX and TX paths) plus four parameter sweep netlists -- A multi-protocol PlatformIO library (AutoWire) that builds for ESP32, ESP32-C3, and ESP32-S3 +- A multi-protocol PlatformIO library (K-Line) that builds for ESP32, ESP32-C3, and ESP32-S3 - BMW I/K-Bus sniffer sketch (tested in simulation, not yet on hardware) - OBD-II K-line scanner sketch (code-reviewed, not yet on hardware) -- 13 source files in the AutoWire library +- 13 source files in the K-Line library - 4 PlatformIO build environments, all clean What hasn't been done yet: breadboard prototype, loopback testing, bench testing with a 12V supply, and actual vehicle testing. That's the next chapter. diff --git a/firmware/lib/AutoWire/E46Codes.h b/firmware/lib/KLine/E46Codes.h similarity index 100% rename from firmware/lib/AutoWire/E46Codes.h rename to firmware/lib/KLine/E46Codes.h diff --git a/firmware/lib/AutoWire/IbusEsp32.cpp b/firmware/lib/KLine/IbusEsp32.cpp similarity index 100% rename from firmware/lib/AutoWire/IbusEsp32.cpp rename to firmware/lib/KLine/IbusEsp32.cpp diff --git a/firmware/lib/AutoWire/IbusEsp32.h b/firmware/lib/KLine/IbusEsp32.h similarity index 100% rename from firmware/lib/AutoWire/IbusEsp32.h rename to firmware/lib/KLine/IbusEsp32.h diff --git a/firmware/lib/AutoWire/IbusHandler.cpp b/firmware/lib/KLine/IbusHandler.cpp similarity index 100% rename from firmware/lib/AutoWire/IbusHandler.cpp rename to firmware/lib/KLine/IbusHandler.cpp diff --git a/firmware/lib/AutoWire/IbusHandler.h b/firmware/lib/KLine/IbusHandler.h similarity index 100% rename from firmware/lib/AutoWire/IbusHandler.h rename to firmware/lib/KLine/IbusHandler.h diff --git a/firmware/lib/AutoWire/KLineObd2.cpp b/firmware/lib/KLine/KLineObd2.cpp similarity index 100% rename from firmware/lib/AutoWire/KLineObd2.cpp rename to firmware/lib/KLine/KLineObd2.cpp diff --git a/firmware/lib/AutoWire/KLineObd2.h b/firmware/lib/KLine/KLineObd2.h similarity index 100% rename from firmware/lib/AutoWire/KLineObd2.h rename to firmware/lib/KLine/KLineObd2.h diff --git a/firmware/lib/AutoWire/KLineTransport.cpp b/firmware/lib/KLine/KLineTransport.cpp similarity index 100% rename from firmware/lib/AutoWire/KLineTransport.cpp rename to firmware/lib/KLine/KLineTransport.cpp diff --git a/firmware/lib/AutoWire/KLineTransport.h b/firmware/lib/KLine/KLineTransport.h similarity index 100% rename from firmware/lib/AutoWire/KLineTransport.h rename to firmware/lib/KLine/KLineTransport.h diff --git a/firmware/lib/AutoWire/Obd2Pids.h b/firmware/lib/KLine/Obd2Pids.h similarity index 100% rename from firmware/lib/AutoWire/Obd2Pids.h rename to firmware/lib/KLine/Obd2Pids.h diff --git a/firmware/lib/AutoWire/RingBuffer.cpp b/firmware/lib/KLine/RingBuffer.cpp similarity index 100% rename from firmware/lib/AutoWire/RingBuffer.cpp rename to firmware/lib/KLine/RingBuffer.cpp diff --git a/firmware/lib/AutoWire/RingBuffer.h b/firmware/lib/KLine/RingBuffer.h similarity index 100% rename from firmware/lib/AutoWire/RingBuffer.h rename to firmware/lib/KLine/RingBuffer.h diff --git a/firmware/lib/AutoWire/library.json b/firmware/lib/KLine/library.json similarity index 96% rename from firmware/lib/AutoWire/library.json rename to firmware/lib/KLine/library.json index 63544e9..549a4eb 100644 --- a/firmware/lib/AutoWire/library.json +++ b/firmware/lib/KLine/library.json @@ -1,5 +1,5 @@ { - "name": "AutoWire", + "name": "KLine", "version": "2026.02.13", "description": "Multi-protocol automotive bus library for ESP32 — BMW I/K-Bus + OBD-II K-line", "keywords": ["bmw", "ibus", "kbus", "obd2", "kline", "iso9141", "iso14230", "optocoupler", "pc817", "esp32", "e46", "ford"], diff --git a/firmware/platformio.ini b/firmware/platformio.ini index 2dfb206..6a2b158 100644 --- a/firmware/platformio.ini +++ b/firmware/platformio.ini @@ -1,4 +1,4 @@ -; AutoWire — Multi-protocol automotive bus interface (ESP32) +; K-Line — Multi-protocol automotive bus interface (ESP32) ; BMW I/K-Bus (optocoupler) + OBD-II K-line (transistor/optocoupler) ; Based on muki01/I-K_Bus (MIT), ported for ESP32 with R2=220 fix diff --git a/site/Makefile b/site/Makefile index e8bf9d0..0688d6a 100644 --- a/site/Makefile +++ b/site/Makefile @@ -1,7 +1,7 @@ .PHONY: help build up down logs restart dev prod clean rebuild help: - @echo "AutoWire K-line Docs" + @echo "K-Line Docs" @echo "" @echo "Usage:" @echo " make build - Build Docker images" diff --git a/site/astro.config.mjs b/site/astro.config.mjs index 1d91f48..dde4264 100644 --- a/site/astro.config.mjs +++ b/site/astro.config.mjs @@ -7,7 +7,7 @@ export default defineConfig({ devToolbar: { enabled: false }, integrations: [ starlight({ - title: 'AutoWire', + title: 'K-Line', description: 'BMW I/K-Bus + OBD-II K-line interface for ESP32 with PC817 optocoupler isolation', social: [ { icon: 'codeberg', label: 'Source', href: 'https://git.supported.systems/warehack.ing/i-k-bus-board' }, diff --git a/site/package.json b/site/package.json index 9ec16f0..ab47e50 100644 --- a/site/package.json +++ b/site/package.json @@ -1,7 +1,7 @@ { "name": "k-line-docs", "version": "1.0.0", - "description": "AutoWire: BMW I/K-Bus + OBD-II K-line interface documentation", + "description": "K-Line: BMW I/K-Bus + OBD-II K-line interface documentation", "type": "module", "scripts": { "dev": "astro dev", diff --git a/site/src/content/docs/guides/development-journal.mdx b/site/src/content/docs/guides/development-journal.mdx index 4df99c3..98c06ca 100644 --- a/site/src/content/docs/guides/development-journal.mdx +++ b/site/src/content/docs/guides/development-journal.mdx @@ -258,10 +258,10 @@ This was the big build session. Three phases, done sequentially because each dep The rule here was: extract KLineTransport and IbusHandler from the existing IbusEsp32 code, rewire everything, and verify that all three ESP32 environments still build with zero changes to `main.cpp`. If the sniffer sketch works identically before and after, the refactor is clean. -Created `lib/AutoWire/` with the new file structure: +Created `lib/KLine/` with the new file structure: ``` -lib/AutoWire/ +lib/KLine/ KLineTransport.h / .cpp <-- extracted from IbusEsp32 IbusHandler.h / .cpp <-- extracted from IbusEsp32 IbusEsp32.h / .cpp <-- now just a facade @@ -341,7 +341,7 @@ All four environments (3 BMW sniffer + 1 OBD-II scanner) built clean. ### Phase 3: Documentation -Updated `library.json` metadata with the new library name (AutoWire) and file list. Updated CLAUDE.md with the architecture diagram, new file structure, OBD-II section, and the build instructions for the fourth environment. Not glamorous work but someone has to do it. +Updated `library.json` metadata with the new library name (K-Line) and file list. Updated CLAUDE.md with the architecture diagram, new file structure, OBD-II section, and the build instructions for the fourth environment. Not glamorous work but someone has to do it. --- @@ -451,10 +451,10 @@ Looking back across all four sessions, a few things stand out: As of the last commit, the project has: - Two validated SPICE netlists (RX and TX paths) plus four parameter sweep netlists -- A multi-protocol PlatformIO library (AutoWire) that builds for ESP32, ESP32-C3, and ESP32-S3 +- A multi-protocol PlatformIO library (K-Line) that builds for ESP32, ESP32-C3, and ESP32-S3 - BMW I/K-Bus sniffer sketch (tested in simulation, not yet on hardware) - OBD-II K-line scanner sketch (code-reviewed, not yet on hardware) -- 13 source files in the AutoWire library +- 13 source files in the K-Line library - 4 PlatformIO build environments, all clean What hasn't been done yet: breadboard prototype, loopback testing, bench testing with a 12V supply, and actual vehicle testing. That's the next chapter. diff --git a/site/src/content/docs/guides/getting-started.mdx b/site/src/content/docs/guides/getting-started.mdx index 0e7e4d9..7ec2ca5 100644 --- a/site/src/content/docs/guides/getting-started.mdx +++ b/site/src/content/docs/guides/getting-started.mdx @@ -1,9 +1,9 @@ --- title: Getting Started -description: "Building the AutoWire firmware with PlatformIO" +description: "Building the K-Line firmware with PlatformIO" --- -AutoWire is a multi-protocol automotive bus library for ESP32. It supports BMW I/K-Bus (9600 baud, 8E1, optocoupler isolated) and OBD-II K-line (10400 baud, 8N1, ISO 9141/14230). The firmware ships with two sketches: a BMW bus sniffer and an OBD-II scanner. +K-Line is a multi-protocol automotive bus library for ESP32. It supports BMW I/K-Bus (9600 baud, 8E1, optocoupler isolated) and OBD-II K-line (10400 baud, 8N1, ISO 9141/14230). The firmware ships with two sketches: a BMW bus sniffer and an OBD-II scanner. ## Prerequisites @@ -112,7 +112,7 @@ Set `KLINE_TX_INVERT=1` for PC817 optocoupler circuits, `0` for direct transisto firmware/ ├── platformio.ini # 4 environments (BMW sniffer x3, OBD-II scanner) ├── include/config.h # Pin defaults + protocol constants -├── lib/AutoWire/ +├── lib/KLine/ │ ├── library.json # PlatformIO lib metadata │ ├── KLineTransport.h/.cpp # Shared hardware layer (UART, ISR, ring buffers) │ ├── IbusHandler.h/.cpp # BMW I/K-Bus protocol FSM diff --git a/site/src/content/docs/index.mdx b/site/src/content/docs/index.mdx index b4f1682..eca30cc 100644 --- a/site/src/content/docs/index.mdx +++ b/site/src/content/docs/index.mdx @@ -1,5 +1,5 @@ --- -title: AutoWire +title: K-Line description: BMW I/K-Bus + OBD-II K-line interface for ESP32 with PC817 optocoupler isolation template: splash hero: @@ -24,11 +24,11 @@ import { Card, CardGrid } from '@astrojs/starlight/components'; An ESP32-based interface board for talking to BMW's proprietary body/instrumentation bus (I-Bus and K-Bus) and OBD-II K-line diagnostic ports. Uses PC817 optocouplers for galvanic isolation from the vehicle's 12V electrical system. -The firmware library — **AutoWire** — handles both protocols through a shared transport layer, with separate protocol handlers for BMW's multi-master bus and OBD-II's master/slave diagnostic sessions. +The firmware library — **K-Line** — handles both protocols through a shared transport layer, with separate protocol handlers for BMW's multi-master bus and OBD-II's master/slave diagnostic sessions. - BMW I/K-Bus (9600 baud, 8E1, XOR checksum) and OBD-II K-line (10400 baud, 8N1, mod256 checksum) share the same physical layer but have completely different framing and initialization. AutoWire handles both. + BMW I/K-Bus (9600 baud, 8E1, XOR checksum) and OBD-II K-line (10400 baud, 8N1, mod256 checksum) share the same physical layer but have completely different framing and initialization. K-Line handles both. Every circuit path simulated in LTspice before soldering. Three parameter sweeps identified the R2=220 ohm fix for 3.3V ESP32 compatibility. Six netlists document the full operating envelope. diff --git a/site/src/content/docs/reference/architecture.mdx b/site/src/content/docs/reference/architecture.mdx index f3cd633..3fd902a 100644 --- a/site/src/content/docs/reference/architecture.mdx +++ b/site/src/content/docs/reference/architecture.mdx @@ -1,6 +1,6 @@ --- title: Firmware Architecture -description: "AutoWire library composition pattern and concurrency model" +description: "K-Line library composition pattern and concurrency model" --- Multi-protocol automotive bus library for ESP32. Handles BMW I/K-Bus and OBD-II K-line (ISO 9141 / ISO 14230) over a shared single-wire bus interface with PC817 optocoupler isolation. @@ -66,7 +66,7 @@ IbusHandler and KLineObd2 sit as parallel protocol handlers on top of a shared K ## File Inventory ``` -firmware/lib/AutoWire/ +firmware/lib/KLine/ library.json PlatformIO metadata (v2026.02.13) KLineTransport.h/cpp Shared hardware layer IbusHandler.h/cpp BMW I/K-Bus protocol diff --git a/site/src/content/docs/reference/obd2-protocol.mdx b/site/src/content/docs/reference/obd2-protocol.mdx index 7761677..91caf52 100644 --- a/site/src/content/docs/reference/obd2-protocol.mdx +++ b/site/src/content/docs/reference/obd2-protocol.mdx @@ -5,7 +5,7 @@ description: "ISO 9141/14230 initialization, PID requests, and session managemen OBD-II over K-line (ISO 9141-2 and ISO 14230 / KWP2000) is a standard vehicle diagnostic protocol. Unlike BMW I/K-Bus which is multi-master and always-on, K-line is master/slave -- the tester (ESP32) initiates all communication, and the ECU only responds when asked. -The AutoWire library implements K-line support through `KLineObd2`, which handles initialization, request/response framing, echo clearing, checksum validation, and session keepalive. +The K-Line library implements K-line support through `KLineObd2`, which handles initialization, request/response framing, echo clearing, checksum validation, and session keepalive. ## Protocol Parameters @@ -204,7 +204,7 @@ PID `0x00` returns a 4-byte bitmask indicating which PIDs `0x01` through `0x20` | Vehicle Info | `0x09` | VIN, calibration IDs, etc. | | Permanent DTCs | `0x0A` | Permanent DTCs (cannot be cleared) | -The current AutoWire implementation handles Mode 01 (current data) PID requests. Modes 03 and 04 (DTC read/clear) are planned. +The current K-Line implementation handles Mode 01 (current data) PID requests. Modes 03 and 04 (DTC read/clear) are planned. ## Session Management diff --git a/site/src/content/docs/reference/vehicle-compatibility.mdx b/site/src/content/docs/reference/vehicle-compatibility.mdx index a375e27..7d7c1bc 100644 --- a/site/src/content/docs/reference/vehicle-compatibility.mdx +++ b/site/src/content/docs/reference/vehicle-compatibility.mdx @@ -5,7 +5,7 @@ description: "Which vehicles use BMW I/K-Bus and OBD-II K-line protocols, organi import { Aside, Tabs, TabItem } from '@astrojs/starlight/components'; -AutoWire supports two distinct protocols that share the same physical layer (single-wire K-line) but target completely different vehicle systems. This page documents which vehicles use which protocol — and when manufacturers transitioned away from K-line to CAN bus. +K-Line supports two distinct protocols that share the same physical layer (single-wire K-line) but target completely different vehicle systems. This page documents which vehicles use which protocol — and when manufacturers transitioned away from K-line to CAN bus. ## BMW I-Bus and K-Bus @@ -90,7 +90,7 @@ The following tables cover which manufacturers used K-line protocols and when th #### Ford (Europe) -European Fords are completely different from US Fords — they use ISO 9141 / KWP2000 over K-line, not J1850 PWM. This is the primary target for AutoWire's OBD-II mode alongside the [Tucker k-line-board](https://git.supported.systems/warehack.ing/k-line-board) project. +European Fords are completely different from US Fords — they use ISO 9141 / KWP2000 over K-line, not J1850 PWM. This is the primary target for K-Line's OBD-II mode alongside the [Tucker k-line-board](https://git.supported.systems/warehack.ing/k-line-board) project. | Model | Generation | Years | Protocol | Notes | |-------|-----------|-------|----------|-------| @@ -271,7 +271,7 @@ Chrysler used ISO 9141-2 almost exclusively for OBD-II diagnostics before the 20 #### Ford (US Market) -US-market Fords used J1850 PWM — a different protocol that AutoWire does not support. Pin 2 on the OBD-II connector instead of pin 7. +US-market Fords used J1850 PWM — a different protocol that K-Line does not support. Pin 2 on the OBD-II connector instead of pin 7.