վ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  Safe-Inferred  Safe-Inferred NoneM bits s e b extract bit s to e (including) from b. between n b e tests if n is between the given bounds b and e (including).A generalized  that works on any  type.A generalized  that returns any  type.mapPeekArray f n a applies the monadic function f to each of the n elements of the array a# and returns the results in a list.Monadic if...then...else...   Safe-Inferred  Safe-InferredUnsafe+0FType of USB exceptions.Other exception.=Operation not supported or unimplemented on this platform.Insufficient memory.0System call interrupted (perhaps due to signal).Pipe exception.+If the device offered to much data. See  9http://libusb.sourceforge.net/api-1.0/packetoverflow.htmlPackets and overflows in the libusb documentation.Operation timed out. Resource busy. Entity not found. /No such device (it may have been disconnected). Access denied (insufficient permissions). It may help to run your program with elevated privileges or change the permissions of your device using something like udev. Invalid parameter.Input/output exception.7A lock is in one of two states: "locked" or "unlocked".Handy type synonym for the libusb transfer functions. (Host-endian) (Host-endian)CHandy type synonym that names the parameters of a control transfer. Status of a terminated transfer. =Not all bytes were transferred within the maximum allowed " period.!9All bytes were transferred within the maximum allowed " period."A timeout in milliseconds. A timeout defines how long a transfer should wait before giving up due to no response being received. Use  for no timeout.#Number of bytes transferred.$XHandy type synonym for write transfers that must exactly write all the given bytes. An  is thrown otherwise.%'Handy type synonym for write transfers.A  WriteAction is a function which takes a  to write and a ". The function returns an c action which, when exectued, returns the number of bytes that were actually written paired with a + flag which indicates whether the transfer ! or  .&`Handy type synonym for read transfers that must exactly read the specified number of bytes. An  is thrown otherwise.'&Handy type synonym for read transfers.A  ReadAction is a function which takes a #, which defines how many bytes to read and a ". The function returns an G action which, when executed, performs the actual read and returns the  that was read paired with a + flag which indicates whether the transfer ! or  .(%Type of indici of string descriptors.-Can be retrieved by all the *StrIx functions.+mThe language ID consists of the primary language identifier and the sublanguage identififier as described in: 2http://www.usb.org/developers/docs/USB_LANGIDs.pdf0For a mapping between IDs and languages see the  2http://hackage.haskell.org/package/usb-id-databaseusb-id-database package. To see which + s are supported by a device see .,>Number of additional transaction oppurtunities per microframe.,See table 9-13 of the USB 2.0 specification.-2 additional (3 per microframe).1 additional (2 per microframe)/#None (1 transaction per microframe)42See section 5.12.4.2 of the USB 2.0 specification.82See section 5.12.4.1 of the USB 2.0 specification.9Synchronized to the USB s SOF (Start Of Frame):CSynchronized using feedback or feedforward data rate information;=Unsynchronized, although sinks provide data rate feedback.=>Describes what types of transfers are allowed on the endpoint.>rInterrupt transfers are typically non-periodic, small device "initiated" communication requiring bounded latency.?1Bulk transfers can be used for large bursty data.@:Isochronous transfers occur continuously and periodically.AHControl transfers are typically used for command and status operations.BkThe USB 2.0 specification specifies that the endpoint attributes only describe the endpoint transfer type.C4The direction of data transfer relative to the host.D;In transfer direction (device -> host) used for reading.E<Out transfer direction (host -> device) used for writing.FThe address of an endpoint.HMust be >= 0 and <= 15J>A structure representing the standard USB endpoint descriptor.LThis descriptor is documented in section 9.6.3 of the USB 2.0 specification.)This structure can be retrieved by using [.L8The address of the endpoint described by the descriptor.MHAttributes which apply to the endpoint when it is configured using the e.NAMaximum packet size the endpoint is capable of sending/receiving.OInterval for polling endpoint for data transfers. Expressed in frames or microframes depending on the device operating speed (i.e., either 1 millisecond or 125 s units).PFor audio devices only:9 the rate at which synchronization feedback is provided.QFor audio devices only:# the address of the synch endpoint.RExtra descriptors. If libusbb encounters unknown endpoint descriptors, it will store them here, should you wish to parse them.S?A structure representing the standard USB interface descriptor.LThis descriptor is documented in section 9.6.5 of the USB 2.0 specification.&This structure can be retrieved using i.UNumber of the interface.V=Value used to select the alternate setting for the interface.W$USB-IF class code for the interface.X:USB-IF subclass code for the interface, qualified by the W value.Y:USB-IF protocol code for the interface, qualified by the W and X values.Z=Optional index of string descriptor describing the interface.[/Vector of endpoints supported by the interface.\Extra descriptors. If libusbc encounters unknown interface descriptors, it will store them here, should you wish to parse them.]HAn interface is represented as a vector of alternate interface settings.`The Remote Wakeup field indicates whether the device is currently enabled to request remote wakeup. The default mode for devices that support remote wakeup is disabled.aPThe Self Powered field indicates whether the device is currently self-poweredbgThe USB 2.0 specification specifies that the configuration attributes only describe the device status.cCA structure representing the standard USB configuration descriptor.LThis descriptor is documented in section 9.6.3 of the USB 2.0 specification.#This structure can be retrieved by .e'Identifier value for the configuration.fAOptional index of string descriptor describing the configuration.gConfiguration characteristics.hMaximum power consumption of the USB device from the bus in the configuration when the device is fully operational. Expressed in 2 mA units (i.e., 50 = 100 mA).i4Vector of interfaces supported by the configuration.jExtra descriptors. If libusbg encounters unknown configuration descriptors, it will store them here, should you wish to parse them.n<A structure representing the standard USB device descriptor.LThis descriptor is documented in section 9.6.1 of the USB 2.0 specification.#This structure can be retrieved by  deviceDesc.p!USB specification release number.q!USB-IF class code for the device.r6USB-IF subclass code for the device, qualified by the q value.s6USB-IF protocol code for the device, qualified by the q and r values.t#Maximum packet size for endpoint 0.uUSB-IF vendor ID.vUSB-IF product ID.wDevice release number.x<Optional index of string descriptor describing manufacturer.y7Optional index of string descriptor describing product.zDOptional index of string descriptor containing device serial number.{"Number of possible configurations.|,Identifier for interface alternate settings.Can be retrieved by V.}Identifier for interfaces.Can be retrieved by U.~Identifier for configurations.Can be retrieved by  or by e.4Abstract type representing a handle of a USB device.You can acquire a handle from .A device handle is used to perform I/O and other operations. When finished with a device handle you should close it by applying  to it. Retrieve the  from the .?Abstract type representing a USB device detected on the system.*You can only obtain a USB device from the  function.lCertain operations can be performed on a device, but in order to do any I/O you will have to first obtain a  using .Just because you have a reference to a device does not mean it is necessarily usable. The device may have been unplugged, you may not have permission to operate such device or another process or driver may be using the device.STo get additional information about a device you can retrieve its descriptor using .This reference to the E is needed so that it won't gets garbage collected. The finalizer  libusb_exit' is run only when all references to Devices are gone.Message verbosityaInformational messages are printed to stdout, warning and error messages are printed to stderr0Warning and error messages are printed to stderr$Error messages are printed to stderr+No messages are ever printed by the library?A function to wait for the termination of a submitted transfer.)Abstract type representing a USB session.The concept of individual sessions allows your program to use multiple threads that can independently use this library without interfering with eachother.(Sessions are created and initialized by > and are automatically closed when they are garbage collected."The only functions that receive a Ctx are  and .(Create and initialize a new USB context.This function may throw s.Note that the internal libusbo event handling can return errors. These errors occur in the thread that is executing the event handling loop.  will print these errors to m. If you need to handle the errors yourself (for example log them in an application specific way) please use .Like X but enables you to specify the way errors should be handled that occur while handling libusb events./Checks if the system supports asynchronous I/O.V means asynchronous I/O is not supported so synchronous I/O should be used instead. wait/ means that asynchronous I/O is supported. The wait7 function can be used to wait for submitted transfers.Set message verbosity.The default level is . This means no messages are ever printed. If you choose to increase the message verbosity level you must ensure that your application does not close the stdout/stderr file descriptors.*You are advised to set the debug level to . Libusb is conservative with its message logging. Most of the time it will only log messages that explain error conditions and other oddities. This will help you debug your software.The LIBUSB_DEBUG environment variable overrules the debug level set by this function. The message verbosity is fixed to the value in the environment variable if it is defined.If libusbe was compiled without any message logging, this function does nothing: you'll never get any messages.If libusby was compiled with verbose debug message logging, this function does nothing: you'll always get messages from all levels.AReturns a vector of USB devices currently attached to the system.3This is your entry point into finding a USB device. Exceptions: on a memory allocation failure.4The number of the bus that a device is connected to.8The address of the device on the bus it is connected to.)Open a device and obtain a device handle.=A handle allows you to perform I/O on the device in question.CThis is a non-blocking function; no requests are sent over the bus.It is advisable to use L because it automatically closes the device when the computation terminates. Exceptions:) if there is a memory allocation failure. * if the user has insufficient permissions. % if the device has been disconnected.Another .Close a device handle.CShould be called on all open handles before your application exits.CThis is a non-blocking function; no requests are sent over the bus.withDeviceHandle dev act opens the  dev4 and passes the resulting handle to the computation act). The handle will be closed on exit from withDeviceHandle: whether by normal termination or by raising an exception.:Determine the value of the currently active configuration.You could formulate your own control request to obtain this information, but this function has the advantage that it may be able to retrieve the information from operating system caches (no I/O involved).If the OS does not cache this information, then this function will block while a control transfer is submitted to retrieve the information.This function returns ( if the device is in unconfigured state. Exceptions: % if the device has been disconnected.Another .*Set the active configuration for a device.The operating system may or may not have already set an active configuration on the device. It is up to your application to ensure the correct configuration is selected before you attempt to claim interfaces and perform other operations.TIf you call this function on a device already configured with the selected configuration, then this function will act as a lightweight device reset: it will issue a SET_CONFIGURATION request using the current configuration, causing most USB-related device state to be reset (altsetting reset to zero, endpoint halts cleared, toggles reset).mYou cannot change/reset configuration if your application has claimed interfaces - you should free them with g first. You cannot change/reset configuration if other applications or drivers have claimed interfaces.A configuration value of  will put the device in an unconfigured state. The USB specification states that a configuration value of 0 does this, however buggy devices exist which actually have a configuration 0.You should always use this function rather than formulating your own SET_CONFIGURATION control request. This is because the underlying operating system needs to know when such changes happen.This is a blocking function. Exceptions: / if the requested configuration does not exist. % if interfaces are currently claimed. $ if the device has been disconnectedAnother .,Claim an interface on a given device handle.`You must claim the interface you wish to use before you can perform I/O on any of its endpoints.~It is legal to attempt to claim an already-claimed interface, in which case this function just returns without doing anything.Claiming of interfaces is a purely logical operation; it does not cause any requests to be sent over the bus. Interface claiming is used to instruct the underlying operating system that your application wishes to take ownership of the interface. This is a non-blocking function. Exceptions: + if the requested interface does not exist. % if the interface is already claimed. % if the device has been disconnected.Another .-Release an interface previously claimed with .IYou should release all claimed interfaces before closing a device handle.This is a blocking function. A SET_INTERFACE control request will be sent to the device, resetting interface state to the first alternate setting. Exceptions: " if the interface was not claimed. $ if the device has been disconnectedAnother .withClaimedInterfacec claims the interface on the given device handle then executes the given computation. On exit from withClaimedInterfaceU, the interface is released whether by normal termination or by raising an exception./Activate an alternate setting for an interface.5The interface must have been previously claimed with .You should always use this function rather than formulating your own SET_INTERFACE control request. This is because the underlying operating system needs to know when such changes happen.This is a blocking function. Exceptions: W if the interface was not claimed or the requested alternate setting does not exist. % if the device has been disconnected.Another ./Clear the halt/stall condition for an endpoint.fEndpoints with halt status are unable to receive or transmit data until the halt condition is stalled.VYou should cancel all pending transfers before attempting to clear the halt condition.This is a blocking function. Exceptions:  if the endpoint does not exist. % if the device has been disconnected.Another .2Perform a USB port reset to reinitialize a device.sThe system will attempt to restore the previous configuration and alternate settings after the reset has completed.If the reset fails, the descriptors change, or the previous state cannot be restored, the device will appear to be disconnected and reconnected. This means that the device handle is no longer valid (you should close it) and rediscover the device. A  - is raised to indicate that this is the case.DThis is a blocking function which usually incurs a noticeable delay. Exceptions: J if re-enumeration is required, or if the device has been disconnected.Another .7Determine if a kernel driver is active on an interface.gIf a kernel driver is active, you cannot claim the interface, and libusb will be unable to perform I/O. Exceptions: % if the device has been disconnected.Another .)Detach a kernel driver from an interface.LIf successful, you will then be able to claim the interface and perform I/O. Exceptions:  if no kernel driver was active. ! if the interface does not exist. % if the device has been disconnected.Another .LRe-attach an interface's kernel driver, which was previously detached using . Exceptions:  if no kernel driver was active. ! if the interface does not exist. % if the device has been disconnected. ] if the driver cannot be attached because the interface is claimed by a program or driver.Another .BIf a kernel driver is active on the specified interface the driver is detached and the given action is executed. If the action terminates, whether by normal termination or by raising an exception, the kernel driver is attached again. If a kernel driver is not active on the specified interface the action is just executed. Exceptions: % if the device has been disconnected.Another .Calculate the maximum packet size which a specific endpoint is capable of sending or receiving in the duration of 1 microframe.If acting on an @ or >+ endpoint, this function will multiply the 2 by the additional 31. If acting on another type of endpoint only the 2 is returned..This function is mainly useful for setting up  isochronous transfers.1Get the USB device descriptor for a given device.KThis is a non-blocking function; the device descriptor is cached in memory.This function may throw s.VUnmarshal a a 16bit word as a release number. The 16bit word should be encoded as a  1http://en.wikipedia.org/wiki/Binary-coded_decimalBinary 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 .6Get a USB configuration descriptor based on its index.^This is a non-blocking function which does not involve any requests being sent to the device. Exceptions: % if the configuration does not exist.Another .sUnmarshal an 8bit word as an endpoint address. This function is primarily used when unmarshalling USB descriptors.:Marshal an endpoint address so that it can be used by the libusb transfer functions.@The size in number of bytes of the header of string descriptors.DCharacters are encoded as UTF16LE so each character takes two bytes.)Retrieve a vector of supported languages.This function may throw s./putStrDesc devHndl strIx langId maxSize dataPtr! retrieves the string descriptor strIx in the language langId from the devHndl and writes at most maxSize8 bytes from that string descriptor to the location that dataPtr2 points to. So ensure there is at least space for maxSizei bytes there. Next, the header of the string descriptor is checked for correctness. If it's incorrect an A is thrown. Finally, the size reported in the header is returned.+Retrieve a string descriptor from a device.This function may throw s.NRetrieve a string descriptor from a device using the first supported language.This function may throw s.&A timeout of 0 denotes no timeout so:  noTimeout = 0.Perform a USB control% request that does not transfer data. Exceptions: if the transfer timed out.7 if the control request was not supported by the device % if the device has been disconnected.Another .Perform a USB control read. Exceptions:7 if the control request was not supported by the device % if the device has been disconnected.Another ."A convenience function similar to W which checks if the specified number of bytes to read were actually read. Throws an  if this is not the case.Perform a USB control write. Exceptions:7 if the control request was not supported by the device % if the device has been disconnected.Another ."A convenience function similar to J which checks if the given bytes were actually fully written. Throws an  if this is not the case.Perform a USB bulk read. Exceptions: if the endpoint halted.) if the device offered more data, see  9http://libusb.sourceforge.net/api-1.0/packetoverflow.htmlPackets and overflows in the libusb documentation. % if the device has been disconnected.Another .Perform a USB bulk write. Exceptions: if the endpoint halted.) if the device offered more data, see  9http://libusb.sourceforge.net/api-1.0/packetoverflow.htmlPackets and overflows in the libusb documentation. % if the device has been disconnected.Another .Perform a USB  interrupt read. Exceptions: if the endpoint halted.) if the device offered more data, see  9http://libusb.sourceforge.net/api-1.0/packetoverflow.htmlPackets and overflows in the libusb documentation. % if the device has been disconnected.Another .Perform a USB  interrupt write. Exceptions: if the endpoint halted.) if the device offered more data, see  9http://libusb.sourceforge.net/api-1.0/packetoverflow.htmlPackets and overflows in the libusb documentation. % if the device has been disconnected.Another .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).A  may be thrown. Create a FunPtrX to the given transfer callback function and pass it to the continuation function. The FunPtrh is automatically freed when the continuation terminates (whether normally or by raising an exception).&Create a lock in the "unlocked" state. Acquires the ,. Blocks if another thread has acquired the .acquire behaves as follows:When the state is "unlocked" acquire changes the state to "locked".When the state is "locked" acquire blocks until a call to a in another thread wakes the calling thread. Upon awakening it will change the state to "locked".release9 changes the state to "unlocked" and returns immediately.KThe behaviour is undefined when a lock in the "unlocked" state is released!$If there are any threads blocked on  the thread that first called acquire will be woken up.Perform a USB  isochronous read.WARNING:* You need to enable the threaded runtime ( -threadedK) for this function to work correctly. It throws a runtime error otherwise! Exceptions: if the endpoint halted.) if the device offered more data, see  9http://libusb.sourceforge.net/api-1.0/packetoverflow.htmlPackets and overflows in the libusb documentation. % if the device has been disconnected.Another .Perform a USB  isochronous write.WARNING:* You need to enable the threaded runtime ( -threadedK) for this function to work correctly. It throws a runtime error otherwise! Exceptions: if the endpoint halted.) if the device offered more data, see  9http://libusb.sourceforge.net/api-1.0/packetoverflow.htmlPackets and overflows in the libusb documentation. % if the device has been disconnected.Another .LAn isochronous packet descriptor with all fields zero except for the length.handleUSBException action executes action. If action$ returned an error code other than 'c\'LIBUSB_SUCCESS', the error is converted to a  and thrown.checkUSBException action executes action. If action< returned a negative integer the integer is converted to a . and thrown. If not, the integer is returned. Convert a C'libusb_error to a  . If the C'libusb_error is unknown an  is thrown.Association list mapping s to s. A general .) that is thrown when the number of bytes read% doesn't equal the requested number.) that is thrown when the number of bytes written% doesn't equal the requested number.Devices are shown as: Bus < > Device <>  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~    <Maximum number of characters in the requested string. An H will be thrown when the requested string is larger than this number.<Maximum number of characters in the requested string. An H will be thrown when the requested string is larger than this number. Encoded endpoint addressEncoded endpoint addressSizes of isochronous packets !"#$  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~       ! "#$%&'()*+,/.-012347658<;:9=A@?>BCEDFGHIJKLMNOPQRS TUVWXYZ[\]^_`abcdefghijklmn opqrstuvwxyz{|}~      !"#$(c) 2009 2012 Bas van DijkBSD3 (see the file LICENSE)#Bas van Dijk <v.dijk.bas@gmail.com> Trustworthy (c) 2009 2012 Bas van DijkBSD3 (see the file LICENSE)#Bas van Dijk <v.dijk.bas@gmail.com> Trustworthy(c) 2009 2012 Bas van DijkBSD3 (see the file LICENSE)#Bas van Dijk <v.dijk.bas@gmail.com> Trustworthy|}~~}|(c) 2009 2012 Bas van DijkBSD3 (see the file LICENSE)#Bas van Dijk <v.dijk.bas@gmail.com> TrustworthyZ()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{Znopqrstuvwxyz{mlkcdefghijb^_`a]STUVWXYZ[\JKLMNOPQRFGHICEDB=A@?>8<;:947650123,/.-+*)((c) 2009 2012 Bas van DijkBSD3 (see the file LICENSE)#Bas van Dijk <v.dijk.bas@gmail.com> Trustworthy9" !"#$%&'"'&%$#"! (c) 2009 2012 Bas van DijkBSD3 (see the file LICENSE)#Bas van Dijk <v.dijk.bas@gmail.com> Trustworthy  (c) 2009 2012 Bas van Dijk BSD-style (see the file LICENSE)#Bas van Dijk <v.dijk.bas@gmail.com> Trustworthy  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~(c) 2009 2012 Bas van DijkBSD3 (see the file LICENSE)#Bas van Dijk <v.dijk.bas@gmail.com>Unsafe(c) 2009 2012 Bas van DijkBSD3 (see the file LICENSE)#Bas van Dijk <v.dijk.bas@gmail.com> Trustworthy+ See: USB 2.0 Spec. table 9-7 See: USB 2.0 Spec. section 9.4.9 See: USB 2.0 Spec. section 9.4.7+This function is for testing purposes only!You should normally use System.USB.DeviceHandling.b because that function notifies the underlying operating system about the changed configuration. See: USB 2.0 Spec. section 9.4.2+This function is for testing purposes only!You should normally use System.USB.DeviceHandling.M because that functon may exploit operating system caches (no I/O involved). See: USB 2.0 Spec. section 9.4.1 See: USB 2.0 Spec. section 9.4.9NSee: USB 2.0 Spec. section 9.4.9 TODO: What about vendor-specific test modes? See: USB 2.0 Spec. section 9.4.4 See: USB 2.0 Spec. section 9.4.5 See: USB 2.0 Spec. section 9.4.5 See: USB 2.0 Spec. section 9.4.6PThis request is used to set and then report an endpoint's synchronization frame.1When an endpoint supports isochronous transfers, the endpoint may also require per-frame transfers to vary in size according to a specific pattern. The host and the endpoint must agree on which frame the repeating pattern begins. The number of the frame in which the pattern began is returned to the host.GIf a high-speed device supports the Synch Frame request, it must internally synchronize itself to the zeroth microframe and have a time notion of classic frame. Only the frame number is used to synchronize and reported by the device endpoint (i.e., no microframe number). The endpoint must synchronize to the zeroth microframe.This value is only used for isochronous data transfers using implicit pattern synchronization. If the specified endpoint does not support this request, then the device will respond with a Request Error.!See: USB 2.0 Spec. section 9.4.11%&'%&'(  !"#$%&'()*+,-./0123456789:;<=>?@@ABCDEFGHIJKLMNOPQRSTUUVWXXYZ[\]^_``abcdefghijjklmnnopqrstuvwxxyz{|}~           !"#$%&'()*+,-./012345678 usb-1.2.0.1System.USB.InternalSystem.USB.Exceptions System.USB.IOSystem.USB.DescriptorsSystem.USB.DeviceHandlingSystem.USB.EnumerationSystem.USB.Initialization$System.USB.IO.StandardDeviceRequestsSystemEventManagerTimevalUtilsEventPollSystem.USB.Base System.USB pokeVector USBExceptionOtherExceptionNotSupportedExceptionNoMemExceptionInterruptedException PipeExceptionOverflowExceptionTimeoutException BusyExceptionNotFoundExceptionNoDeviceExceptionAccessExceptionInvalidParamException IOExceptionLockC'TransferTypeC'TransferFuncIndexValueRequest RecipientToOther ToEndpoint ToInterfaceToDevice RequestTypeVendorClassStandard ControlActionStatusTimedOut CompletedTimeoutSizeWriteExactAction WriteActionReadExactAction ReadActionStrIx SubLangId PrimaryLangIdLangIdTransactionOpportunitiesTwoOneZero MaxPacketSize maxPacketSizetransactionOpportunitiesUsageImplicitFeedbackDataSynchronization SynchronousAdaptive AsynchronousNoSynchronization TransferType InterruptBulk IsochronousControlEndpointAttribsTransferDirectionInOutEndpointAddressendpointNumbertransferDirection EndpointDescendpointAddressendpointAttribsendpointMaxPacketSizeendpointIntervalendpointRefreshendpointSynchAddress endpointExtra InterfaceDescinterfaceNumberinterfaceAltSettinginterfaceClassinterfaceSubClassinterfaceProtocolinterfaceStrIxinterfaceEndpointsinterfaceExtra Interface DeviceStatus remoteWakeup selfPowered ConfigAttribs ConfigDesc configValue configStrIx configAttribsconfigMaxPowerconfigInterfaces configExtra ProductIdVendorId ReleaseNumber DeviceDescdeviceUSBSpecReleaseNumber deviceClassdeviceSubClassdeviceProtocoldeviceMaxPacketSize0deviceVendorIddeviceProductIddeviceReleaseNumberdeviceManufacturerStrIxdeviceProductStrIxdeviceSerialNumberStrIxdeviceNumConfigsInterfaceAltSettingInterfaceNumber ConfigValue DeviceHandle getDeviceDevice Verbosity PrintInfo PrintWarnings PrintErrors PrintNothingWaitCtxnewCtxnewCtx'getWaitsetDebug getDevices busNumber deviceAddresswithDevHndlPtr openDevice closeDevicewithDeviceHandle getConfig setConfigclaimInterfacereleaseInterfacewithClaimedInterfacesetInterfaceAltSetting clearHalt resetDevicekernelDriverActivedetachKernelDriverattachKernelDriverwithDetachedKernelDrivermaxIsoPacketSize getDeviceDescunmarshalReleaseNumberunmarshalStrIx getConfigDescunmarshalEndpointAddressmarshalEndpointAddress getLanguages getStrDescgetStrDescFirstLang noTimeoutcontrol readControlreadControlExact writeControlwriteControlExactreadBulk writeBulk readInterruptwriteInterruptallocaTransfer withCallbacknewLockacquirereleasereadIsochronouswriteIsochronousinitIsoPacketDescconvertUSBException ioExceptionincompleteReadExceptionincompleteWriteException FrameNumberTestModeTest_Force_Enable Test_Packet Test_SE0_NAKTest_KTest_JsetHaltclearRemoteWakeupsetRemoteWakeupsetStandardTestModegetInterfaceAltSettinggetDeviceStatusgetEndpointStatussetDeviceAddress synchFramebaseGHC.Event.ThreadgetSystemEventManagerCTimeval MkCTimeval withTimeval$fStorableCTimevalbitsbetween genToEnumGHC.EnumtoEnumGHC.RealIntegral genFromEnumfromEnum mapPeekArrayifM peekVector allocaPeekunconsGHC.Event.InternalevtWriteevtReadtoEventbytestring-0.10.4.0Data.ByteString.Internal ByteStringghc-prim GHC.TypesIOgetCtxGHC.IO.Handle.FDstderr Data.MaybeNothingJuststrDescHeaderSizecharSize putStrDeschandleUSBExceptioncheckUSBExceptionGHC.Errerrorlibusb_error_to_USBExceptionbindings-libusb-1.4.4.1Bindings.Libusb.MiscellaneousC'libusb_error $fShowDevice getDevHndlPtr getDevFrgnPtr ctxGetWait getCtxFrgnPtr withCtxPtr libusb_initnewCtxNoEventManager withDevicePtrconvertDeviceDescconvertConfigDescunmarshalConfigAttribsgetExtraconvertInterfaceconvertInterfaceDescconvertEndpointDescunmarshalEndpointAttribsunmarshalMaxPacketSizeunmarshalLangId marshalLangIdmarshalRequestTypecontrolSetupSizecontrolEndpointcontrolTransferSyncreadTransferSyncwriteTransferSync transferSyncreadTransferAsyncwriteTransferAsync transferAsyncwithTerminatedTransfer getPacketsgetSizescopyIsoscreateAndTrimNoOffsetincompleteException moduleError thisModuleneedThreadedRTSError$fExceptionUSBException$fShowDeviceHandle$fEqDeviceHandle $fEqDevice$fEqCtx haltFeatureremoteWakeupFeaturetestModeFeature