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.
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:
- dthread - https://github.com/tonyrog/dthread
- uart - https://github.com/tonyrog/uart
Clone the repository in a suitable location:
$ git clone git://github.com/tonyrog/can.git
$ sudo modprobe vcan
$ sudo ip link add dev vcan0 type vcan
This must be done prior to bringing the interface up.
$ sudo ip link set vcan0 type can bitrate 125000
$ sudo ifconfig vcan0 up
$ sudp ip link del vcan0
$ sudo ip link add type vcan
triple-sampling on
...
Rebar will compile all needed dependencies.
Compile:
$ cd can
$ rebar compile
...
==> can (compile)
$ 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().