■ obd.smooker.org

Linux reverse engineering of the Autocom CDP+ / Delphi DS150E ASCII diagnostic protocol
GPL-3.0 first public RE USB · CAN · UDS 2026-04-06

A small open-source toolkit for sniffing, decoding and (eventually) replaying the proprietary text-based protocol used by the popular Autocom CDP+ diagnostic dongle (also sold as Delphi DS150E and many clones, USB ID 0403:d6da). The internal STM32 talks a custom *cmd_args\r ASCII protocol over an FTDI bulk pipe — fully readable, no obfuscation, but until now nobody had publicly documented it for Linux.

Project

Tools

filepurpose
sniff.c200-line C/libpcap USB sniffer, full payload, optional pcap output
sniff_full.pyPython alternative — binary usbmon, no libpcap dependency
autocom_sniff.shbash quick-look — text-mode usbmon (32-byte truncated, see below)
decode.pyparses usbmon text dump into readable →/← format
ANALYSE.mdfull protocol analysis: commands, responses, ECU param map
gen_report.pypslib-based diagnostic PDF report generator

The protocol, in one paragraph

*<cmd>[_<arg>[_<arg>…]]\r          host  → dongle
*<resp>[ <data>…]\r                  dongle → host

Start byte *, terminator \r, fields separated by _. The dongle wraps CAN frames (and other low-level protocol frames) inside this text envelope.

Confirmed commands

cmdmeaning
*200 / *201 / *20Aget serial / firmware / device name (returns 100251 / 1622 / CDP+)
*203battery voltage in mV/10 (e.g. *1 1366 = 13.66 V)
*60b / *60bcinit handshake
*668_<bus>_<rate>_<txid>_<rxid>_…configure CAN bus (500 kbps, 7E0/7E8 OBD-II)
*606<slot>_<canid>_<8 bytes>_<chk>\rperiodic CAN slot (UDS Tester Present keepalive)
*608_21_<XX>read ECU parameter at index XX
*97 XX <bytes>response to *608_21_XX

First subject: Mitsubishi ASX 1.8 DiD (4N13)

The first capture was made on a 2014 Mitsubishi ASX with the 4N13 1.8-litre diesel, during an injector centering operation in the original Windows software (running inside a Linux KVM with USB passthrough). 119,000 USB packets in ~12 minutes.

56 unique ECU parameter indices were polled by the "read all parameters" function in 5–6 seconds, giving us a near-complete view of the live data set this ECU exposes.

Highlight: injector quantity correction (B0..B9)

Ten parameters in the 0xB0–0xB9 range, each returning a 4-byte field decoded as two 16-bit big-endian values. Pattern, value range and timing all match a textbook injector quantity correction table (10 work points × 2 values, current vs target). Captured live during a real centering procedure.

WPraw bytesval 1val 2Δ
B001EB 01E2491482−9
B101DF 01D5479469−10
B201DA 01DA4744740
B301D1 01CE465462−3
B401D0 01CA464458−6
B501D3 01C8467456−11
B601CA 01CB458459+1
B701D4 01CE468462−6
B801B8 01C4440452+12
B901C9 01C2457450−7

Mockups

Dashboard mockup
Dashboard — vehicle info, live telemetry gauges, 16×16 ECU parameter map (56/256 decoded).
Injector calibration mockup
Injector calibration — B0..B9 quantity correction bar chart with raw data table and stats.
Protocol monitor mockup
Protocol monitor — live USB feed with ASCII decoder side panel showing the *606 UDS TesterPresent slot.

⚠ Disclaimer

Reverse engineering for interoperability and educational purposes (EU Software Directive 2009/24/EC Art. 6). Not affiliated with Autocom, Delphi or any OEM. The CDP+ dongle uses internal relays to switch between automotive protocols and power lines — wrong commands can pull pins to 12 V where they shouldn't be and damage the dongle, OBD connector or ECU. Replay only byte-perfect captured sequences. Use at your own risk.

Roadmap