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 +7/−2
- LICENSE +1/−0
- README.md +2/−0
- System/Hardware/Serialport.hs +1/−1
- System/Hardware/Serialport/Posix.hsc +46/−41
- System/Hardware/Serialport/Types.hs +16/−13
- System/Hardware/Serialport/Windows.hs +18/−14
- serialport.cabal +12/−9
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 @@++ 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,