{-# INCLUDE <bindings.macros.h> #-}
{-# INCLUDE <libusb.h> #-}
{-# LINE 1 "src/Bindings/Libusb/Asynchronous.hsc" #-}

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

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

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

module Bindings.Libusb.Asynchronous where
import Foreign
import Foreign.C
import Bindings.Libusb.HandlingAndEnumeration


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

{-# 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" #-}
data C'libusb_control_setup = C'libusb_control_setup {libusb_control_setup'bmRequestType :: Word8 , libusb_control_setup'bRequest :: Word8 , libusb_control_setup'wValue :: Word16 , libusb_control_setup'wIndex :: Word16 , libusb_control_setup'wLength :: 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 18 "src/Bindings/Libusb/Asynchronous.hsc" #-}


{-# LINE 20 "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" #-}
data C'libusb_iso_packet_descriptor = C'libusb_iso_packet_descriptor {libusb_iso_packet_descriptor'length :: CUInt , libusb_iso_packet_descriptor'actual_length :: CUInt , libusb_iso_packet_descriptor'status ::  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 24 "src/Bindings/Libusb/Asynchronous.hsc" #-}


{-# LINE 26 "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" #-}
data C'libusb_transfer = C'libusb_transfer {libusb_transfer'dev_handle :: Ptr  C'libusb_device_handle  , libusb_transfer'flags :: Word8 , libusb_transfer'endpoint :: CUChar , libusb_transfer'type :: CUChar , libusb_transfer'timeout :: CUInt , libusb_transfer'status ::  C'libusb_transfer_status  , libusb_transfer'length :: CInt , libusb_transfer'actual_length :: CInt , libusb_transfer'callback ::  C'libusb_transfer_cb_fn  , libusb_transfer'user_data :: Ptr () , libusb_transfer'buffer :: Ptr CUChar , libusb_transfer'num_iso_packets :: CInt}
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
  return $ C'libusb_transfer v0 v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11
 poke p (C'libusb_transfer v0 v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11  ) = 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
  return ()

{-# LINE 39 "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

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

type C'libusb_transfer_status = Word32

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

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

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

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

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

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

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

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

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

type C'libusb_transfer_flags = Word32

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

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

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

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

{-# LINE 57 "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 60 "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 61 "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 62 "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 63 "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 65 "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 67 "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 69 "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 72 "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 75 "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 78 "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 81 "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 83 "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 85 "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 87 "src/Bindings/Libusb/Asynchronous.hsc" #-}