module Ham.CAT.ElecraftKX2 (elecraftKX2) where import Ham.CAT.SerialCAT import Ham.CAT.Parser import Ham.Internal.Data import qualified Data.ByteString.Char8 as B import System.Hardware.Serialport import Data.Attoparsec.ByteString.Char8 import Text.Printf ---------------------------------------------------------------------------------- -- K3/KX2/KX3 stuff below this line. -- | Interface for the Elecraft radios K3, KX2, KX3. elecraftKX2 :: SerialCAT elecraftKX2 = SerialCAT { serialGetFrequency = \s -> serialGet s "FA" frequencyFromAnswer , serialGetMode = \s -> serialGet s "MD" modeFromAnswer , serialGetPowerSSB = \s -> serialGet s "PC" intFromAnswer , serialSetPowerSSB = \s p -> serialSend s (printf "PC%.3d;" p) , serialIdentify = identify_kx2 } identify_kx2 :: SerialPort -> IO Bool identify_kx2 s = do mi <- serialGet s "K3" intFromAnswer case mi of Just _ -> return True _ -> return False modeFromAnswer :: B.ByteString -> Parser QsoMode modeFromAnswer prefix = do string prefix c <- anyChar char ';' return $ case c of '1' -> PH '2' -> PH '3' -> CW '4' -> FM '5' -> PH '6' -> DATA '7' -> CW '9' -> DATA _ -> PH