CAN bus networking using Linux SocketCAN or SLCAN backends.
import qualified Control.Monad
import qualified Network.CAN
import qualified Network.SocketCAN
main :: IO ()
main = do
let interface = "vcan0"
mIdx <- Network.SocketCAN.ifNameToIndex interface
case mIdx of
Nothing -> error $ "Interface " <> interface <> " not found"
Just idx ->
Network.SocketCAN.withSocketCAN
idx
(\sock -> do
Network.SocketCAN.sendCANMessage
sock
$ Network.CAN.standardMessage
0x123
[0xDE, 0xAD]
Control.Monad.forever
$ Network.SocketCAN.recvCANMessage sock
>>= print
)