Use can_change_mtu() instead of hand-made function
[elmcan.git] / readme.rst
index 2023d07ab98b0de75b679decd308f3102a48e307..f05bb635f404e0427245a37f4fa59f2ca5a8edd8 100644 (file)
@@ -4,7 +4,7 @@ Linux SocketCAN driver for ELM327
 Authors
 --------
 
-Max Staudt <elmcan@enpas.org>
+Max Staudt <max-linux@enpas.org>
 
 
 
@@ -26,7 +26,7 @@ This driver is an effort to turn abundant ELM327 based OBD 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
+the driver has to switch between its modes as quickly as possible in
 order to approximate full-duplex operation.
 
 As such, elmcan is a best-effort driver. However, this is more than
@@ -43,6 +43,13 @@ known limitations in older controllers and clones.
 
 
 
+Requirements
+-------------
+
+This requires Linux 4.11 (for 431af779256c), and has been tested on 4.19.
+
+
+
 Data sheet
 -----------
 
@@ -92,6 +99,21 @@ sheet. This needs to be done before attaching 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
 ------------------------------------
 
@@ -241,8 +263,8 @@ For this to function, the controller must be configured for 11 bit CAN
 ID sending mode (using "``AT PB``", see code or datasheet).
 
 
-Once a frame has been sent and wait-for-reply mode is on (ATR1,
-configured on listen-only=off), or when the reply timeout expires and
+Once a frame has been sent and wait-for-reply mode is on (``ATR1``,
+configured on ``listen-only=off``), or when the reply timeout expires and
 the driver sets the controller into monitoring mode (``ATMA``), the ELM327
 will send one line for each received CAN frame, consisting of CAN ID,
 DLC, and data::
@@ -268,9 +290,48 @@ incomplete) data frame::
 
 
 
+Rationale behind the chosen configuration
+------------------------------------------
+
+``AT E1``
+  Echo on
+
+  We need this to be able to get a prompt reliably.
+
+``AT S1``
+  Spaces on
+
+  We need this to distinguish 11/29 bit CAN addresses received.
+
+  Note:
+  We can usually do this using the line length (odd/even),
+  but this fails if the line is not transmitted fully to
+  the host (BUFFER FULL).
+
+``AT D1``
+  DLC on
+
+  We need this to tell the "length" of RTR frames.
+
+
+
+A note on CAN bus termination
+------------------------------
+
+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.
+
+If communications don't work with the adapter connected, check for the
+termination resistors on its PCB and try removing them.
+
+
+
 To Do list for future development
 ----------------------------------
 
 - DMA capable rx/tx buffers
+  (is this relevant for this driver?)
 
 - flushing of ``tx_work`` is too late in ``ldisc_close()``
+  (is this still the case?)