packages feed

serialport 0.4.7 → 0.5.0

raw patch · 8 files changed

+103/−80 lines, 8 filesnew-uploaderPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

- System.Hardware.Serialport: bitsPerWord :: SerialPortSettings -> Word8
- System.Hardware.Serialport: commSpeed :: SerialPortSettings -> CommSpeed
- System.Hardware.Serialport: flowControl :: SerialPortSettings -> FlowControl
- System.Hardware.Serialport: parity :: SerialPortSettings -> Parity
- System.Hardware.Serialport: stopb :: SerialPortSettings -> StopBits
- System.Hardware.Serialport: timeout :: SerialPortSettings -> Int
+ System.Hardware.Serialport: [bitsPerWord] :: SerialPortSettings -> Word8
+ System.Hardware.Serialport: [commSpeed] :: SerialPortSettings -> CommSpeed
+ System.Hardware.Serialport: [flowControl] :: SerialPortSettings -> FlowControl
+ System.Hardware.Serialport: [parity] :: SerialPortSettings -> Parity
+ System.Hardware.Serialport: [stopb] :: SerialPortSettings -> StopBits
+ System.Hardware.Serialport: [timeout] :: SerialPortSettings -> Int
- System.Hardware.Serialport: withSerial :: String -> SerialPortSettings -> (SerialPort -> IO a) -> IO a
+ System.Hardware.Serialport: withSerial :: FilePath -> SerialPortSettings -> (SerialPort -> IO a) -> IO a

Files

