Remove unused includes
[elmcan.git] / readme.rst
index 49116647ee3ca7af313e29559dbaa766917e9d80..359675bf084bfa4823ae175cb2dd711f317eebc9 100644 (file)
@@ -1,35 +1,46 @@
-Linux SocketCAN driver for ELM327
-==================================
+.. SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
+
+can327: ELM327 driver for Linux SocketCAN
+==========================================
+
+Out-of-tree version
+--------------------
+
+This is the non-upstreamed version of the can327 driver.
+Please see out-of-tree.rst for compilation/usage hints.
+
+
 
 Authors
 --------
 
-Max Staudt <elmcan@enpas.org>
+Max Staudt <max-linux@enpas.org>
 
 
 
 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, can327 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).
 
@@ -52,30 +63,14 @@ The official data sheets can be found at ELM electronics' home page:
 
 
 
-How to check the controller version
-------------------------------------
-
-Use a terminal program to attach to the controller.
-
-After issuing the "``AT WS``" command, the controller will respond with
-its version::
-
-    >AT WS
-
-
-    ELM327 v1.4b
-
-    >
-
-
-
 How to attach the line discipline
 ----------------------------------
 
 Every ELM327 chip is factory programmed to operate at a serial setting
 of 38400 baud/s, 8 data bits, no parity, 1 stopbit.
 
-The line discipline can be attached on a command prompt as follows::
+If you have kept this default configuration, the line discipline can
+be attached on a command prompt as follows::
 
     sudo ldattach \
            --debug \
@@ -84,96 +79,46 @@ The line discipline can be attached on a command prompt as follows::
            --noparity \
            --onestopbit \
            --iflag -ICRNL,INLCR,-IXOFF \
-           26 \
+           29 \
            /dev/ttyUSB0
 
 To change the ELM327's serial settings, please refer to its data
 sheet. This needs to be done before attaching the line discipline.
 
+Once the ldisc is attached, the CAN interface starts out unconfigured.
+Set the speed before starting it::
 
+    # The interface needs to be down to change parameters
+    sudo ip link set can0 down
+    sudo ip link set can0 type can bitrate 500000
+    sudo ip link set can0 up
 
-Known limitations of the controller
-------------------------------------
-
-- All versions
-
-  No automatic 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
-  send RTR frames at all.
-
-  We don't have a way to get real-time notifications on CAN errors.
-  While there is a command (``AT CS``) to retrieve some basic stats,
-  we don't poll it as it would force us to interrupt reception mode.
-
-
-- Versions prior to 1.4b
-
-  These versions do not send CAN ACKs when in monitoring mode (AT MA).
-  However, they do send ACKs while waiting for a reply immediately
-  after sending a frame. The driver maximizes this time to make the
-  controller as useful as possible.
-
-  Starting with version 1.4b, the ELM327 supports the "``AT CSM``"
-  command, and the "listen-only" CAN option will take effect.
-
-
-- Versions prior to 1.4
+500000 bit/s is a common rate for OBD-II diagnostics.
+If you're connecting straight to a car's OBD port, this is the speed
+that most cars (but not all!) expect.
 
-  These chips do not support the "``AT PB``" command, and thus cannot
-  change bitrate or SFF/EFF mode on-the-fly. This will have to be
-  programmed by the user before attaching the line discipline. See the
-  data sheet for details.
-
-
-- Versions prior to 1.3
-
-  These chips cannot be used at all with elmcan. They do not support
-  the "``AT D1``", which is necessary to avoid parsing conflicts on
-  incoming data, as well as distinction of RTR frame lengths.
-
-  Specifically, this allows for easy distinction of SFF and EFF
-  frames, and to check whether frames are complete. While it is possible
-  to deduce the type and length from the length of the line the ELM327
-  sends us, this method fails when the ELM327's UART output buffer
-  overruns. It may abort sending in the middle of the line, which will
-  then be mistaken for something else.
+After this, you can set out as usual with candump, cansniffer, etc.
 
 
 
-Known limitations of the driver
---------------------------------
+How to check the controller version
+------------------------------------
 
