Module Usb


module Usb: sig  end
Ocaml binding to libusb



Type Definitions


type size_t = int 

type usb_device_descriptor = {
   bLength : int;
   bDescriptorType : int;
   bcdUSB : int;
   bDeviceClass : int;
   bDeviceSubClass : int;
   bDeviceProtocol : int;
   bMaxPacketSize0 : int;
   idVendor : int;
   idProduct : int;
   bcdDevice : int;
   iManufacturer : int;
   iProduct : int;
   iSerialNumber : int;
   bNumConfigurations : int;
}
type usb_endpoint_descriptor = {
   bLength : int;
   bDescriptorType : int;
   bEndpointAddress : int;
   bmAttributes : int;
   wMaxPacketSize : int;
   bInterval : int;
   bRefresh : int;
   bSynchAddress : int;
   extra : char array;
}
type usb_interface_descriptor = {
   bLength : int;
   bDescriptorType : int;
   bInterfaceNumber : int;
   bAlternateSetting : int;
   bInterfaceClass : int;
   bInterfaceSubClass : int;
   bInterfaceProtocol : int;
   iInterface : int;
   endpoint : usb_endpoint_descriptor array;
   extra : char array;
}
type usb_interface = {
   altsetting : usb_interface_descriptor;
   num_altsetting : int;
}
type usb_config_descriptor = {
   bLength : int;
   bDescriptorType : int;
   wTotalLength : int;
   bNumInterfaces : int;
   bConfigurationValue : int;
   iConfiguration : int;
   bmAttributes : int;
   maxPower : int;
   interf : usb_interface;
   extra : char array;
}
type usb_bus 
type usb_dev_handle 
type usb_device 


Utility functions


val is_null : 'a Com.opaque -> bool
Test if a value, opaque in Ocaml, is NULL in C


Access functions



These are just utility accessor functions, not present in libusb, needed to generate camlusb without having to define structs in the IDL



usb_bus related accessor functions

val usb_bus_prev : usb_bus Com.opaque -> usb_bus Com.opaque
Returns the previous bus in the usb_bus struct
val usb_bus_next : usb_bus Com.opaque -> usb_bus Com.opaque
Returns the next bus in the usb_bus struct
val usb_bus_dirname : usb_bus Com.opaque -> string
Returns the dirname of bus in the usb_bus struct
val usb_bus_devices : usb_bus Com.opaque -> usb_device Com.opaque
Returns the struct usb_device of bus in the usb_bus struct

usb_device related accessor functions

val usb_device_prev : usb_device Com.opaque -> usb_device Com.opaque
Returns the previous device in the usb_device struct
val usb_device_next : usb_device Com.opaque -> usb_device Com.opaque
Returns the next device in the usb_device struct
val usb_device_filename : usb_device Com.opaque -> string
Returns the filename of the device in the usb_device struct
val usb_device_bus : usb_device Com.opaque -> usb_bus Com.opaque
Returns the bus of the device in the usb_device struct
val usb_device_descriptor : usb_device Com.opaque -> usb_device_descriptor
Returns the descriptor of the device in the usb_device struct
val usb_device_config : usb_device Com.opaque -> usb_config_descriptor
Returns the config of the device in the usb_device struct


Core functions



tested functions

val usb_init : unit -> unit
val usb_find_busses : unit -> int
val usb_find_devices : unit -> int
val usb_get_busses : unit -> usb_bus Com.opaque
Returns the abstract type usb_bus. This function is meant to be used with the access functions:


Device operations




FIXME: Differently from libusb, these functions return a pair made by the return value of the C function and the opaque input parameter, since I think that this input parameter is modified as a side effect.



tested functions

val usb_open : usb_device Com.opaque ->
usb_dev_handle Com.opaque * usb_device Com.opaque
In the C version this function can return NULL, in Ocaml, since it is opaque, you can testif it is null using the function Usb.is_null
val usb_close : usb_dev_handle Com.opaque -> int * usb_dev_handle Com.opaque
val usb_claim_interface : usb_dev_handle Com.opaque -> int -> int * usb_dev_handle Com.opaque

untested functions

val usb_reset : usb_dev_handle Com.opaque -> int * usb_dev_handle Com.opaque
val usb_set_configuration : usb_dev_handle Com.opaque -> int -> int * usb_dev_handle Com.opaque
val usb_set_altinterface : usb_dev_handle Com.opaque -> int -> int * usb_dev_handle Com.opaque
val usb_resetep : usb_dev_handle Com.opaque -> int -> int * usb_dev_handle Com.opaque
val usb_clear_halt : usb_dev_handle Com.opaque -> int -> int * usb_dev_handle Com.opaque
val usb_release_interface : usb_dev_handle Com.opaque -> int -> int * usb_dev_handle Com.opaque


Control transfers



tested functions

val usb_control_msg : usb_dev_handle Com.opaque ->
int -> int -> int -> int -> int -> int -> int * int array
usb_control_msg handle requesttype request value index size timeout, differently from libusb, this function doesn't take the buffer as an input parameter but as an output parameter.
Returns the pair of the return value of the C function and the buffer (the bytes parameter in the libusb documentation) of size size

untested funcrtions

val usb_get_string : usb_dev_handle Com.opaque -> int -> int -> size_t -> int * string
val usb_get_string_simple : usb_dev_handle Com.opaque -> int -> size_t -> int * string


FIXME: I'm not sure that the correct returned type value is string or int array




bulk transfers



tested functions

val usb_bulk_write : usb_dev_handle Com.opaque -> int -> int array -> int -> int
val usb_bulk_read : usb_dev_handle Com.opaque -> int -> int -> int -> int * int array
usb_bulk_read handle ep size timeout, differently from libusb, this function doesn't take the buffer as an input parameter but as an output parameter.
Returns the pair of the return value of the C function and the buffer (the bytes parameter in the libusb documentation) of size size