Maintainer | Bas van Dijk <v.dijk.bas@gmail.com> |
---|---|
Safe Haskell | Trustworthy |
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 -> [Size] -> Timeout -> IO [ByteString]
- writeIsochronous :: DeviceHandle -> EndpointAddress -> [ByteString] -> Timeout -> IO [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
control :: DeviceHandle -> ControlAction (Timeout -> IO ())Source
Perform a USB control request that does not transfer data.
Exceptions:
-
TimeoutException
if the transfer timed out. -
PipeException
if the control request was not supported by the device -
NoDeviceException
if the device has been disconnected. - Another
USBException
.
readControl :: DeviceHandle -> ControlAction ReadActionSource
Perform a USB control read.
Exceptions:
-
PipeException
if the control request was not supported by the device -
NoDeviceException
if 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:
-
PipeException
if the control request was not supported by the device -
NoDeviceException
if 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:
-
PipeException
if the endpoint halted. -
OverflowException
if the device offered more data, see Packets and overflows in thelibusb
documentation: http://libusb.sourceforge.net/api-1.0/packetoverflow.html. -
NoDeviceException
if the device has been disconnected. - Another
USBException
.
writeBulk :: DeviceHandle -> EndpointAddress -> WriteActionSource
Perform a USB bulk write.
Exceptions:
-
PipeException
if the endpoint halted. -
OverflowException
if the device offered more data, see Packets and overflows in thelibusb
documentation: http://libusb.sourceforge.net/api-1.0/packetoverflow.html. -
NoDeviceException
if the device has been disconnected. - Another
USBException
.
Interrupt transfers
readInterrupt :: DeviceHandle -> EndpointAddress -> ReadActionSource
Perform a USB interrupt read.
Exceptions:
-
PipeException
if the endpoint halted. -
OverflowException
if the device offered more data, see Packets and overflows in the libusb documentation: http://libusb.sourceforge.net/api-1.0/packetoverflow.html. -
NoDeviceException
if the device has been disconnected. - Another
USBException
.
writeInterrupt :: DeviceHandle -> EndpointAddress -> WriteActionSource
Perform a USB interrupt write.
Exceptions:
-
PipeException
if the endpoint halted. -
OverflowException
if the device offered more data, see Packets and overflows in thelibusb
documentation: http://libusb.sourceforge.net/api-1.0/packetoverflow.html. -
NoDeviceException
if 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!
:: DeviceHandle | |
-> EndpointAddress | |
-> [Size] | Sizes of isochronous packets |
-> Timeout | |
-> IO [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:
-
PipeException
if the endpoint halted. -
OverflowException
if the device offered more data, see Packets and overflows in thelibusb
documentation: http://libusb.sourceforge.net/api-1.0/packetoverflow.html. -
NoDeviceException
if the device has been disconnected. - Another
USBException
.
writeIsochronous :: DeviceHandle -> EndpointAddress -> [ByteString] -> Timeout -> IO [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:
-
PipeException
if the endpoint halted. -
OverflowException
if the device offered more data, see Packets and overflows in thelibusb
documentation: http://libusb.sourceforge.net/api-1.0/packetoverflow.html. -
NoDeviceException
if the device has been disconnected. - Another
USBException
.