Add libusb_has_capability() API function
authorPeter Stuge <peter@stuge.se>
Wed, 14 Sep 2011 00:30:18 +0000 (02:30 +0200)
committerPeter Stuge <peter@stuge.se>
Mon, 17 Oct 2011 14:23:54 +0000 (16:23 +0200)
Since it is currently not planned to change the filename of the libusb
library between libusb-1.0 versions at least on Windows systems it's
important to have a capability API.

Currently there exists only one capability; LIBUSB_CAP_HAS_CAPABILITY,
which tests support for the libusb_has_capability() API.

libusb/core.c
libusb/libusb-1.0.def
libusb/libusb.h

index 5834bea..0d05333 100644 (file)
@@ -1664,6 +1664,22 @@ void API_EXPORTED libusb_exit(struct libusb_context *ctx)
        free(ctx);
 }
 
+/** \ingroup misc
+ * Check at runtime if the loaded library has a given capability.
+ *
+ * \param capability the \ref libusb_capability to check for
+ * \returns 1 if the running library has the capability, 0 otherwise
+ */
+int API_EXPORTED libusb_has_capability(uint32_t capability)
+{
+       enum libusb_capability cap = capability;
+       switch (cap) {
+       case LIBUSB_CAP_HAS_CAPABILITY:
+               return 1;
+       }
+       return 0;
+}
+
 void usbi_log_v(struct libusb_context *ctx, enum usbi_log_level level,
        const char *function, const char *format, va_list args)
 {
index 4eef912..54b0622 100644 (file)
@@ -70,6 +70,8 @@ EXPORTS
   libusb_handle_events_timeout@8 = libusb_handle_events_timeout
   libusb_handle_events_timeout_completed
   libusb_handle_events_timeout_completed@12 = libusb_handle_events_timeout_completed
+  libusb_has_capability
+  libusb_has_capability@4 = libusb_has_capability
   libusb_init
   libusb_init@4 = libusb_init
   libusb_interrupt_transfer
index 3b7f92a..ae09907 100644 (file)
@@ -885,9 +885,20 @@ struct libusb_transfer {
        ;
 };
 
+/** \ingroup misc
+ * Capabilities supported by this instance of libusb. Test if the loaded
+ * library supports a given capability by calling
+ * \ref libusb_has_capability().
+ */
+enum libusb_capability {
+       /** The libusb_has_capability() API is available. */
+       LIBUSB_CAP_HAS_CAPABILITY = 0,
+};
+
 int LIBUSB_CALL libusb_init(libusb_context **ctx);
 void LIBUSB_CALL libusb_exit(libusb_context *ctx);
 void LIBUSB_CALL libusb_set_debug(libusb_context *ctx, int level);
+int LIBUSB_CALL libusb_has_capability(uint32_t capability);
 
 ssize_t LIBUSB_CALL libusb_get_device_list(libusb_context *ctx,
        libusb_device ***list);