ecu-0.0.5: src/CANView.hs
module Main (main) where
import Control.Monad
import Data.Word
import System.Environment
import System.IO
import Text.Printf
import CAN
main :: IO ()
main = do
args <- getArgs
case args of
["-h"] -> help
["--help"] -> help
"--std" : ids -> do
initCAN
bus <- openBus 0 Standard
flushRxQueue bus
canview bus $ map read ids
ids -> do
initCAN
bus <- openBus 0 Extended
flushRxQueue bus
canview bus $ map read ids
canview :: Bus -> [Word32] -> IO ()
canview bus ids = do
m <- recvMsg bus
case m of
Nothing -> canview bus ids
Just (t, m@(Msg id _)) -> do
when (null ids || elem id ids) $ do
putStrLn $ printf "%10i " t ++ show m
hFlush stdout
canview bus ids
help :: IO ()
help = putStrLn $ unlines
[ ""
, "NAME"
, " canview - listens to a CAN bus"
, ""
, "SYNOPSIS"
, " canview [ --std ] { <id-filter> }"
, ""
, "ARGUMENTS"
, " --std Set to standard CAN with 500K. Default is extended CAN with 250K."
, ""
, " <id-filter> If id filters are included, only matching ids will be displayed."
, ""
]