CHANGELOG.md view
@@ -1,6 +1,11 @@-+0.5.0 (16/12/2020)+==================+* Derive Show and Read instances for SerialPortSettings, CommSpeed, StopBits, Parity, and FlowControl datatypes.+* Update minimum Cabal-version to 1.10+* Minor syntax changes+* Minor code cleanup -4.7 (28/08/2014)+0.4.7 (28/08/2014) ================  * Open in non-blocking mode, immediately reverting to blocking to fix OS-X problem
LICENSE view
@@ -1,4 +1,5 @@ Copyright (c) 2009, Joris Putcuyps+Copyright (c) 2020, David Cox All rights reserved.  Redistribution and use in source and binary forms, with or without
README.md view
@@ -1,3 +1,5 @@+![Haskell CI](https://github.com/standardsemiconductor/serialport/workflows/Haskell%20CI/badge.svg)+ Objectives ========== * Cross platform: at least Linux, Windows and Mac OS.
System/Hardware/Serialport.hs view
@@ -61,5 +61,5 @@ import qualified Control.Exception as Ex  -- |Safer device function, so you don't forget to close the device-withSerial :: String -> SerialPortSettings -> ( SerialPort -> IO a ) -> IO a+withSerial :: FilePath -> SerialPortSettings -> ( SerialPort -> IO a ) -> IO a withSerial dev settings = Ex.bracket (openSerial dev settings) closeSerial
System/Hardware/Serialport/Posix.hsc view
@@ -1,36 +1,42 @@-{-# LANGUAGE ForeignFunctionInterface, DeriveDataTypeable  #-}+{-# LANGUAGE ForeignFunctionInterface #-}+{-# LANGUAGE DeriveDataTypeable       #-}+{-# LANGUAGE LambdaCase               #-} {-# OPTIONS_HADDOCK hide #-} module System.Hardware.Serialport.Posix where -import qualified Data.ByteString.Char8 as B-import qualified Control.Exception as Ex-import System.Posix.IO-import System.Posix.Types-import System.Posix.Terminal-import System.Hardware.Serialport.Types-import Foreign (Ptr, castPtr, alloca, peek, with)-import Foreign.C import GHC.IO.Handle-import GHC.IO.Device+import GHC.IO.Device (RawIO(..), IODevice(..), IODeviceType(Stream)) import GHC.IO.BufferedIO-import Data.Typeable import GHC.IO.Buffer import GHC.IO.Encoding++import System.Posix.IO+import System.Posix.Types (Fd, ByteCount)+import System.Posix.Terminal++import Foreign (Ptr, castPtr, alloca, peek, with)+import Foreign.C+ import Control.Monad (void)++import Data.Typeable import Data.Bits+import qualified Data.ByteString.Char8 as B+import qualified Control.Exception     as Ex +import System.Hardware.Serialport.Types -data SerialPort = SerialPort {-                      fd :: Fd,-                      portSettings :: SerialPortSettings-                  }-                  deriving (Typeable) +data SerialPort = SerialPort+  { fd           :: Fd+  , portSettings :: SerialPortSettings+  } deriving (Show, Typeable) + instance RawIO SerialPort where-  read (SerialPort fd' _) ptr n = return . fromIntegral =<< fdReadBuf fd' ptr (fromIntegral n)+  read (SerialPort fd' _) ptr n = fromIntegral <$> fdReadBuf fd' ptr (fromIntegral n)   readNonBlocking _ _ _ = error "readNonBlocking not implemented"-  write (SerialPort fd' _) ptr n = void (fdWriteBuf fd' ptr (fromIntegral n))+  write (SerialPort fd' _) ptr n = void $ fdWriteBuf fd' ptr (fromIntegral n)   writeNonBlocking _ _ _ = error "writenonblocking not implemented"  @@ -76,7 +82,7 @@   fd' <- openFd dev ReadWrite Nothing defaultFileFlags { noctty = True, nonBlock = True }   setFdOption fd' NonBlockingRead False   let serial_port = SerialPort fd' defaultSerialSettings-  return =<< setSerialSettings serial_port settings+  setSerialSettings serial_port settings   -- |Use specific encoding for an action and restore old encoding afterwards@@ -97,20 +103,20 @@ recv :: SerialPort -> Int -> IO B.ByteString recv (SerialPort fd' _) n = do   result <- withEncoding char8 $ Ex.try $ fdRead fd' count :: IO (Either IOError (String, ByteCount))-  case result of-     Right (str, _) -> return $ B.pack str-     Left _         -> return B.empty+  return $ case result of+     Right (str, _) -> B.pack str+     Left _         -> B.empty   where     count = fromIntegral n   -- |Send bytes-send :: SerialPort-        -> B.ByteString-        -> IO Int          -- ^ Number of bytes actually sent-send (SerialPort fd' _ ) msg = do-  ret <- withEncoding char8 (fdWrite fd' (B.unpack msg))-  return $ fromIntegral ret+send+  :: SerialPort+  -> B.ByteString+  -> IO Int          -- ^ Number of bytes actually sent+send (SerialPort fd' _ ) msg =+  fromIntegral <$> withEncoding char8 (fdWrite fd' (B.unpack msg))   -- |Flush buffers@@ -230,18 +236,17 @@   commSpeedToBaudRate :: CommSpeed -> BaudRate-commSpeedToBaudRate speed =-    case speed of-      CS110 -> B110-      CS300 -> B300-      CS600 -> B600-      CS1200 -> B1200-      CS2400 -> B2400-      CS4800 -> B4800-      CS9600 -> B9600-      CS19200 -> B19200-      CS38400 -> B38400-      CS57600 -> B57600-      CS115200 -> B115200+commSpeedToBaudRate = \case+  CS110    -> B110+  CS300    -> B300+  CS600    -> B600+  CS1200   -> B1200+  CS2400   -> B2400+  CS4800   -> B4800+  CS9600   -> B9600+  CS19200  -> B19200+  CS38400  -> B38400+  CS57600  -> B57600+  CS115200 -> B115200  
System/Hardware/Serialport/Types.hs view
@@ -3,7 +3,6 @@  import Data.Word - -- | Supported baudrates data CommSpeed   = CS110@@ -17,21 +16,25 @@   | CS38400   | CS57600   | CS115200-  deriving (Show, Eq, Bounded)+  deriving (Show, Read, Eq, Bounded) +data StopBits = One | Two+  deriving (Show, Read, Eq, Bounded) -data StopBits = One | Two deriving (Show, Eq, Bounded)-data Parity = Even | Odd | NoParity deriving (Show, Eq)-data FlowControl = Software | NoFlowControl deriving (Show, Eq)+data Parity = Even | Odd | NoParity+  deriving (Show, Read, Eq) -data SerialPortSettings = SerialPortSettings {-                      commSpeed    :: CommSpeed,   -- ^ baudrate-                      bitsPerWord  :: Word8,       -- ^ Number of bits in a word-                      stopb        :: StopBits,    -- ^ Number of stop bits-                      parity       :: Parity,      -- ^ Type of parity-                      flowControl  :: FlowControl, -- ^ Type of flowcontrol-                      timeout      :: Int          -- ^ Timeout when receiving a char in tenth of seconds-                  }+data FlowControl = Software | NoFlowControl+  deriving (Show, Read, Eq)++data SerialPortSettings = SerialPortSettings+  { commSpeed   :: CommSpeed,   -- ^ baudrate+    bitsPerWord :: Word8,       -- ^ Number of bits in a word+    stopb       :: StopBits,    -- ^ Number of stop bits+    parity      :: Parity,      -- ^ Type of parity+    flowControl :: FlowControl, -- ^ Type of flowcontrol+    timeout     :: Int          -- ^ Timeout when receiving a char in tenth of seconds+  } deriving (Show, Read, Eq)   -- | Most commonly used configuration
System/Hardware/Serialport/Windows.hs view
@@ -2,27 +2,31 @@ {-# OPTIONS_HADDOCK hide #-} module System.Hardware.Serialport.Windows where -import Data.Bits-import qualified Data.ByteString.Char8 as B-import qualified Data.ByteString.Unsafe as BU-import qualified System.Win32.Comm as Comm+import GHC.IO.Handle+import GHC.IO.Device +import GHC.IO.BufferedIO+import GHC.IO.Buffer+ import System.Win32.Types import System.Win32.File+import qualified System.Win32.Comm as Comm+ import Foreign.Marshal.Alloc-import System.Hardware.Serialport.Types+ import Control.Monad-import GHC.IO.Handle-import GHC.IO.Device-import GHC.IO.BufferedIO+ import Data.Typeable-import GHC.IO.Buffer+import Data.Bits+import qualified Data.ByteString.Char8  as B+import qualified Data.ByteString.Unsafe as BU +import System.Hardware.Serialport.Types -data SerialPort = SerialPort {-                      handle :: HANDLE,-                      portSettings :: SerialPortSettings-                  }-                  deriving (Typeable)++data SerialPort = SerialPort+  { handle       :: HANDLE+  , portSettings :: SerialPortSettings+  } deriving (Show, Typeable)   instance RawIO SerialPort where
serialport.cabal view
@@ -1,14 +1,15 @@ Name:           serialport-Version:        0.4.7-Cabal-Version:  >= 1.8+Version:        0.5.0+Cabal-Version:  >= 1.10 Build-Type:     Simple license:        BSD3 license-file:   LICENSE-copyright:      (c) 2009-2011 Joris Putcuyps-author:         Joris Putcuyps-maintainer:     Joris.Putcuyps@gmail.com-homepage:       https://github.com/jputcu/serialport-bug-reports:    https://github.com/jputcu/serialport/issues+copyright:      (c) 2009-2011 Joris Putcuyps,+                (c) 2020      David Cox+author:         Joris Putcuyps, David Cox+maintainer:     David Cox <standard.semiconductor@gmail.com>+homepage:       https://github.com/standardsemiconductor/serialport+bug-reports:    https://github.com/standardsemiconductor/serialport/issues synopsis:       Cross platform serial port library. description:    Cross platform haskell library for using the serial port. category:       Hardware@@ -18,14 +19,15 @@  source-repository head   type:     git-  location: git://github.com/jputcu/serialport.git+  location: git://github.com/standardsemiconductor/serialport.git  Library   Exposed-Modules:    System.Hardware.Serialport   Other-Modules:      System.Hardware.Serialport.Types   Build-Depends:      base >= 4 && < 5, bytestring   ghc-options:        -Wall -fno-warn-orphans-+  default-language: Haskell2010+       if !os(windows)     Build-Depends:    unix     Other-Modules:    System.Hardware.Serialport.Posix@@ -38,6 +40,7 @@   type:               exitcode-stdio-1.0   main-is:            Tests.hs   hs-source-dirs:     tests+  default-language:   Haskell2010   build-depends:      base,                       HUnit,                       bytestring,