network-can-0.1.0.0: app/SLCANUDP.hs
module Main where
import Control.Monad.IO.Class
import Data.Default.Class (Default(def))
import Network.CAN (MonadCAN)
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.runSLCAN
(Transport_UDP sock (addrAddress targetAddrinfo))
def
act
(_, _) -> error "getAddrInfo fail"
act
:: ( MonadCAN m
, MonadIO m
)
=> m ()
act = do
Network.CAN.send
$ Network.CAN.standardMessage
0x7E5
[0x4C]
Control.Monad.forever
$ Network.CAN.recv
>>= Control.Monad.IO.Class.liftIO . print