]> sigrok.org Git - libsigrok.git/commitdiff
Add new sr_driver_scan_options() helper function.
authorMartin Ling <redacted>
Mon, 2 Nov 2015 00:23:23 +0000 (00:23 +0000)
committerUwe Hermann <redacted>
Thu, 31 Dec 2015 18:00:16 +0000 (19:00 +0100)
This function replaces the pattern of calling config_list() with
SR_CONF_SCAN_OPTIONS to obtain a list of scan options.

include/libsigrok/proto.h
src/hwdriver.c

index fc63ae23bc47eed3bed46f98b0ab1fa5219f9a93..9dc128274bc72c066cf2920de156e353312ad212 100644 (file)
@@ -83,6 +83,7 @@ SR_API int sr_dev_inst_channel_add(struct sr_dev_inst *sdi, int index, int type,
 SR_API struct sr_dev_driver **sr_driver_list(const struct sr_context *ctx);
 SR_API int sr_driver_init(struct sr_context *ctx,
                struct sr_dev_driver *driver);
+SR_API GArray *sr_driver_scan_options(const struct sr_dev_driver *driver);
 SR_API GSList *sr_driver_scan(struct sr_dev_driver *driver, GSList *options);
 SR_API int sr_config_get(const struct sr_dev_driver *driver,
                const struct sr_dev_inst *sdi,
index a676d026a6aadcc60d904f31494746090d14fef5..5a4b1b01b77ce2aec84cadfdd1a69f76a6112b74 100644 (file)
@@ -392,6 +392,43 @@ SR_API int sr_driver_init(struct sr_context *ctx, struct sr_dev_driver *driver)
        return ret;
 }
 
+/**
+ * Enumerate scan options supported by this driver.
+ *
+ * Before calling sr_driver_scan_options(), the user must have previously
+ * initialized the driver by calling sr_driver_init().
+ *
+ * @param driver The driver to enumerate options for. This must be a pointer
+ *               to one of the entries returned by sr_driver_list(). Must not
+ *               be NULL.
+ *
+ * @return A GArray * of uint32_t entries, or NULL on invalid arguments. Each
+ *         entry is a configuration key that is supported as a scan option.
+ *         The array must be freed by the caller using g_array_free().
+ *
+ * @since 0.4.0
+ */
+SR_API GArray *sr_driver_scan_options(const struct sr_dev_driver *driver)
+{
+       GVariant *gvar;
+       const uint32_t *opts;
+       gsize num_opts;
+       GArray *result;
+
+       if (sr_config_list(driver, NULL, NULL, SR_CONF_SCAN_OPTIONS, &gvar) != SR_OK)
+               return NULL;
+
+       opts = g_variant_get_fixed_array(gvar, &num_opts, sizeof(uint32_t));
+
+       result = g_array_sized_new(FALSE, FALSE, sizeof(uint32_t), num_opts);
+
+       g_array_insert_vals(result, 0, opts, num_opts);
+
+       g_variant_unref(gvar);
+
+       return result;
+}
+
 static int check_options(struct sr_dev_driver *driver, GSList *options,
                uint32_t optlist_key, struct sr_dev_inst *sdi,
                struct sr_channel_group *cg)