module Ham.CAT.SerialCAT (SerialCAT(..)
,serialGet
,serialSend) where
import Ham.Internal.Data
import System.Hardware.Serialport
import Data.Attoparsec.ByteString.Char8
import qualified Data.ByteString.Char8 as B
import Control.Concurrent (threadDelay)
data SerialCAT = SerialCAT {
serialGetFrequency :: SerialPort -> IO (Maybe Frequency)
, serialGetMode :: SerialPort -> IO (Maybe QsoMode)
, serialSetPowerSSB :: SerialPort -> Int -> IO ()
, serialGetPowerSSB :: SerialPort -> IO (Maybe Int)
, serialIdentify :: SerialPort -> IO Bool
}
serialGet :: SerialPort
-> String
-> (B.ByteString -> Parser a)
-> IO (Maybe a)
serialGet s cmd parser = do
let cmd' = B.pack cmd <> B.pack ";"
send s cmd'
threadDelay 100000
a <- recv s 100
return $
let r = parse (parser $ B.pack cmd) a
in maybeResult r
serialSend :: SerialPort -> String -> IO ()
serialSend s value = do
send s $ B.pack value
threadDelay 100000
_ <- recv s 100
return ()