🦘 cangaroo
cangaroo provides Gleam bindings to the Excansock Elixir library, enabling Gleam applications to communicate with SocketCAN devices on Linux.
gleam add cangaroo@1
Start GenServer and open socket
import cangaroo
import gleam/io
pub fn main() {
let assert Ok(client) = cangaroo.start_link("can0")
io.println("Connected!")
}
Sending frames
import cangaroo
import cangaroo/types.{CanFrame}
pub fn main() {
let assert Ok(client) = cangaroo.start_link("can0")
let frame = CanFrame(id: 0x123, data: <<0x01, 0x02, 0x03, 0x04>>)
let assert Ok(Nil) = cangaroo.send(client, frame)
}
Receiving frames
import cangaroo
import cangaroo/types
import gleam/erlang/process
pub fn main() {
let assert Ok(client) = cangaroo.start_link("can0")
let messages = types.messages(client)
let selector =
process.new_selector()
|> process.select(for: messages)
let frame = process.selector_receive_forever(from: selector)
// do something with the frame
}
Running tests
Run as root to setup the virtual can interface.
sudo gleam test