]> sigrok.org Git - libsigrok.git/commitdiff
yokogawa-dlm: Publish driver options.
authorAurelien Jacobs <redacted>
Wed, 19 Nov 2014 22:54:01 +0000 (23:54 +0100)
committerAurelien Jacobs <redacted>
Wed, 19 Nov 2014 22:54:01 +0000 (23:54 +0100)
src/hardware/yokogawa-dlm/api.c

index 48e9a0ced109be33d1537bb4565c79da6acc2cdb..28884de46ad36e6fcfef9c5623f73022e4b7f33f 100644 (file)
@@ -27,6 +27,11 @@ static struct sr_dev_driver *di = &yokogawa_dlm_driver_info;
 static char *MANUFACTURER_ID = "YOKOGAWA";
 static char *MANUFACTURER_NAME = "Yokogawa";
 
+static const uint32_t drvopts[] = {
+       SR_CONF_LOGIC_ANALYZER,
+       SR_CONF_OSCILLOSCOPE,
+};
+
 enum {
        CG_INVALID = -1,
        CG_NONE,
@@ -468,23 +473,26 @@ static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sd
 static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi,
                const struct sr_channel_group *cg)
 {
-       int cg_type;
-       struct dev_context *devc;
-       struct scope_config *model;
+       int cg_type = CG_NONE;
+       struct dev_context *devc = NULL;
+       struct scope_config *model = NULL;
 
-       if (!sdi || !(devc = sdi->priv))
-               return SR_ERR_ARG;
-
-       if ((cg_type = check_channel_group(devc, cg)) == CG_INVALID)
-               return SR_ERR;
+       if (sdi && (devc = sdi->priv)) {
+               if ((cg_type = check_channel_group(devc, cg)) == CG_INVALID)
+                       return SR_ERR;
 
-       model = devc->model_config;
+               model = devc->model_config;
+       }
 
        switch (key) {
        case SR_CONF_DEVICE_OPTIONS:
                if (cg_type == CG_NONE) {
-                       *data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
-                               model->devopts, model->num_devopts, sizeof(uint32_t));
+                       if (model)
+                               *data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
+                                       model->devopts, model->num_devopts, sizeof(uint32_t));
+                       else
+                               *data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
+                                       drvopts, ARRAY_SIZE(drvopts), sizeof(uint32_t));
                } else if (cg_type == CG_ANALOG) {
                        *data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
                                model->analog_devopts, model->num_analog_devopts, sizeof(uint32_t));
@@ -500,14 +508,20 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *
                                g_strv_length((char **)*model->coupling_options));
                break;
        case SR_CONF_TRIGGER_SOURCE:
+               if (!model)
+                       return SR_ERR_ARG;
                *data = g_variant_new_strv(*model->trigger_sources,
                                g_strv_length((char **)*model->trigger_sources));
                break;
        case SR_CONF_TRIGGER_SLOPE:
+               if (!model)
+                       return SR_ERR_ARG;
                *data = g_variant_new_strv(*model->trigger_slopes,
                                g_strv_length((char **)*model->trigger_slopes));
                break;
        case SR_CONF_TIMEBASE:
+               if (!model)
+                       return SR_ERR_ARG;
                *data = build_tuples(model->timebases, model->num_timebases);
                break;
        case SR_CONF_VDIV: