module USB:sig..end
val handle_error : ('a -> 'b) -> 'a -> 'bhandle_unix_error f x applies f to x and returns the
result. If the exception USB.Error or Transport is raised, it
prints a message describing the error and exits with code 2.type error =
| |
Error_io |
(* | Error on IOs | *) |
| |
Error_invalid_param |
(* | Invalid parameter. If this error is raised, then there is a bug in ocaml-usb. Please fill a bug report in this case. | *) |
| |
Error_access |
(* | Access denied to a peripheral | *) |
| |
Error_no_device |
(* | No such device (it may have been disconnected) | *) |
| |
Error_not_found |
(* | Entity not found | *) |
| |
Error_busy |
(* | Resource busy | *) |
| |
Error_timeout |
(* | Operation timed out | *) |
| |
Error_overflow |
(* | Overflow | *) |
| |
Error_pipe |
(* | Pipe error | *) |
| |
Error_interrupted |
(* | System call interrupted (perhaps due to signal) | *) |
| |
Error_no_mem |
(* | Insufficient memory | *) |
| |
Error_not_supported |
(* | Operation not supported or unimplemented on this platform | *) |
| |
Error_other |
(* | Other error | *) |
exception Error of error * string
Error(error, func_name) is raised when libusb returns an
error. func_name is a the name of the function which
failed.val error_message : error -> stringerror_message error returns a human readable description of
the errortype direction =
| |
In |
| |
Out |
typeendpoint =int
val init : unit Lazy.tinit initialises libusb. This is automatically
done so you do not need to do it manually. By the way you can do
it to catch initialisation errors.val set_debug : [ `error | `quiet | `verbose | `warning ] -> unitset_debug level set the debug level.type device
val get_device_list : unit -> device listval get_bus_number : device -> intval get_device_address : device -> intval get_max_packet_size : device:device -> direction:direction -> endpoint:endpoint -> intget_max_packet_size ~device ~direction ~endpoint Convenience
function to retrieve the wMaxPacketSize value for a particular
endpoint in the active device configuration.type handle
typeinterface =int
val open_device : device -> handle
A handle allows you to perform I/O on the device in question.
val close : handle -> unitval open_device_with : vendor_id:int -> product_id:int -> handleopen_device_with ~vendor_id ~product_id
Convenience function for finding a device with a particular
idVendor/idProduct combination.
Raises Failure if the device is not found.
val get_device : handle -> deviceval kernel_driver_active : handle -> interface -> bool
If a kernel driver is active, you cannot claim the interface,
and libusb will be unable to perform I/O.
val detach_kernel_driver : handle -> interface -> unit
If successful, you will then be able to claim the interface and
perform I/O.
val attach_kernel_driver : handle -> interface -> unitUSB.detach_kernel_driver.val claim_interface : handle -> interface -> unit Lwt.tclaim_interface handle interface_number
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.
val release_interface : handle -> interface -> unit Lwt.tYou 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.
typeconfiguration =int
val get_configuration : handle -> configuration Lwt.tget_configuration handle returns the current configuration of
a deviceval set_configuration : handle -> configuration -> unit Lwt.tset_configuration handle conf change the current configuration
of a deviceval set_interface_alt_setting : handle -> interface -> int -> unit Lwt.tset_interface_alt_setting handle interface alternate_setting
activates an alternate setting for an interface.val clear_halt : handle -> endpoint -> unit Lwt.tclear_halt handle endpoint clears the halt/stall condition for
an endpoint.val reset_device : handle -> unit Lwt.treset_device handle reset the given devicemodule Class:sig..end
type device_descriptor = {
|
dd_usb : |
(* | USB specification release number in binary-coded decimal.
A value of 0x0200 indicates USB 2.0, 0x0110 indicates USB 1.1, etc. | *) |
|
dd_device_class : |
(* | USB-IF class code for the device. | *) |
|
dd_device_sub_class : |
(* | USB-IF subclass code for the device, qualified by the
dd_device_class value. | *) |
|
dd_device_protocol : |
(* | USB-IF protocol code for the device, qualified by the
dd_device_class and dd_device_subclass values. | *) |
|
dd_max_packet_size : |
(* | Maximum packet size for endpoint 0. | *) |
|
dd_vendor_id : |
(* | USB-IF vendor ID. | *) |
|
dd_product_id : |
(* | USB-IF product ID. | *) |
|
dd_device : |
(* | Device release number in binary-coded decimal. | *) |
|
dd_index_manufacturer : |
(* | Index of string descriptor describing manufacturer. | *) |
|
dd_index_product : |
(* | Index of string descriptor describing product. | *) |
|
dd_index_serial_number : |
(* | Index of string descriptor containing device serial number. | *) |
|
dd_configurations : |
(* | Number of possible configurations. | *) |
val get_device_descriptor : device -> device_descriptortype endpoint_descriptor = {
|
ed_endpoint_address : |
(* | The address of the endpoint described by this descriptor. | *) |
|
ed_attributes : |
(* | Attributes which apply to the endpoint when it is configured
using the cd_configuration_value. | *) |
|
ed_max_packet_size : |
(* | Maximum packet size this endpoint is capable of sending/receiving. | *) |
|
ed_interval : |
(* | Interval for polling endpoint for data transfers. | *) |
|
ed_refresh : |
(* | For audio devices only: the rate at which synchronization feedback is provided. | *) |
|
ed_synch_address : |
(* | For audio devices only: the address if the synch endpoint. | *) |
type interface_descriptor = {
|
id_interface : |
(* | Number of this interface. | *) |
|
id_alternate_setting : |
(* | Value used to select this alternate setting for this interface. | *) |
|
id_interface_class : |
(* | USB-IF class code for this interface. | *) |
|
id_interface_sub_class : |
(* | USB-IF subclass code for this interface, qualified by the
id_interface_class value. | *) |
|
id_interface_protocol : |
(* | USB-IF protocol code for this interface, qualified by the
id_interface_class and id_interface_sub_class values. | *) |
|
id_index_interface : |
(* | Index of string descriptor describing this interface. | *) |
|
id_endpoints : |
(* | Array of endpoint descriptors. | *) |
type config_descriptor = {
|
cd_configuration_value : |
(* | Identifier value for this configuration | *) |
|
cd_index_configuration : |
(* | Index of string descriptor describing this configuration. | *) |
|
cd_attributes : |
(* | A bitmask, representing configuration characteristics. | *) |
|
cd_max_power : |
(* | Maximum power consumption of the USB device from this bus in
this configuration when the device is fully opreation.
Expressed in units of 2 mA. | *) |
|
cd_interfaces : |
(* | Array of interfaces supported by this configuration.
| *) |
val get_active_config_descriptor : device -> config_descriptorval get_config_descriptor : device -> int -> config_descriptorval get_config_descriptor_by_value : device -> int -> config_descriptorcd_configuration_value.module DT:sig..end
val get_string_descriptor : handle -> ?timeout:float -> ?lang_id:int -> index:int -> string Lwt.ttype transfer_error =
| |
Transfer_error |
(* | Transfer failed | *) |
| |
Transfer_timed_out |
(* | Transfer timed out | *) |
| |
Transfer_cancelled |
(* | Transfer was cancelled | *) |
| |
Transfer_stall |
(* | For bulk/interrupt endpoints: halt condition detected (endpoint stalled). For control endpoints: control request not supported. | *) |
| |
Transfer_no_device |
(* | Device was disconnected | *) |
| |
Transfer_overflow |
(* | Device sent more data than requested | *) |
exception Transfer of transfer_error * string
Transfer(error, func_name) Exception raised when a transfer
fail.val transfer_error_message : transfer_error -> stringtransfer_error_message errorval bulk_recv : handle:handle ->
endpoint:endpoint -> ?timeout:float -> string -> int -> int -> int Lwt.tbulk_recv ~handle ~endpoint ?timeout buffer offset lengthval bulk_send : handle:handle ->
endpoint:endpoint -> ?timeout:float -> string -> int -> int -> int Lwt.tbulk_send ~handle ~endpoint ?timeout buffer offset lengthval interrupt_recv : handle:handle ->
endpoint:endpoint -> ?timeout:float -> string -> int -> int -> int Lwt.tinterrupt_recv ~handle ~endpoint ?timeout buffer offset lengthval interrupt_send : handle:handle ->
endpoint:endpoint -> ?timeout:float -> string -> int -> int -> int Lwt.tinterrupt_send ~handle ~endpoint ?timeout buffer offset lengthtype iso_result =
| |
Iso_ok of |
(* | The packet has been transfered successfully | *) |
| |
Iso_error of |
(* | Iso_error(error, func_name) An error occured | *) |
val iso_recv : handle:handle ->
endpoint:endpoint ->
?timeout:float -> string -> int -> int list -> iso_result list Lwt.t
val iso_send : handle:handle ->
endpoint:endpoint ->
?timeout:float -> string -> int -> int list -> iso_result list Lwt.ttype recipient =
| |
Device |
| |
Interface |
| |
Endpoint |
| |
Other |
type request_type =
| |
Standard |
| |
Class |
| |
Vendor |
| |
Reserved |
typerequest =int
val control_send : handle:handle ->
endpoint:endpoint ->
?timeout:float ->
?recipient:recipient ->
?request_type:request_type ->
request:request ->
value:int -> index:int -> string -> int -> int -> int Lwt.trecipient : defaults to Devicerequest_type : defaults to Standardval control_recv : handle:handle ->
endpoint:endpoint ->
?timeout:float ->
?recipient:recipient ->
?request_type:request_type ->
request:request ->
value:int -> index:int -> string -> int -> int -> int Lwt.trecipient : defaults to Devicerequest_type : defaults to Standardmodule Request:sig..end