summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgudenau <gudenaua@gmail.com>2018-01-21 21:21:46 -0600
committerChris Dickens <christopher.a.dickens@gmail.com>2020-01-13 13:19:44 -0800
commit19e763e135f8ac6cd6206f3f800d2ad40ad72a54 (patch)
tree92d8013b1c907506bbe4956e5b77fd4a2994bfab
parent25855c083bc8989c5a8bab981fcfe4e1a9f9ec07 (diff)
downloadlibusb-19e763e135f8ac6cd6206f3f800d2ad40ad72a54.tar.gz
hotplug: Added libusb_hotplug_get_user_data()
Closes #380 [dickens] Fixed up API version in doxygen, whitespace issues, function visibility annotation (can't use API_EXPORTED for pointer values) and added new function to libusb-1.0.defs Signed-off-by: Chris Dickens <christopher.a.dickens@gmail.com>
-rw-r--r--libusb/hotplug.c27
-rw-r--r--libusb/libusb-1.0.def2
-rw-r--r--libusb/libusb.h11
-rw-r--r--libusb/version_nano.h2
4 files changed, 41 insertions, 1 deletions
diff --git a/libusb/hotplug.c b/libusb/hotplug.c
index a4320bc..3ccdc2f 100644
--- a/libusb/hotplug.c
+++ b/libusb/hotplug.c
@@ -356,6 +356,33 @@ void API_EXPORTED libusb_hotplug_deregister_callback(struct libusb_context *ctx,
}
}
+DEFAULT_VISIBILITY
+void * LIBUSB_CALL libusb_hotplug_get_user_data(struct libusb_context *ctx,
+ libusb_hotplug_callback_handle callback_handle)
+{
+ struct libusb_hotplug_callback *hotplug_cb;
+ void *user_data = NULL;
+
+ /* check for hotplug support */
+ if (!libusb_has_capability(LIBUSB_CAP_HAS_HOTPLUG)) {
+ return NULL;
+ }
+
+ USBI_GET_CONTEXT(ctx);
+
+ usbi_dbg("get hotplug user data %d", callback_handle);
+
+ usbi_mutex_lock(&ctx->hotplug_cbs_lock);
+ list_for_each_entry(hotplug_cb, &ctx->hotplug_cbs, list, struct libusb_hotplug_callback) {
+ if (callback_handle == hotplug_cb->handle) {
+ user_data = hotplug_cb->user_data;
+ }
+ }
+ usbi_mutex_unlock(&ctx->hotplug_cbs_lock);
+
+ return user_data;
+}
+
void usbi_hotplug_deregister(struct libusb_context *ctx, int forced)
{
struct libusb_hotplug_callback *hotplug_cb, *next;
diff --git a/libusb/libusb-1.0.def b/libusb/libusb-1.0.def
index 6eba4ff..2e78b0a 100644
--- a/libusb/libusb-1.0.def
+++ b/libusb/libusb-1.0.def
@@ -116,6 +116,8 @@ EXPORTS
libusb_has_capability@4 = libusb_has_capability
libusb_hotplug_deregister_callback
libusb_hotplug_deregister_callback@8 = libusb_hotplug_deregister_callback
+ libusb_hotplug_get_user_data
+ libusb_hotplug_get_user_data@8 = libusb_hotplug_get_user_data
libusb_hotplug_register_callback
libusb_hotplug_register_callback@36 = libusb_hotplug_register_callback
libusb_init
diff --git a/libusb/libusb.h b/libusb/libusb.h
index 8f3ac35..a0f1edd 100644
--- a/libusb/libusb.h
+++ b/libusb/libusb.h
@@ -2020,6 +2020,17 @@ int LIBUSB_CALL libusb_hotplug_register_callback(libusb_context *ctx,
void LIBUSB_CALL libusb_hotplug_deregister_callback(libusb_context *ctx,
libusb_hotplug_callback_handle callback_handle);
+/** \ingroup libusb_hotplug
+ * Gets the user_data associated with a hotplug callback.
+ *
+ * Since version v1.0.24 \ref LIBUSB_API_VERSION >= 0x01000108
+ *
+ * \param[in] ctx context this callback is registered with
+ * \param[in] callback_handle the handle of the callback to get the user_data of
+ */
+void * LIBUSB_CALL libusb_hotplug_get_user_data(struct libusb_context *ctx,
+ libusb_hotplug_callback_handle callback_handle);
+
/** \ingroup libusb_lib
* Available option values for libusb_set_option().
*/
diff --git a/libusb/version_nano.h b/libusb/version_nano.h
index 21398db..7ae99d1 100644
--- a/libusb/version_nano.h
+++ b/libusb/version_nano.h
@@ -1 +1 @@
-#define LIBUSB_NANO 11424
+#define LIBUSB_NANO 11425