network-can-0.2.0.0: app/SLCANUDP.hs
module Main where
import Control.Monad.Class.MonadSay (MonadSay(say))
import Data.Default (Default(def))
import Network.CAN (CAN)
import Network.SLCAN (Transport(..))
import Network.Socket (AddrInfo(..), SocketType(Datagram))
import qualified Control.Monad
import qualified Network.CAN
import qualified Network.SLCAN
import qualified Network.Socket
main :: IO ()
main = do
ourAddrinfos
<- Network.Socket.getAddrInfo
Nothing
Nothing
(Just "1337")
targetAddrinfos
<- Network.Socket.getAddrInfo
Nothing
Nothing
(Just "1338")
case (ourAddrinfos, targetAddrinfos) of
(ourAddrinfo:_, targetAddrinfo:_) -> do
sock <- Network.Socket.socket
(addrFamily ourAddrinfo)
Datagram
Network.Socket.defaultProtocol
Network.Socket.bind
sock
(addrAddress ourAddrinfo)
Network.SLCAN.withSLCAN
(Transport_UDP sock (addrAddress targetAddrinfo))
def
act
(_, _) -> error "getAddrInfo fail"
act
:: MonadSay m
=> CAN m
-> m ()
act can = do
Network.CAN.send
can
$ Network.CAN.standardMessage
0x7E5
[0x4C]
Control.Monad.forever
$ Network.CAN.recv
can
>>= say . Network.CAN.prettyCANMessage