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.
can also requires the following applications to be installed:
Clone the repository in a suitable location:
$ git clone git://github.com/tonyrog/can.git
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
Rebar will compile all needed dependencies.
$ 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.)