summaryrefslogtreecommitdiff
path: root/libusb/libusb.h
diff options
context:
space:
mode:
Diffstat (limited to 'libusb/libusb.h')
-rw-r--r--libusb/libusb.h61
1 files changed, 41 insertions, 20 deletions
diff --git a/libusb/libusb.h b/libusb/libusb.h
index 40d1a87..20d1988 100644
--- a/libusb/libusb.h
+++ b/libusb/libusb.h
@@ -533,9 +533,29 @@ struct libusb_control_setup {
/* libusb */
+struct libusb_context;
struct libusb_device;
struct libusb_device_handle;
+/** \ingroup lib
+ * Structure representing a libusb session. The concept of individual libusb
+ * sessions allows for your program to use two libraries (or dynamically
+ * load two modules) which both independently use libusb. This will prevent
+ * interference between the individual libusb users - for example
+ * libusb_set_debug() will not affect the other user of the library, and
+ * libusb_exit() will not destroy resources that the other user is still
+ * using.
+ *
+ * Sessions are created by libusb_init() and destroyed through libusb_exit().
+ * If your application is guaranteed to only ever include a single libusb
+ * user (i.e. you), you do not have to worry about contexts: pass NULL in
+ * every function call where a context is required. The default context
+ * will be used.
+ *
+ * For more information, see \ref contexts.
+ */
+typedef struct libusb_context libusb_context;
+
/** \ingroup dev
* Structure representing a USB device detected on the system. This is an
* opaque type for which you are only ever provided with a pointer, usually
@@ -727,11 +747,12 @@ struct libusb_transfer {
struct libusb_iso_packet_descriptor iso_packet_desc[0];
};
-int libusb_init(void);
-void libusb_exit(void);
-void libusb_set_debug(int level);
+int libusb_init(libusb_context **ctx);
+void libusb_exit(libusb_context *ctx);
+void libusb_set_debug(libusb_context *ctx, int level);
-ssize_t libusb_get_device_list(libusb_device ***list);
+ssize_t libusb_get_device_list(libusb_context *ctx,
+ libusb_device ***list);
void libusb_free_device_list(libusb_device **list, int unref_devices);
libusb_device *libusb_ref_device(libusb_device *dev);
void libusb_unref_device(libusb_device *dev);
@@ -757,8 +778,8 @@ int libusb_set_configuration(libusb_device_handle *dev, int configuration);
int libusb_claim_interface(libusb_device_handle *dev, int iface);
int libusb_release_interface(libusb_device_handle *dev, int iface);
-libusb_device_handle *libusb_open_device_with_vid_pid(uint16_t vendor_id,
- uint16_t product_id);
+libusb_device_handle *libusb_open_device_with_vid_pid(libusb_context *ctx,
+ uint16_t vendor_id, uint16_t product_id);
int libusb_set_interface_alt_setting(libusb_device_handle *dev,
int interface_number, int alternate_setting);
@@ -1112,18 +1133,18 @@ int libusb_get_string_descriptor_ascii(libusb_device_handle *dev,
/* polling and timeouts */
-int libusb_try_lock_events(void);
-void libusb_lock_events(void);
-void libusb_unlock_events(void);
-int libusb_event_handler_active(void);
-void libusb_lock_event_waiters(void);
-void libusb_unlock_event_waiters(void);
-int libusb_wait_for_event(struct timeval *tv);
+int libusb_try_lock_events(libusb_context *ctx);
+void libusb_lock_events(libusb_context *ctx);
+void libusb_unlock_events(libusb_context *ctx);
+int libusb_event_handler_active(libusb_context *ctx);
+void libusb_lock_event_waiters(libusb_context *ctx);
+void libusb_unlock_event_waiters(libusb_context *ctx);
+int libusb_wait_for_event(libusb_context *ctx, struct timeval *tv);
-int libusb_handle_events_timeout(struct timeval *tv);
-int libusb_handle_events(void);
-int libusb_handle_events_locked(struct timeval *tv);
-int libusb_get_next_timeout(struct timeval *tv);
+int libusb_handle_events_timeout(libusb_context *ctx, struct timeval *tv);
+int libusb_handle_events(libusb_context *ctx);
+int libusb_handle_events_locked(libusb_context *ctx, struct timeval *tv);
+int libusb_get_next_timeout(libusb_context *ctx, struct timeval *tv);
/** \ingroup poll
* File descriptor for polling
@@ -1158,9 +1179,9 @@ typedef void (*libusb_pollfd_added_cb)(int fd, short events);
*/
typedef void (*libusb_pollfd_removed_cb)(int fd);
-const struct libusb_pollfd **libusb_get_pollfds(void);
-void libusb_set_pollfd_notifiers(libusb_pollfd_added_cb added_cb,
- libusb_pollfd_removed_cb removed_cb);
+const struct libusb_pollfd **libusb_get_pollfds(libusb_context *ctx);
+void libusb_set_pollfd_notifiers(libusb_context *ctx,
+ libusb_pollfd_added_cb added_cb, libusb_pollfd_removed_cb removed_cb);
#ifdef __cplusplus
}