Skip to content

Latest commit

 

History

History
169 lines (134 loc) · 15.3 KB

API.md

File metadata and controls

169 lines (134 loc) · 15.3 KB

API Mapping

below includes a direct mapping of Libusb functions to usb concepts.

Libusb usb equiv Done?
struct libusb_device usb.Device
libusb_get_device_list() usb.List()
libusb_get_bus_number() usb.Device.Bus
libusb_get_port_number() usb.Device.Port
libusb_get_port_numbers() usb.Device.Ports
libusb_get_parent() usb.Device.Parent
libusb_get_device_address() usb.Device.Device
libusb_get_device_speed() usb.Device.Speed
libusb_get_max_packet_size() usb.Endpoint.MaxPacketSize
libusb_get_max_iso_packet_size() usb.Endpoint.MaxISOPacketSize
libusb_open() usb.Open()
libusb_open_device_with_vid_pid() usb.VidPid().Open()
libusb_close() usb.Device.Close()
libusb_get_configuration() usb.Device.ActiveConfig
libusb_set_configuration() usb.Device.SetConfiguration()
libusb_claim_interface() usb.Interface.Claim()
libusb_release_interface() usb.Interface.Release()
libusb_set_interface_alt_setting() usb.Interface.SetAlt()
libusb_clear_halt() -
libusb_reset_device() usb.Device.Reset()
libusb_kernel_driver_active() -
enum libusb_speed usb.Speed
enum libusb_supported_speed (reuse usb.Speed?)
enum libusb_2_0_extension_attributes -
enum libusb_ss_usb_device_capability_attributes -
enum libusb_bos_type -

This is the equivalent pattern for enumerating devices, choosing your device, and opening it

var found *usb.Device

devs, err := usb.List()
if err != nil {
    panic(err)
}

for _, d := range devs {
    if isMyDevice(d) {
        found = d
        break
    }
}

if found == nil {
    panic("device not found")
}

err = found.Open()
if err != nil {
    panic(err)
}
defer found.Close()

The concept of needing a handle separately from a device object is not carried over to this library. The device is the object from which you may obtain descriptor data, and it is the device you use for I/O operations.

Similarly, the list obtained from usb.List() does not need to be freed. And devices are not reference counted.

These are implemented in the gusb subpackage

Libusb gusb equiv Done?
struct libusb_device_descriptor gusb.DeviceDescriptor
struct libusb_endpoint_descriptor gusb.EndpointDescriptor
struct libusb_interface_descriptor gusb.InterfaceDescriptor
struct libusb_interface
struct libusb_config_descriptor gusb.ConfigDescriptor
struct libusb_ss_endpoint_companion_descriptor
struct libusb_bos_dev_capability_descriptor
struct libusb_bos_descriptor
struct libusb_2_0_extension_descriptor
struct libusb_ss_usb_device_capability_descriptor
struct libusb_container_id_descriptor
enum libusb_class_code gusb.USBClass
enum libusb_descriptor_type gusb.DT
enum libusb_endpoint_direction gusb.EndpointDirection
enum libusb_transfer_type gusb.TransferType
enum libusb_iso_sync_type gusb.ISOSyncType
enum libusb_iso_usage_type gusb.ISOSyncMode
libusb_get_device_descriptor() ``
libusb_get_active_config_descriptor() ``
libusb_get_config_descriptor() ``
libusb_get_config_descriptor_by_value() ``
libusb_get_ss_endpoint_companion_descriptor() ``
libusb_get_bos_descriptor() ``
libusb_get_usb_2_0_extension_descriptor() ``
libusb_get_ss_usb_device_capability_descriptor() ``
libusb_get_container_id_descriptor() ``
libusb_get_string_descriptor_ascii() ``
libusb_get_descriptor() ``
libusb_get_string_descriptor() ``
Libusb usb equiv Done?
libusb_hotplug_register_callback() -
libusb_hotplug_deregister_callback() -

TODO

TODO

Libusb usb equiv Done?
libusb_control_transfer() -
libusb_bulk_transfer() -
libusb_interrupt_transfer() -

Not Included

These pieces are not being ported to usb

Libusb reason
libusb_version
libusb_context this is not a shared library
libusb_option not planned
libusb_set_option not planned
libusb_init
libusb_exit
libusb_device_handle handles not used
libusb_get_device handles not used
libusb_set_auto_detach_kernel_driver this feature is always enabled
libusb_detach_kernel_driver automatically detached with claim
libusb_attach_kernel_driver automatically reattached with release
libusb_free_device_list not manually memory managed
libusb_free_config_descriptor not manually memory managed
libusb_free_ss_endpoint_companion_descriptor not manually memory managed
libusb_free_bos_descriptor not manually memory managed
libusb_free_usb_2_0_extension_descriptor not manually memory managed
libusb_free_ss_usb_device_capability_descriptor not manually memory managed
libusb_free_container_id_descriptor not manually memory managed
libusb_ref_device not reference counted
libusb_unref_device not reference counted
libusb_get_port_path deprecated in libusb
libusb_set_debug deprecated in libusb