"dumb" interfaces means any cable with very simple circuitry limited to level-shifting. A USB -> FT232 -> optocoupler -> OBD cable is a dumb interface. A RS232 -> ELM327 -> OBD cable is NOT a dumb interface. A Bluetooth -> CP2103 or FT232 -> OBD cable is a dumb interface. These are dumb interfaces : http://pinoutsguide.com/CarElectronics/obd2_simple_cable_pinout.shtml http://jeff.noxon.cc/2013/05/18/opendiag-obd-ii-schematics-pcb-layout/ If it says ELM327 or ELM*** anywhere, it's NOT a dumb interface !! (Remember : logic 1, on RXD and TXD, is negative voltage.) (However, signals like RTS are the opposite : "set RTS" means positive voltage!) DUMB interface with optocouplers : a) typical interface supporting K + L lines : L is pulled down (=0) when RTS is set (>5V). K is driven by TXD with the correct polarity ( TXD="1" = negative voltage => K=Vbat="1") K also drives RXD (half-duplex,so any data sent on TXD will be seen on RXD !) similarly; In order to receive data on RXD, RTS must be CLEARED (neg. voltage) DTR is a "pull-up" on RXD and needs to be SET permanently (pos. voltage) So after messing with the L line using RTS, it's important to clear RTS afterwards. b) typical simplified interface, K-line only : K is driven by TXD with the correct polarity ( TXD="1" = neg voltage ==> K="1" = +Vb K also drives RXD (half-duplex ! So any data sent on TXD will be seen on RXD !) similarly; In order to receive data on RXD, RTS must always be CLEAR (neg. voltage) DTR is a "pull-up" on RXD so it needs to be always SET (pos. voltage) c) other simple interfaces with a different pattern : "set dumbopts" offers some options to cover non-standard configurations. It may be required to also invert the polarity of the L-line. I know of no interface that would need this, but the option is there. ************ Configurable options : (try "set dumbopts ?" for most recent list) use "set dumbopts [opts]" where [opts] is the addition of the desired flags: 1 : USE_LLINE : use if the L line (driven by RTS) is required for init. Interface must support this (VAGTOOL for example). 2 : CLEAR_DTR : use if your interface needs DTR to be always clear (neg. voltage). This is unusual. By default DTR will always be SET (pos. voltage) 4 : SET_RTS : use if your interface needs RTS to be always set (pos. voltage). This is unusual. By default RTS will always be CLEAR (neg. voltage) This option should not be used with USE_LLINE. 8 : MAN_BREAK : use to force manual 5bps transmission. Essential for most USB-serial bridges 16: LLINE_INV : Invert polarity of the L line. Use only if you set USE_LLINE, CLEAR_DTR and SET_RTS; 32: FAST_BREAK : use alternate iso14230 fastinit code. Instead of setting diag_tty_break for 25ms then waiting 25ms, this will send 0x00 at 360bps (==25ms) and wait a total of 50ms. 64: BLOCKDUPLEX : use message-based half duplex removal (if P4==0). ex. : "dumbopts 9" will set MAN_BREAK and USE_LLINE. Note : these options are ignored on any non-DUMB interfaces. ************ Troubleshooting dumb interfaces To aid with troubleshooting dumb interfaces, there is a special-purpose L0 driver called "DUMBT" (diag_l0_dumbtest.c). This implements a few low-level tests such as - sending fast or slow pulses on TXD (useful to check K-line polarity, levels and timing) - sending slow pulses on RTS and DTR (useful to check L-line polarity and/or correct level-shifting if the interface is powered by RTS + DTR) To access these tests there is an "l0test" command in the "debug" sub-menu. example of a troubleshooting session : (with no car connected !) freediag>set interface dumbt freediag>set port /dev/ttyUSB0 freediag>set dumbopts 8 freediag>debug freediag/debug>l0test ? (... list of available test) freediag/debug>l0test 1 (...)