packages feed

network-can-0.1.0.0: src/Network/SocketCAN/Example.hs

module Network.SocketCAN.Example where

import Control.Monad (forever)
import Network.CAN
import Network.Socket (Socket)
import Network.SocketCAN

import qualified Network.Socket

example :: IO ()
example = do
  let interface = "vcan0"
  mIdx <- Network.Socket.ifNameToIndex interface
  case mIdx of
    Nothing -> error $ "Interface " <> interface <> " not found"
    Just idx ->
      withSocketCAN idx act

act :: Socket -> IO ()
act sock = do
  sendCANMessage
    sock
    $ standardMessage
        0x123
        [0xDE, 0xAD]

  sendCANMessage
    sock
    $ CANMessage
        (extendedID 0x123456)
        [0xEE]

  sendCANMessage
    sock
    $ CANMessage
        (setRTR $ extendedID 0x123)
        [0xDE, 0xAD, 0x11]

  forever
    $ recvCANMessage sock
    >>= print