# 🦘 cangaroo
[](https://hex.pm/packages/cangaroo)
[](https://hexdocs.pm/cangaroo/)
cangaroo provides Gleam bindings to the [Excansock](https://github.com/pavels/excansock) Elixir library, enabling Gleam applications to communicate with SocketCAN devices on Linux.
```sh
gleam add cangaroo@1
```
### Start GenServer and open socket
```gleam
import cangaroo
import gleam/io
pub fn main() {
let assert Ok(client) = cangaroo.start_link("can0")
io.println("Connected!")
}
```
### Sending frames
```gleam
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
```gleam
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.
```sh
sudo gleam test
```