-- No 8/7 timing.
+Use a terminal program to attach to the controller.
 
-  ELM327 can only set CAN bitrates that are of the form 500000/n, where
-  n is an integer divisor.
-  However there is an exception: With a separate flag, it may set the
-  speed to be 8/7 of the speed indicated by the divisor.
-  This mode is not currently implemented.
+After issuing the "``AT WS``" command, the controller will respond with
+its version::
 
-- No evaluation of command responses.
+    >AT WS
 
-  The ELM327 will reply with OK when a command is understood, and with ?
-  when it is not. The driver does not currently check this, and simply
-  assumes that the chip understands every command.
-  The driver is built such that functionality degrades gracefully
-  nevertheless. See the section on known limitations of the controller.
 
-- No use of hardware CAN ID filtering
+    ELM327 v1.4b
 
-  An ELM327's UART sending buffer will easily overflow on heavy CAN bus
-  load, resulting in the "``BUFFER FULL``" message. Using the hardware
-  filters available through "``AT CF xxx``" and "``AT CM xxx``" would be
-  helpful here, however SocketCAN does not currently provide a facility
-  to make use of such hardware features.
+    >
 
-- No BUS-OFF state and automatic restart
+Note that clones may claim to be any version they like.
+It is not indicative of their actual feature set.
 
-  We currently reset the ELM327 and generate error frames manually.
-  In the future, we may be able to use ``can_bus_off()`` and its siblings.
 
 
 
@@ -181,6 +126,8 @@ Communication example
 ----------------------
 
 This is a short and incomplete introduction on how to talk to an ELM327.
+It is here to guide understanding of the controller's and the driver's
+limitation (listed below) as well as manual testing.
 
 
 The ELM327 has two modes:
@@ -198,7 +145,7 @@ entered::
 
 The init script in the driver switches off several configuration options
 that are only meaningful in the original OBD scenario the chip is meant
-for, and are actually a hindrance for elmcan.
+for, and are actually a hindrance for can327.
 
 
 When a command is not recognized, such as by an older version of the
@@ -208,7 +155,7 @@ ELM327, a question mark is printed as a response instead of OK::
     ?
     >
 
-At present, elmcan does not evaluate this response and silently assumes
+At present, can327 does not evaluate this response and silently assumes
 that all commands are recognized. It is structured such that it will
 degrade gracefully when a command is unknown. See the sections above on
 known limitations for details.
@@ -224,26 +171,26 @@ dump::
     OK
     >
 
-The above interaction sends the frame "``DE AD BE EF 12 34 56 78``" with
-the 11 bit CAN ID ``0x123``.
-For this to function, the controller must be configured for 11 bit CAN
-ID sending mode (using "``AT PB``", see code or datasheet).
+The above interaction sends the SFF frame "``DE AD BE EF 12 34 56 78``"
+with (11 bit) CAN ID ``0x123``.
+For this to function, the controller must be configured for SFF 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
-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::
+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::
 
     123 8 DEADBEEF12345678
 
-For 29 bit CAN frames, the address format is slightly different, which
-elmcan uses to tell the two apart::
+For EFF (29 bit) CAN frames, the address format is slightly different,
+which can327 uses to tell the two apart::
 
     12 34 56 78 8 DEADBEEF12345678
 
-The ELM327 will receive both 11 and 29 bit frames - the current CAN
+The ELM327 will receive both SFF and EFF frames - the current CAN
 config (``ATPB``) does not matter.
 
 
@@ -257,23 +204,138 @@ incomplete) data frame::
 
 
 
