| Maintainer | Bas van Dijk <v.dijk.bas@gmail.com> |
|---|---|
| Safe Haskell | Trustworthy |
System.USB.IO
Description
This module provides functions for performing control, bulk and interrupt transfers.
When your system supports the GHC EventManager this module additionally
exports functions for performing isochronous transfers. These are currently
not available on Windows.
WARNING: You need to enable the threaded runtime (-threaded) when using
the isochronous functions. They throw a runtime error otherwise!
- type ReadAction = Size -> Timeout -> IO (ByteString, Status)
- type ReadExactAction = Size -> Timeout -> IO ByteString
- type WriteAction = ByteString -> Timeout -> IO (Size, Status)
- type WriteExactAction = ByteString -> Timeout -> IO ()
- type Size = Int
- type Timeout = Int
- noTimeout :: Timeout
- data Status
- type ControlAction α = RequestType -> Recipient -> Request -> Value -> Index -> α
- data RequestType
- data Recipient
- = ToDevice
- | ToInterface
- | ToEndpoint
- | ToOther
- type Request = Word8
- type Value = Word16
- type Index = Word16
- control :: DeviceHandle -> ControlAction (Timeout -> IO ())
- readControl :: DeviceHandle -> ControlAction ReadAction
- readControlExact :: DeviceHandle -> ControlAction ReadExactAction
- writeControl :: DeviceHandle -> ControlAction WriteAction
- writeControlExact :: DeviceHandle -> ControlAction WriteExactAction
- readBulk :: DeviceHandle -> EndpointAddress -> ReadAction
- writeBulk :: DeviceHandle -> EndpointAddress -> WriteAction
- readInterrupt :: DeviceHandle -> EndpointAddress -> ReadAction
- writeInterrupt :: DeviceHandle -> EndpointAddress -> WriteAction
- readIsochronous :: DeviceHandle -> EndpointAddress -> Vector Size -> Timeout -> IO (Vector ByteString)
- writeIsochronous :: DeviceHandle -> EndpointAddress -> Vector ByteString -> Timeout -> IO (Vector Size)
Documentation
type ReadAction = Size -> Timeout -> IO (ByteString, Status)Source
Handy type synonym for read transfers.
A ReadAction is a function which takes a Size which defines how many bytes
to read and a Timeout. The function returns an IO action which, when
executed, performs the actual read and returns the ByteString that was read
paired with a Status flag which indicates whether the transfer
Completed or TimedOut.
type ReadExactAction = Size -> Timeout -> IO ByteStringSource
Handy type synonym for read transfers that must exactly read the specified
number of bytes. An incompleteReadException is thrown otherwise.
type WriteAction = ByteString -> Timeout -> IO (Size, Status)Source
Handy type synonym for write transfers.
A WriteAction is a function which takes a ByteString to write and a
Timeout. The function returns an IO action which, when exectued, returns the
number of bytes that were actually written paired with a Status flag which
indicates whether the transfer Completed or TimedOut.
type WriteExactAction = ByteString -> Timeout -> IO ()Source
Handy type synonym for write transfers that must exactly write all the
given bytes. An incompleteWriteException is thrown otherwise.
A timeout in milliseconds. A timeout defines how long a transfer should wait
before giving up due to no response being received.
Use noTimeout for no timeout.
Status of a terminated transfer.
Control transfers
type ControlAction α = RequestType -> Recipient -> Request -> Value -> Index -> αSource
Handy type synonym that names the parameters of a control transfer.
data RequestType Source
Constructors
| ToDevice | |
| ToInterface | |
| ToEndpoint | |
| ToOther |
control :: DeviceHandle -> ControlAction (Timeout -> IO ())Source
Perform a USB control request that does not transfer data.
Exceptions:
-
TimeoutExceptionif the transfer timed out. -
PipeExceptionif the control request was not supported by the device -
NoDeviceExceptionif the device has been disconnected. - Another
USBException.
readControl :: DeviceHandle -> ControlAction ReadActionSource
Perform a USB control read.
Exceptions:
-
PipeExceptionif the control request was not supported by the device -
NoDeviceExceptionif the device has been disconnected. - Another
USBException.
readControlExact :: DeviceHandle -> ControlAction ReadExactActionSource
A convenience function similar to readControl which checks if the
specified number of bytes to read were actually read.
Throws an incompleteReadException if this is not the case.
writeControl :: DeviceHandle -> ControlAction WriteActionSource
Perform a USB control write.
Exceptions:
-
PipeExceptionif the control request was not supported by the device -
NoDeviceExceptionif the device has been disconnected. - Another
USBException.
writeControlExact :: DeviceHandle -> ControlAction WriteExactActionSource
A convenience function similar to writeControl which checks if the given
bytes were actually fully written.
Throws an incompleteWriteException if this is not the case.
Bulk transfers
readBulk :: DeviceHandle -> EndpointAddress -> ReadActionSource
Perform a USB bulk read.
Exceptions:
-
PipeExceptionif the endpoint halted. -
OverflowExceptionif the device offered more data, see Packets and overflows in thelibusbdocumentation. -
NoDeviceExceptionif the device has been disconnected. - Another
USBException.
writeBulk :: DeviceHandle -> EndpointAddress -> WriteActionSource
Perform a USB bulk write.
Exceptions:
-
PipeExceptionif the endpoint halted. -
OverflowExceptionif the device offered more data, see Packets and overflows in thelibusbdocumentation. -
NoDeviceExceptionif the device has been disconnected. - Another
USBException.
Interrupt transfers
readInterrupt :: DeviceHandle -> EndpointAddress -> ReadActionSource
Perform a USB interrupt read.
Exceptions:
-
PipeExceptionif the endpoint halted. -
OverflowExceptionif the device offered more data, see Packets and overflows in thelibusbdocumentation. -
NoDeviceExceptionif the device has been disconnected. - Another
USBException.
writeInterrupt :: DeviceHandle -> EndpointAddress -> WriteActionSource
Perform a USB interrupt write.
Exceptions:
-
PipeExceptionif the endpoint halted. -
OverflowExceptionif the device offered more data, see Packets and overflows in thelibusbdocumentation. -
NoDeviceExceptionif the device has been disconnected. - Another
USBException.
Isochronous transfers
WARNING: You need to enable the threaded runtime (-threaded) when using
the isochronous functions. They throw a runtime error otherwise!
Arguments
| :: DeviceHandle | |
| -> EndpointAddress | |
| -> Vector Size | Sizes of isochronous packets |
| -> Timeout | |
| -> IO (Vector ByteString) |
Perform a USB isochronous read.
WARNING: You need to enable the threaded runtime (-threaded) for this
function to work correctly. It throws a runtime error otherwise!
Exceptions:
-
PipeExceptionif the endpoint halted. -
OverflowExceptionif the device offered more data, see Packets and overflows in thelibusbdocumentation. -
NoDeviceExceptionif the device has been disconnected. - Another
USBException.
writeIsochronous :: DeviceHandle -> EndpointAddress -> Vector ByteString -> Timeout -> IO (Vector Size)Source
Perform a USB isochronous write.
WARNING: You need to enable the threaded runtime (-threaded) for this
function to work correctly. It throws a runtime error otherwise!
Exceptions:
-
PipeExceptionif the endpoint halted. -
OverflowExceptionif the device offered more data, see Packets and overflows in thelibusbdocumentation. -
NoDeviceExceptionif the device has been disconnected. - Another
USBException.