CAN driver and router
Erlang C
Pull request Compare This branch is 47 commits ahead, 72 commits behind tonyrog:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
c_src
doc
ebin
include
priv
src
tetrapak
.gitignore
LICENSE
README.md
rebar.config
rebar.config.script

README.md

can

CAN binding for Erlang

CAN or Controller Area Network for short, is a two wire serial protcol for industrial applications.

This implementation currently supports three different backends:

  • can_usb: CANUSB is a USB dongle from LAWICEL AB.
  • can_udp: This is my own invention. A simple repackaging of CAN frames into UDP/IP datagrams sent over local multicast channel.
  • can_sock: A binding to linux SocketCAN interface.

Any number of backend interfaces may be started and attached to the can_router, which is the main interface to receice and send CAN frames.
An application will typically call can_router:attach() and then receive CAN frames from any of the interfaces. To send a frame then simple call can:send/n, this will pass the CAN frame to all the interfaces and connected local applications in the Erlang node.

Dependencies

To build can you will need a working installation of Erlang R15B (or later).
Information on building and installing Erlang/OTP can be found here (more info).

can is built using rebar that can be found here, with building instructions here.

can also requires the following applications to be installed:

Downloading

Clone the repository in a suitable location:

$ git clone git://github.com/tonyrog/can.git

Configurating

Concepts

Linux virtual can driver

load the driver

$ sudo modprobe vcan

Create a virtual CAN network interface called 'vcan0'

$ sudo ip link add dev vcan0 type vcan

Set the bitrate of the CAN network interface

This must be done prior to bringing the interface up.

$ sudo ip link set vcan0 type can bitrate 125000

Activate a virtual CAN network interface called 'vcan0'

$ sudo ifconfig vcan0 up

Remote a (virtual) CAN network interface 'vcan0'

$ sudp ip link del vcan0

Create a virtual CAN network interface

$ sudo ip link add type vcan

triple-sampling on

Files

...

Building

Rebar will compile all needed dependencies.
Compile:

$ cd can
$ rebar compile
...
==> can (compile)

Running

$ erl -pa <path>/can/ebin
>can_router:start().

(Instead of specifying the path to the ebin directory you can set the environment variable ERL_LIBS.)

Stop:

>halt().