-To Do list for future development
-----------------------------------
+Known limitations of the controller
+------------------------------------
+
+- Clone devices ("v1.5" and others)
+
+  Sending RTR frames is not supported and will be dropped silently.
+
+  Receiving RTR with DLC 8 will appear to be a regular frame with
+  the last received frame's DLC and payload.
+
+  "``AT CSM``" (CAN Silent Monitoring, i.e. don't send CAN ACKs) is
+  not supported, and is hard coded to ON. Thus, frames are not ACKed
+  while listening: "``AT MA``" (Monitor All) will always be "silent".
+  However, immediately after sending a frame, the ELM327 will be in
+  "receive reply" mode, in which it *does* ACK any received frames.
+  Once the bus goes silent, or an error occurs (such as BUFFER FULL),
+  or the receive reply timeout runs out, the ELM327 will end reply
+  reception mode on its own and can327 will fall back to "``AT MA``"
+  in order to keep monitoring the bus.
+
+  Other limitations may apply, depending on the clone and the quality
+  of its firmware.
+
+
+- All versions
+
+  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
+  send RTR frames at all.
+
+  We don't have a way to get real-time notifications on CAN errors.
+  While there is a command (``AT CS``) to retrieve some basic stats,
+  we don't poll it as it would force us to interrupt reception mode.
+
+
+- Versions prior to 1.4b
+
+  These versions do not send CAN ACKs when in monitoring mode (AT MA).
+  However, they do send ACKs while waiting for a reply immediately
+  after sending a frame. The driver maximizes this time to make the
+  controller as useful as possible.
+
+  Starting with version 1.4b, the ELM327 supports the "``AT CSM``"
+  command, and the "listen-only" CAN option will take effect.
+
+
+- Versions prior to 1.4
+
+  These chips do not support the "``AT PB``" command, and thus cannot
+  change bitrate or SFF/EFF mode on-the-fly. This will have to be
+  programmed by the user before attaching the line discipline. See the
+  data sheet for details.
+
+
+- Versions prior to 1.3
+
+  These chips cannot be used at all with can327. They do not support
+  the "``AT D1``" command, which is necessary to avoid parsing conflicts
+  on incoming data, as well as distinction of RTR frame lengths.
+
+  Specifically, this allows for easy distinction of SFF and EFF
+  frames, and to check whether frames are complete. While it is possible
+  to deduce the type and length from the length of the line the ELM327
+  sends us, this method fails when the ELM327's UART output buffer
+  overruns. It may abort sending in the middle of the line, which will
+  then be mistaken for something else.
+
+
+
+Known limitations of the driver
+--------------------------------
+
+- No 8/7 timing.
+
+  ELM327 can only set CAN bitrates that are of the form 500000/n, where
+  n is an integer divisor.
+  However there is an exception: With a separate flag, it may set the
+  speed to be 8/7 of the speed indicated by the divisor.
+  This mode is not currently implemented.
+
+- No evaluation of command responses.
+
+  The ELM327 will reply with OK when a command is understood, and with ?
+  when it is not. The driver does not currently check this, and simply
+  assumes that the chip understands every command.
+  The driver is built such that functionality degrades gracefully
+  nevertheless. See the section on known limitations of the controller.
+
+- No use of hardware CAN ID filtering
+
+  An ELM327's UART sending buffer will easily overflow on heavy CAN bus
+  load, resulting in the "``BUFFER FULL``" message. Using the hardware
+  filters available through "``AT CF xxx``" and "``AT CM xxx``" would be
+  helpful here, however SocketCAN does not currently provide a facility
+  to make use of such hardware features.
+
+
+
+Rationale behind the chosen configuration
+------------------------------------------
+
+``AT E1``
+  Echo on
+
+  We need this to be able to get a prompt reliably.
+
+``AT S1``
+  Spaces on
 
-- Handle ``write()`` error
+  We need this to distinguish 11/29 bit CAN addresses received.
 
-- Rename ``elm327_panic()``
+  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).
 
-- No auto-restart in ``elm327_panic()``?
+``AT D1``
+  DLC on
 
-- Stop current function when in ``elm327_panic()``
+  We need this to tell the "length" of RTR frames.
 
-- ``if (!elm)``: Race with ``ldisc_close()``
 
-- ``elm->dev``: Race in ``ldisc_ioctl()``
 
-- DMA capable rx/tx buffers
+A note on CAN bus termination
+------------------------------
 
-- fixup constants, constant for '``>``'
+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.