packages feed

network-can-0.1.0.0: app/SLCANSerial.hs

module Main where

import Control.Monad.IO.Class
import Data.Default.Class (Default(def))
import System.Hardware.Serialport (CommSpeed(..), SerialPortSettings(..))
import Network.CAN (MonadCAN)
import Network.SLCAN (Transport(..))

import qualified Control.Monad
import qualified Network.CAN
import qualified Network.SLCAN
import qualified System.Hardware.Serialport

main :: IO ()
main = do
  let
    port = "/dev/can4discouart"

  h <-
    System.Hardware.Serialport.hOpenSerial
      port
      (System.Hardware.Serialport.defaultSerialSettings
        { commSpeed = CS115200 }
      )

  Network.SLCAN.runSLCAN
    (Transport_Handle h)
    def
    act

act
  :: ( MonadCAN m
     , MonadIO m
     )
  => m ()
act = do
  Network.CAN.send
    $ Network.CAN.standardMessage
        -- vendorID SDO
        0x601
        [0x40, 0x18, 0x10, 0x01, 0x0, 0x0, 0x0, 0x0]

  Control.Monad.forever
    $ Network.CAN.recv
      >>= Control.Monad.IO.Class.liftIO . print