{-# LINE 1 "src/Bindings/Libusb/Asynchronous.hsc" #-}
{-# LANGUAGE ForeignFunctionInterface #-}
{-# LINE 2 "src/Bindings/Libusb/Asynchronous.hsc" #-}


{-# LINE 4 "src/Bindings/Libusb/Asynchronous.hsc" #-}

{-# LINE 5 "src/Bindings/Libusb/Asynchronous.hsc" #-}

-- | <http://libusb.sourceforge.net/api-1.0/group__asyncio.html>

module Bindings.Libusb.Asynchronous where
import Foreign.Ptr (Ptr,FunPtr,plusPtr)
import Foreign.Ptr (wordPtrToPtr,castPtrToFunPtr)
import Foreign.Storable
import Foreign.C.Types
import Foreign.C.String (CString,CStringLen,CWString,CWStringLen)
import Foreign.Marshal.Alloc (alloca)
import Foreign.Marshal.Array (peekArray,pokeArray)
import Data.Int
import Data.Word

{-# LINE 10 "src/Bindings/Libusb/Asynchronous.hsc" #-}
import Bindings.Libusb.HandlingAndEnumeration


{-# LINE 13 "src/Bindings/Libusb/Asynchronous.hsc" #-}

{-# LINE 14 "src/Bindings/Libusb/Asynchronous.hsc" #-}

{-# LINE 15 "src/Bindings/Libusb/Asynchronous.hsc" #-}

{-# LINE 16 "src/Bindings/Libusb/Asynchronous.hsc" #-}

{-# LINE 17 "src/Bindings/Libusb/Asynchronous.hsc" #-}

{-# LINE 18 "src/Bindings/Libusb/Asynchronous.hsc" #-}
data C'libusb_control_setup = C'libusb_control_setup{
  c'libusb_control_setup'bmRequestType :: Word8,
  c'libusb_control_setup'bRequest :: Word8,
  c'libusb_control_setup'wValue :: Word16,
  c'libusb_control_setup'wIndex :: Word16,
  c'libusb_control_setup'wLength :: Word16
} deriving (Eq,Show)
p'libusb_control_setup'bmRequestType p = plusPtr p 0
p'libusb_control_setup'bmRequestType :: Ptr (C'libusb_control_setup) -> Ptr (Word8)
p'libusb_control_setup'bRequest p = plusPtr p 1
p'libusb_control_setup'bRequest :: Ptr (C'libusb_control_setup) -> Ptr (Word8)
p'libusb_control_setup'wValue p = plusPtr p 2
p'libusb_control_setup'wValue :: Ptr (C'libusb_control_setup) -> Ptr (Word16)
p'libusb_control_setup'wIndex p = plusPtr p 4
p'libusb_control_setup'wIndex :: Ptr (C'libusb_control_setup) -> Ptr (Word16)
p'libusb_control_setup'wLength p = plusPtr p 6
p'libusb_control_setup'wLength :: Ptr (C'libusb_control_setup) -> Ptr (Word16)
instance Storable C'libusb_control_setup where
  sizeOf _ = 8
  alignment = sizeOf
  peek p = do
    v0 <- peekByteOff p 0
    v1 <- peekByteOff p 1
    v2 <- peekByteOff p 2
    v3 <- peekByteOff p 4
    v4 <- peekByteOff p 6
    return $ C'libusb_control_setup v0 v1 v2 v3 v4
  poke p (C'libusb_control_setup v0 v1 v2 v3 v4) = do
    pokeByteOff p 0 v0
    pokeByteOff p 1 v1
    pokeByteOff p 2 v2
    pokeByteOff p 4 v3
    pokeByteOff p 6 v4
    return ()

{-# LINE 19 "src/Bindings/Libusb/Asynchronous.hsc" #-}


{-# LINE 21 "src/Bindings/Libusb/Asynchronous.hsc" #-}

{-# LINE 22 "src/Bindings/Libusb/Asynchronous.hsc" #-}

{-# LINE 23 "src/Bindings/Libusb/Asynchronous.hsc" #-}

{-# LINE 24 "src/Bindings/Libusb/Asynchronous.hsc" #-}
data C'libusb_iso_packet_descriptor = C'libusb_iso_packet_descriptor{
  c'libusb_iso_packet_descriptor'length :: CUInt,
  c'libusb_iso_packet_descriptor'actual_length :: CUInt,
  c'libusb_iso_packet_descriptor'status :: C'libusb_transfer_status
} deriving (Eq,Show)
p'libusb_iso_packet_descriptor'length p = plusPtr p 0
p'libusb_iso_packet_descriptor'length :: Ptr (C'libusb_iso_packet_descriptor) -> Ptr (CUInt)
p'libusb_iso_packet_descriptor'actual_length p = plusPtr p 4
p'libusb_iso_packet_descriptor'actual_length :: Ptr (C'libusb_iso_packet_descriptor) -> Ptr (CUInt)
p'libusb_iso_packet_descriptor'status p = plusPtr p 8
p'libusb_iso_packet_descriptor'status :: Ptr (C'libusb_iso_packet_descriptor) -> Ptr (C'libusb_transfer_status)
instance Storable C'libusb_iso_packet_descriptor where
  sizeOf _ = 12
  alignment = sizeOf
  peek p = do
    v0 <- peekByteOff p 0
    v1 <- peekByteOff p 4
    v2 <- peekByteOff p 8
    return $ C'libusb_iso_packet_descriptor v0 v1 v2
  poke p (C'libusb_iso_packet_descriptor v0 v1 v2) = do
    pokeByteOff p 0 v0
    pokeByteOff p 4 v1
    pokeByteOff p 8 v2
    return ()

{-# LINE 25 "src/Bindings/Libusb/Asynchronous.hsc" #-}


{-# LINE 27 "src/Bindings/Libusb/Asynchronous.hsc" #-}

{-# LINE 28 "src/Bindings/Libusb/Asynchronous.hsc" #-}

{-# LINE 29 "src/Bindings/Libusb/Asynchronous.hsc" #-}

{-# LINE 30 "src/Bindings/Libusb/Asynchronous.hsc" #-}

{-# LINE 31 "src/Bindings/Libusb/Asynchronous.hsc" #-}

{-# LINE 32 "src/Bindings/Libusb/Asynchronous.hsc" #-}

{-# LINE 33 "src/Bindings/Libusb/Asynchronous.hsc" #-}

{-# LINE 34 "src/Bindings/Libusb/Asynchronous.hsc" #-}

{-# LINE 35 "src/Bindings/Libusb/Asynchronous.hsc" #-}

{-# LINE 36 "src/Bindings/Libusb/Asynchronous.hsc" #-}

{-# LINE 37 "src/Bindings/Libusb/Asynchronous.hsc" #-}

{-# LINE 38 "src/Bindings/Libusb/Asynchronous.hsc" #-}

{-# LINE 39 "src/Bindings/Libusb/Asynchronous.hsc" #-}

{-# LINE 40 "src/Bindings/Libusb/Asynchronous.hsc" #-}
data C'libusb_transfer = C'libusb_transfer{
  c'libusb_transfer'dev_handle :: Ptr C'libusb_device_handle,
  c'libusb_transfer'flags :: Word8,
  c'libusb_transfer'endpoint :: CUChar,
  c'libusb_transfer'type :: CUChar,
  c'libusb_transfer'timeout :: CUInt,
  c'libusb_transfer'status :: C'libusb_transfer_status,
  c'libusb_transfer'length :: CInt,
  c'libusb_transfer'actual_length :: CInt,
  c'libusb_transfer'callback :: C'libusb_transfer_cb_fn,
  c'libusb_transfer'user_data :: Ptr (),
  c'libusb_transfer'buffer :: Ptr CUChar,
  c'libusb_transfer'num_iso_packets :: CInt,
  c'libusb_transfer'iso_packet_desc :: [C'libusb_iso_packet_descriptor]
} deriving (Eq,Show)
p'libusb_transfer'dev_handle p = plusPtr p 0
p'libusb_transfer'dev_handle :: Ptr (C'libusb_transfer) -> Ptr (Ptr C'libusb_device_handle)
p'libusb_transfer'flags p = plusPtr p 4
p'libusb_transfer'flags :: Ptr (C'libusb_transfer) -> Ptr (Word8)
p'libusb_transfer'endpoint p = plusPtr p 5
p'libusb_transfer'endpoint :: Ptr (C'libusb_transfer) -> Ptr (CUChar)
p'libusb_transfer'type p = plusPtr p 6
p'libusb_transfer'type :: Ptr (C'libusb_transfer) -> Ptr (CUChar)
p'libusb_transfer'timeout p = plusPtr p 8
p'libusb_transfer'timeout :: Ptr (C'libusb_transfer) -> Ptr (CUInt)
p'libusb_transfer'status p = plusPtr p 12
p'libusb_transfer'status :: Ptr (C'libusb_transfer) -> Ptr (C'libusb_transfer_status)
p'libusb_transfer'length p = plusPtr p 16
p'libusb_transfer'length :: Ptr (C'libusb_transfer) -> Ptr (CInt)
p'libusb_transfer'actual_length p = plusPtr p 20
p'libusb_transfer'actual_length :: Ptr (C'libusb_transfer) -> Ptr (CInt)
p'libusb_transfer'callback p = plusPtr p 24
p'libusb_transfer'callback :: Ptr (C'libusb_transfer) -> Ptr (C'libusb_transfer_cb_fn)
p'libusb_transfer'user_data p = plusPtr p 28
p'libusb_transfer'user_data :: Ptr (C'libusb_transfer) -> Ptr (Ptr ())
p'libusb_transfer'buffer p = plusPtr p 32
p'libusb_transfer'buffer :: Ptr (C'libusb_transfer) -> Ptr (Ptr CUChar)
p'libusb_transfer'num_iso_packets p = plusPtr p 36
p'libusb_transfer'num_iso_packets :: Ptr (C'libusb_transfer) -> Ptr (CInt)
p'libusb_transfer'iso_packet_desc p = plusPtr p 40
p'libusb_transfer'iso_packet_desc :: Ptr (C'libusb_transfer) -> Ptr (C'libusb_iso_packet_descriptor)
instance Storable C'libusb_transfer where
  sizeOf _ = 40
  alignment = sizeOf
  peek p = do
    v0 <- peekByteOff p 0
    v1 <- peekByteOff p 4
    v2 <- peekByteOff p 5
    v3 <- peekByteOff p 6
    v4 <- peekByteOff p 8
    v5 <- peekByteOff p 12
    v6 <- peekByteOff p 16
    v7 <- peekByteOff p 20
    v8 <- peekByteOff p 24
    v9 <- peekByteOff p 28
    v10 <- peekByteOff p 32
    v11 <- peekByteOff p 36
    v12 <- return []
    return $ C'libusb_transfer v0 v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12
  poke p (C'libusb_transfer v0 v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12) = do
    pokeByteOff p 0 v0
    pokeByteOff p 4 v1
    pokeByteOff p 5 v2
    pokeByteOff p 6 v3
    pokeByteOff p 8 v4
    pokeByteOff p 12 v5
    pokeByteOff p 16 v6
    pokeByteOff p 20 v7
    pokeByteOff p 24 v8
    pokeByteOff p 28 v9
    pokeByteOff p 32 v10
    pokeByteOff p 36 v11
    pokeArray (plusPtr p 40) v12
    return ()

{-# LINE 41 "src/Bindings/Libusb/Asynchronous.hsc" #-}

type C'libusb_transfer_cb_fn = FunPtr (Ptr C'libusb_transfer -> IO ())
foreign import ccall "wrapper" mk'libusb_transfer_cb_fn
  :: (Ptr C'libusb_transfer -> IO ()) -> IO C'libusb_transfer_cb_fn
foreign import ccall "dynamic" mK'libusb_transfer_cb_fn
  :: C'libusb_transfer_cb_fn -> (Ptr C'libusb_transfer -> IO ())

{-# LINE 43 "src/Bindings/Libusb/Asynchronous.hsc" #-}

type C'libusb_transfer_status = CUInt

{-# LINE 45 "src/Bindings/Libusb/Asynchronous.hsc" #-}

c'LIBUSB_TRANSFER_COMPLETED = 0
c'LIBUSB_TRANSFER_COMPLETED :: (Num a) => a

{-# LINE 47 "src/Bindings/Libusb/Asynchronous.hsc" #-}
c'LIBUSB_TRANSFER_ERROR = 1
c'LIBUSB_TRANSFER_ERROR :: (Num a) => a

{-# LINE 48 "src/Bindings/Libusb/Asynchronous.hsc" #-}
c'LIBUSB_TRANSFER_TIMED_OUT = 2
c'LIBUSB_TRANSFER_TIMED_OUT :: (Num a) => a

{-# LINE 49 "src/Bindings/Libusb/Asynchronous.hsc" #-}
c'LIBUSB_TRANSFER_CANCELLED = 3
c'LIBUSB_TRANSFER_CANCELLED :: (Num a) => a

{-# LINE 50 "src/Bindings/Libusb/Asynchronous.hsc" #-}
c'LIBUSB_TRANSFER_STALL = 4
c'LIBUSB_TRANSFER_STALL :: (Num a) => a

{-# LINE 51 "src/Bindings/Libusb/Asynchronous.hsc" #-}
c'LIBUSB_TRANSFER_NO_DEVICE = 5
c'LIBUSB_TRANSFER_NO_DEVICE :: (Num a) => a

{-# LINE 52 "src/Bindings/Libusb/Asynchronous.hsc" #-}
c'LIBUSB_TRANSFER_OVERFLOW = 6
c'LIBUSB_TRANSFER_OVERFLOW :: (Num a) => a

{-# LINE 53 "src/Bindings/Libusb/Asynchronous.hsc" #-}

type C'libusb_transfer_flags = CUInt

{-# LINE 55 "src/Bindings/Libusb/Asynchronous.hsc" #-}

c'LIBUSB_TRANSFER_SHORT_NOT_OK = 1
c'LIBUSB_TRANSFER_SHORT_NOT_OK :: (Num a) => a

{-# LINE 57 "src/Bindings/Libusb/Asynchronous.hsc" #-}
c'LIBUSB_TRANSFER_FREE_BUFFER = 2
c'LIBUSB_TRANSFER_FREE_BUFFER :: (Num a) => a

{-# LINE 58 "src/Bindings/Libusb/Asynchronous.hsc" #-}
c'LIBUSB_TRANSFER_FREE_TRANSFER = 4
c'LIBUSB_TRANSFER_FREE_TRANSFER :: (Num a) => a

{-# LINE 59 "src/Bindings/Libusb/Asynchronous.hsc" #-}

foreign import ccall "libusb_alloc_transfer" c'libusb_alloc_transfer
  :: CInt -> IO (Ptr C'libusb_transfer)
foreign import ccall "&libusb_alloc_transfer" p'libusb_alloc_transfer
  :: FunPtr (CInt -> IO (Ptr C'libusb_transfer))

{-# LINE 62 "src/Bindings/Libusb/Asynchronous.hsc" #-}
foreign import ccall "libusb_free_transfer" c'libusb_free_transfer
  :: Ptr C'libusb_transfer -> IO ()
foreign import ccall "&libusb_free_transfer" p'libusb_free_transfer
  :: FunPtr (Ptr C'libusb_transfer -> IO ())

{-# LINE 63 "src/Bindings/Libusb/Asynchronous.hsc" #-}
foreign import ccall "libusb_submit_transfer" c'libusb_submit_transfer
  :: Ptr C'libusb_transfer -> IO CInt
foreign import ccall "&libusb_submit_transfer" p'libusb_submit_transfer
  :: FunPtr (Ptr C'libusb_transfer -> IO CInt)

{-# LINE 64 "src/Bindings/Libusb/Asynchronous.hsc" #-}
foreign import ccall "libusb_cancel_transfer" c'libusb_cancel_transfer
  :: Ptr C'libusb_transfer -> IO CInt
foreign import ccall "&libusb_cancel_transfer" p'libusb_cancel_transfer
  :: FunPtr (Ptr C'libusb_transfer -> IO CInt)

{-# LINE 65 "src/Bindings/Libusb/Asynchronous.hsc" #-}
foreign import ccall "inline_libusb_control_transfer_get_data" c'libusb_control_transfer_get_data
  :: Ptr C'libusb_transfer -> IO (Ptr CUChar)

{-# LINE 67 "src/Bindings/Libusb/Asynchronous.hsc" #-}
foreign import ccall "inline_libusb_control_transfer_get_setup" c'libusb_control_transfer_get_setup
  :: Ptr C'libusb_transfer -> IO (Ptr C'libusb_control_setup)

{-# LINE 69 "src/Bindings/Libusb/Asynchronous.hsc" #-}
foreign import ccall "inline_libusb_fill_control_setup" c'libusb_fill_control_setup
  :: Ptr CUChar -> Word8 -> Word8 -> Word16 -> Word16 -> Word16 -> IO ()

{-# LINE 71 "src/Bindings/Libusb/Asynchronous.hsc" #-}
foreign import ccall "inline_libusb_fill_control_transfer" c'libusb_fill_control_transfer
  :: Ptr C'libusb_transfer -> Ptr C'libusb_device_handle -> Ptr CUChar -> C'libusb_transfer_cb_fn -> Ptr () -> CUInt -> IO ()

{-# LINE 74 "src/Bindings/Libusb/Asynchronous.hsc" #-}
foreign import ccall "inline_libusb_fill_bulk_transfer" c'libusb_fill_bulk_transfer
  :: Ptr C'libusb_transfer -> Ptr C'libusb_device_handle -> CUChar -> Ptr CUChar -> CInt -> C'libusb_transfer_cb_fn -> Ptr () -> CUInt -> IO ()

{-# LINE 77 "src/Bindings/Libusb/Asynchronous.hsc" #-}
foreign import ccall "inline_libusb_fill_interrupt_transfer" c'libusb_fill_interrupt_transfer
  :: Ptr C'libusb_transfer -> Ptr C'libusb_device_handle -> CUChar -> Ptr CUChar -> CInt -> C'libusb_transfer_cb_fn -> Ptr () -> CUInt -> IO ()

{-# LINE 80 "src/Bindings/Libusb/Asynchronous.hsc" #-}
foreign import ccall "inline_libusb_fill_iso_transfer" c'libusb_fill_iso_transfer
  :: Ptr C'libusb_transfer -> Ptr C'libusb_device_handle -> CUChar -> Ptr CUChar -> CInt -> CInt -> C'libusb_transfer_cb_fn -> Ptr () -> CUInt -> IO ()

{-# LINE 83 "src/Bindings/Libusb/Asynchronous.hsc" #-}
foreign import ccall "inline_libusb_set_iso_packet_lengths" c'libusb_set_iso_packet_lengths
  :: Ptr C'libusb_transfer -> CUInt -> IO ()

{-# LINE 85 "src/Bindings/Libusb/Asynchronous.hsc" #-}
foreign import ccall "inline_libusb_get_iso_packet_buffer" c'libusb_get_iso_packet_buffer
  :: Ptr C'libusb_transfer -> CUInt -> IO (Ptr CUChar)

{-# LINE 87 "src/Bindings/Libusb/Asynchronous.hsc" #-}
foreign import ccall "inline_libusb_get_iso_packet_buffer_simple" c'libusb_get_iso_packet_buffer_simple
  :: Ptr C'libusb_transfer -> CUInt -> IO (Ptr CUChar)

{-# LINE 89 "src/Bindings/Libusb/Asynchronous.hsc" #-}