{-# LANGUAGE CPP #-}

-- | Example usage:
--
-- > import System.Hardware.Serialport
-- > 
-- > s <- openSerial "/dev/ttyUSB0" defaultSerialSettings
-- > -- or a little different
-- > s <- openSerial "/dev/ttyUSB0" defaultSerialSettings { baudRate = B2400 }
-- > 
-- > -- Sending
-- > forM_ "AT\r" $ sendChar s
-- > 
-- > -- Receiving, using unfoldM from Control.Monad.Loops
-- > response <- unfoldM (recvChar s)
-- > 
-- > print response
-- > 
-- > closeSerial s
-- 

module System.Hardware.Serialport (
  -- * Types
   BaudRate(..)
  ,StopBits(..)
  ,Parity(..)
  ,FlowControl(..)
  ,SerialPort
  -- * Configure port
  -- | You don't need the get or set functions, they are used by openSerial
  ,SerialPortSettings(..)
  ,defaultSerialSettings
  -- * Serial methods 
  ,openSerial
  ,sendChar
  ,recvChar
  ,closeSerial
  ) where

#if defined(mingw32_HOST_OS)
import System.Hardware.Serialport.Windows
#elif defined(linux_HOST_OS)
import System.Hardware.Serialport.Posix
import System.Posix.Terminal
#endif
import System.Hardware.Serialport.Types