|Maintainer||Bas van Dijk <firstname.lastname@example.org>|
This module is not intended for end users. It provides internal and unsafe functions used for extending this package.
- type C'TransferFunc = Ptr C'libusb_device_handle -> CUChar -> Ptr CUChar -> CInt -> Ptr CInt -> CUInt -> IO CInt
- withDevHndlPtr :: DeviceHandle -> (Ptr C'libusb_device_handle -> IO α) -> IO α
- convertUSBException :: (Num α, Eq α, Show α) => α -> USBException
- unmarshalReleaseNumber :: Word16 -> ReleaseNumber
- unmarshalStrIx :: Word8 -> Maybe StrIx
- marshalEndpointAddress :: (Bits α, Num α) => EndpointAddress -> α
- unmarshalEndpointAddress :: Word8 -> EndpointAddress
- type C'TransferType = CUChar
- getWait :: DeviceHandle -> Maybe Wait
- type Wait = Timeout -> Lock -> Ptr C'libusb_transfer -> IO ()
- allocaTransfer :: Int -> (Ptr C'libusb_transfer -> IO α) -> IO α
- withCallback :: (Ptr C'libusb_transfer -> IO ()) -> (C'libusb_transfer_cb_fn -> IO α) -> IO α
- data SumLength = SumLength !Int !Int
- sumLength :: [Int] -> SumLength
- peekIsoPacketDescs :: Int -> Ptr C'libusb_transfer -> IO [C'libusb_iso_packet_descriptor]
- initIsoPacketDesc :: Size -> C'libusb_iso_packet_descriptor
- data Lock
- newLock :: IO Lock
- acquire :: Lock -> IO ()
- release :: Lock -> IO ()
Handy type synonym for the
libusb transfer functions.
Unmarshal a a 16bit word as a release number. The 16bit word should be encoded as a Binary Coded Decimal using 4 bits for each of the 4 decimals.
Unmarshal an 8bit word to a string descriptor index. 0 denotes that a
string descriptor is not available and unmarshals to
Marshal and unmarshal endpoint addresses
The address should be encoded according to section 9.6.6 of the USB 2.0 specification.
Marshal an endpoint address so that it can be used by the
Unmarshal an 8bit word as an endpoint address. This function is primarily used when unmarshalling USB descriptors.
Useful types and functions for asynchronous implementations
A function to wait for the termination of a submitted transfer.
Allocate a transfer with the given number of isochronous packets and apply the function to the resulting pointer. The transfer is automatically freed when the function terminates (whether normally or by raising an exception).
NoMemException may be thrown.
FunPtr to the given transfer callback function and pass it to
the continuation function. The
FunPtr is automatically freed when the
continuation terminates (whether normally or by raising an exception).
Retrieve the isochronous packet descriptors from the given transfer.
An isochronous packet descriptor with all fields zero except for the length.
acquire behaves as follows:
- When the state is "unlocked"
acquirechanges the state to "locked".
- When the state is "locked"
acquireblocks until a call to
releasein another thread wakes the calling thread. Upon awakening it will change the state to "locked".