module System.FTDI
    ( -- *Devices
      Device
    , ChipType(..)
    , getChipType
    , setChipType
    , fromUSBDevice
    , guessChipType

      -- *Interfaces
    , Interface(..)

      -- *Device handles
    , DeviceHandle
    , resetUSB
    , getTimeout
    , setTimeout
    , openDevice
    , closeDevice
    , withDeviceHandle

      -- *Interface handles
    , InterfaceHandle
    , getDeviceHandle
    , getInterface
    , openInterface
    , closeInterface
    , withInterfaceHandle

      -- *Data transfer
    , ChunkedReaderT
    , runChunkedReaderT
    , readData

      -- **Low level bulk transfers
      -- |These are low-level functions and as such they ignores things like:
      --
      --   * Max packet size
      --
      --   * Latency timer
      --
      --   * Modem status bytes
      --
      -- USB timeouts are not ignored, but they will prevent the request from
      -- being completed.
    , readBulk
    , writeBulk

      -- *Control requests
    , reset
    , purgeReadBuffer
    , purgeWriteBuffer
    , getLatencyTimer
    , setLatencyTimer
    , BitMode(..)
    , setBitMode

      -- **Line properties
    , Parity(..)
    , BitDataFormat(..)
    , StopBits(..)
    , setLineProperty
    , BaudRate(..)
    , nearestBaudRate
    , setBaudRate

      -- **Modem status
    , ModemStatus(..)
    , pollModemStatus

      -- *Flow control
    , FlowCtrl(..)
    , setFlowControl
    , setDTR
    , setRTS
    , setEventCharacter
    , setErrorCharacter

      -- *Defaults
    , defaultTimeout
    ) where

import System.FTDI.Internal