TRUE, "Front");
channel->priv = chanc;
- front = g_malloc0(sizeof(*front));
- front->name = g_strdup("Front");
+ front = sr_channel_group_new(sdi, "Front", NULL);
front->channels = g_slist_append(front->channels, channel);
- sdi->channel_groups = g_slist_append(sdi->channel_groups, front);
-
return chan_idx;
}
if (!card)
return chan_idx;
- group = g_malloc0(sizeof(*group));
- group->priv = NULL;
- group->name = g_strdup(card->cg_name);
- sdi->channel_groups = g_slist_append(sdi->channel_groups, group);
+ group = sr_channel_group_new(sdi, card->cg_name, NULL);
for (i = 0; i < card->num_channels; i++) {
struct sr_dev_inst *sdi;
struct dev_context *devc;
+ /*
+ * The device cannot get identified by means of SCPI queries.
+ * Neither shall non-SCPI requests get emitted before reliable
+ * identification of the device. Assume that we only get here
+ * when user specs led us to believe it's safe to communicate
+ * to the expected kind of device.
+ */
+
/*
* This command ensures we receive an EOI after every response, so that
* we don't wait the entire timeout after the response is received.
if ((ret != SR_OK) || !response)
return NULL;
- if (strcmp(response, "HP3457A"))
+ if (strcmp(response, "HP3457A") != 0) {
+ g_free(response);
return NULL;
+ }
g_free(response);
- devc = g_malloc0(sizeof(struct dev_context));
- sdi = g_malloc0(sizeof(struct sr_dev_inst));
+ devc = g_malloc0(sizeof(*devc));
+ sdi = g_malloc0(sizeof(*sdi));
sdi->vendor = g_strdup("Hewlett-Packard");
sdi->model = g_strdup("3457A");
sdi->version = get_revision(scpi);
static GSList *scan(struct sr_dev_driver *di, GSList *options)
{
+ const char *conn;
+
+ /* Only scan for a device when conn= was specified. */
+ conn = NULL;
+ (void)sr_serial_extract_options(options, &conn, NULL);
+ if (!conn)
+ return NULL;
+
return sr_scpi_scan(di->context, options, probe_device);
}
static int config_set(uint32_t key, GVariant *data,
const struct sr_dev_inst *sdi, const struct sr_channel_group *cg)
{
- int ret;
enum sr_mq mq;
enum sr_mqflag mq_flags;
struct dev_context *devc;
devc = sdi->priv;
- ret = SR_OK;
switch (key) {
case SR_CONF_LIMIT_SAMPLES:
devc->limit_samples = g_variant_get_uint64(data);
mq = g_variant_get_uint32(tuple_child);
tuple_child = g_variant_get_child_value(data, 1);
mq_flags = g_variant_get_uint64(tuple_child);
- ret = hp_3457a_set_mq(sdi, mq, mq_flags);
g_variant_unref(tuple_child);
- break;
+ return hp_3457a_set_mq(sdi, mq, mq_flags);
case SR_CONF_ADC_POWERLINE_CYCLES:
- ret = hp_3457a_set_nplc(sdi, g_variant_get_double(data));
- break;
+ return hp_3457a_set_nplc(sdi, g_variant_get_double(data));
default:
- ret = SR_ERR_NA;
+ return SR_ERR_NA;
}
- return ret;
+ return SR_OK;
}
static int config_list(uint32_t key, GVariant **data,
return SR_ERR_ARG;
}
- devc->current_channel = devc->active_channels->data;
devc->num_active_channels = g_slist_length(devc->active_channels);
+ if (!devc->num_active_channels) {
+ sr_err("Need at least one active channel!");
+ g_slist_free(devc->active_channels);
+ return SR_ERR_ARG;
+ }
+ devc->current_channel = devc->active_channels->data;
hp_3457a_select_input(sdi, front_selected ? CONN_FRONT : CONN_REAR);