-Linux SocketCAN driver for ELM327
+.. SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
+
+ELM327 driver for Linux SocketCAN
==================================
+Out-of-tree version
+--------------------
+
+This is the non-upstreamed version of the elmcan driver.
+Please see out-of-tree.rst for compilation/usage hints.
+
+
+
Authors
--------
Motivation
-----------
-CAN adapters are expensive, few, and far between.
-ELM327 interfaces are cheap and plentiful.
-
This driver aims to lower the initial cost for hackers interested in
working with CAN buses.
+CAN adapters are expensive, few, and far between.
+ELM327 interfaces are cheap and plentiful.
+Let's use ELM327s as CAN adapters.
+
Introduction
-------------
This driver is an effort to turn abundant ELM327 based OBD interfaces
-into full-fledged (as far as possible) CAN interfaces.
+into full fledged (as far as possible) CAN interfaces.
-Since the ELM327 was never meant to be a stand-alone CAN controller,
-the driver has to switch between its modes asa quickly as possible in
-order to approximate full-duplex operation.
+Since the ELM327 was never meant to be a stand alone CAN controller,
+the driver has to switch between its modes as quickly as possible in
+order to fake full-duplex operation.
-As such, elmcan is a best-effort driver. However, this is more than
+As such, elmcan is a best effort driver. However, this is more than
enough to implement simple request-response protocols (such as OBD II),
and to monitor broadcast messages on a bus (such as in a vehicle).
------------------------------------
Use a terminal program to attach to the controller.
+The default settings are 38400 baud/s, 8 data bits, no parity, 1 stopbit.
After issuing the "``AT WS``" command, the controller will respond with
its version::
>
+Note that clones may claim to be any version they like.
+It is not indicative of their actual feature set.
+
How to attach the line discipline
-Module parameters
-------------------
-
-- ``accept_flaky_uart`` - Try to live with a bad controller or UART line
-
- Some adapters and/or their connection are unreliable. Enable this
- option to try and work around the situation. This is a best-effort
- workaround, so undefined behavior will likely occur sooner or later.
-
- LOAD TIME::
-
- module/kernel parameter: accept_flaky_uart=[0|1]
-
-
-
Known limitations of the controller
------------------------------------
-- Clone "v1.5" devices
+- Clone devices ("v1.5" and others)
Sending RTR frames is not supported and will be dropped silently.
- All versions
- No automatic full duplex operation is supported. The driver will
- switch between input/output mode as quickly as possible.
+ No full duplex operation is supported. The driver will switch
+ between input/output mode as quickly as possible.
The length of outgoing RTR frames cannot be set. In fact, some
clones (tested with one identifying as "``v1.5``") are unable to
-To Do list for future development
-----------------------------------
+A note on CAN bus termination
+------------------------------
-- DMA capable rx/tx buffers
+Your adapter may have resistors soldered in which are meant to terminate
+the bus. This is correct when it is plugged into a OBD-II socket, but
+not helpful when trying to tap into the middle of an existing CAN bus.
-- flushing of ``tx_work`` is too late in ``ldisc_close()``
+If communications don't work with the adapter connected, check for the
+termination resistors on its PCB and try removing them.