]> sigrok.org Git - libsigrok.git/blobdiff - src/hardware/yokogawa-dlm/api.c
Rename SR_CONF_NUM_TIMEBASE to SR_CONF_NUM_HDIV.
[libsigrok.git] / src / hardware / yokogawa-dlm / api.c
index 48e9a0ced109be33d1537bb4565c79da6acc2cdb..27957406386828511c03b02b4120be07382307e8 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,
@@ -62,7 +67,7 @@ static struct sr_dev_inst *probe_usbtmc_device(struct sr_scpi_dev_inst *scpi)
        if (dlm_model_get(hw_info->model, &model_name, &model_index) != SR_OK)
                goto fail;
 
-       sdi = sr_dev_inst_new();
+       sdi = g_malloc0(sizeof(struct sr_dev_inst));
        sdi->status = SR_ST_ACTIVE;
        sdi->vendor = g_strdup(MANUFACTURER_NAME);
        sdi->model = g_strdup(model_name);
@@ -213,7 +218,7 @@ static int config_get(uint32_t key, GVariant **data, const struct sr_dev_inst *s
        state = devc->model_state;
 
        switch (key) {
-       case SR_CONF_NUM_TIMEBASE:
+       case SR_CONF_NUM_HDIV:
                *data = g_variant_new_int32(model->num_xdivs);
                ret = SR_OK;
                break;
@@ -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: