drivers: Add and use STD_CONFIG_LIST().
This ensures consistent handling of the SR_CONF_SCAN_OPTIONS and SR_CONF_DEVICE_OPTIONS (with sdi NULL or non-NULL) config keys and also reduces copy-pasted boilerplate in the drivers a bit. This function does not handle channel-group specific items, that's very driver-specific and thus left to the individual drivers. Also move some generic checks and error messages from the drivers into the sr_config_list() wrapper.
This commit is contained in:
parent
13d2ac54f4
commit
e66d1892d0
|
@ -266,26 +266,10 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *
|
||||||
GVariant *gvar;
|
GVariant *gvar;
|
||||||
GVariantBuilder gvb;
|
GVariantBuilder gvb;
|
||||||
|
|
||||||
if (key == SR_CONF_SCAN_OPTIONS) {
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
return SR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (key == SR_CONF_DEVICE_OPTIONS && !sdi) {
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
drvopts, ARRAY_SIZE(drvopts), sizeof(uint32_t));
|
|
||||||
return SR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!sdi || cg)
|
|
||||||
return SR_ERR_ARG;
|
|
||||||
|
|
||||||
switch (key) {
|
switch (key) {
|
||||||
|
case SR_CONF_SCAN_OPTIONS:
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, drvopts, devopts);
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_SAMPLERATE:
|
case SR_CONF_SAMPLERATE:
|
||||||
g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}"));
|
g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}"));
|
||||||
gvar = g_variant_new_fixed_array(G_VARIANT_TYPE("t"), samplerates,
|
gvar = g_variant_new_fixed_array(G_VARIANT_TYPE("t"), samplerates,
|
||||||
|
|
|
@ -166,21 +166,10 @@ 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,
|
static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi,
|
||||||
const struct sr_channel_group *cg)
|
const struct sr_channel_group *cg)
|
||||||
{
|
{
|
||||||
(void)cg;
|
|
||||||
|
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case SR_CONF_SCAN_OPTIONS:
|
case SR_CONF_SCAN_OPTIONS:
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
if (!sdi)
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, drvopts, devopts);
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
drvopts, ARRAY_SIZE(drvopts), sizeof(uint32_t));
|
|
||||||
else
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_DATA_SOURCE:
|
case SR_CONF_DATA_SOURCE:
|
||||||
*data = g_variant_new_strv(data_sources, ARRAY_SIZE(data_sources));
|
*data = g_variant_new_strv(data_sources, ARRAY_SIZE(data_sources));
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -152,32 +152,9 @@ static int config_list(uint32_t key, GVariant **data,
|
||||||
{
|
{
|
||||||
GVariantBuilder gvb;
|
GVariantBuilder gvb;
|
||||||
|
|
||||||
/* Always available. */
|
|
||||||
if (key == SR_CONF_SCAN_OPTIONS) {
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
return SR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (key == SR_CONF_DEVICE_OPTIONS && !sdi) {
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
drvopts, ARRAY_SIZE(drvopts), sizeof(uint32_t));
|
|
||||||
return SR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!sdi)
|
|
||||||
return SR_ERR_ARG;
|
|
||||||
|
|
||||||
if (!cg) {
|
if (!cg) {
|
||||||
/* No channel group: global options. */
|
/* No channel group: global options. */
|
||||||
switch (key) {
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, drvopts, devopts);
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return SR_ERR_NA;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
|
|
|
@ -246,17 +246,9 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *
|
||||||
GVariant *gvar;
|
GVariant *gvar;
|
||||||
GVariantBuilder gvb;
|
GVariantBuilder gvb;
|
||||||
|
|
||||||
(void)cg;
|
|
||||||
|
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
if (!sdi)
|
return STD_CONFIG_LIST(key, data, sdi, cg, NULL, drvopts, devopts);
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
drvopts, ARRAY_SIZE(drvopts), sizeof(uint32_t));
|
|
||||||
else
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_SAMPLERATE:
|
case SR_CONF_SAMPLERATE:
|
||||||
g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}"));
|
g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}"));
|
||||||
gvar = g_variant_new_fixed_array(G_VARIANT_TYPE("t"), samplerates,
|
gvar = g_variant_new_fixed_array(G_VARIANT_TYPE("t"), samplerates,
|
||||||
|
|
|
@ -339,31 +339,14 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *
|
||||||
GVariantBuilder gvb;
|
GVariantBuilder gvb;
|
||||||
int channel, i;
|
int channel, i;
|
||||||
|
|
||||||
/* Always available. */
|
devc = (sdi) ? sdi->priv : NULL;
|
||||||
if (key == SR_CONF_SCAN_OPTIONS) {
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
return SR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (key == SR_CONF_DEVICE_OPTIONS && !sdi) {
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
drvopts, ARRAY_SIZE(drvopts), sizeof(uint32_t));
|
|
||||||
return SR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!sdi)
|
|
||||||
return SR_ERR_ARG;
|
|
||||||
|
|
||||||
devc = sdi->priv;
|
|
||||||
|
|
||||||
if (!cg) {
|
if (!cg) {
|
||||||
/* No channel group: global options. */
|
/* No channel group: global options. */
|
||||||
switch (key) {
|
switch (key) {
|
||||||
|
case SR_CONF_SCAN_OPTIONS:
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, drvopts, devopts);
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_CHANNEL_CONFIG:
|
case SR_CONF_CHANNEL_CONFIG:
|
||||||
if (devc->model->channel_modes == CHANMODE_INDEPENDENT) {
|
if (devc->model->channel_modes == CHANMODE_INDEPENDENT) {
|
||||||
/* The 1-channel models. */
|
/* The 1-channel models. */
|
||||||
|
@ -378,8 +361,7 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* Channel group specified: per-channel options. */
|
/* Channel group specified: per-channel options. */
|
||||||
if (!sdi)
|
|
||||||
return SR_ERR_ARG;
|
|
||||||
/* We only ever have one channel per channel group in this driver. */
|
/* We only ever have one channel per channel group in this driver. */
|
||||||
ch = cg->channels->data;
|
ch = cg->channels->data;
|
||||||
channel = ch->index;
|
channel = ch->index;
|
||||||
|
|
|
@ -219,15 +219,10 @@ static int config_list(uint32_t key, GVariant **data,
|
||||||
GVariantBuilder gvb;
|
GVariantBuilder gvb;
|
||||||
int num_devopts_cg = 0;
|
int num_devopts_cg = 0;
|
||||||
|
|
||||||
(void)sdi;
|
|
||||||
(void)cg;
|
|
||||||
|
|
||||||
if (!cg) {
|
if (!cg) {
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
return STD_CONFIG_LIST(key, data, sdi, cg, NULL, NULL, devopts);
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_SAMPLERATE:
|
case SR_CONF_SAMPLERATE:
|
||||||
g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}"));
|
g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}"));
|
||||||
gvar = g_variant_new_fixed_array(G_VARIANT_TYPE("t"),
|
gvar = g_variant_new_fixed_array(G_VARIANT_TYPE("t"),
|
||||||
|
|
|
@ -245,18 +245,10 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *
|
||||||
GVariant *gvar;
|
GVariant *gvar;
|
||||||
GVariantBuilder gvb;
|
GVariantBuilder gvb;
|
||||||
|
|
||||||
(void)sdi;
|
|
||||||
(void)cg;
|
|
||||||
|
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case SR_CONF_SCAN_OPTIONS:
|
case SR_CONF_SCAN_OPTIONS:
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, NULL, devopts);
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_SAMPLERATE:
|
case SR_CONF_SAMPLERATE:
|
||||||
g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}"));
|
g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}"));
|
||||||
gvar = g_variant_new_fixed_array(G_VARIANT_TYPE("t"),
|
gvar = g_variant_new_fixed_array(G_VARIANT_TYPE("t"),
|
||||||
|
|
|
@ -169,23 +169,7 @@ 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,
|
static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi,
|
||||||
const struct sr_channel_group *cg)
|
const struct sr_channel_group *cg)
|
||||||
{
|
{
|
||||||
(void)sdi;
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, NULL, devopts);
|
||||||
(void)cg;
|
|
||||||
|
|
||||||
switch (key) {
|
|
||||||
case SR_CONF_SCAN_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return SR_ERR_NA;
|
|
||||||
}
|
|
||||||
|
|
||||||
return SR_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dev_acquisition_start(const struct sr_dev_inst *sdi)
|
static int dev_acquisition_start(const struct sr_dev_inst *sdi)
|
||||||
|
|
|
@ -133,23 +133,7 @@ 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,
|
static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi,
|
||||||
const struct sr_channel_group *cg)
|
const struct sr_channel_group *cg)
|
||||||
{
|
{
|
||||||
(void)sdi;
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, NULL, devopts);
|
||||||
(void)cg;
|
|
||||||
|
|
||||||
switch (key) {
|
|
||||||
case SR_CONF_SCAN_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return SR_ERR_NA;
|
|
||||||
}
|
|
||||||
|
|
||||||
return SR_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dev_acquisition_start(const struct sr_dev_inst *sdi)
|
static int dev_acquisition_start(const struct sr_dev_inst *sdi)
|
||||||
|
|
|
@ -288,49 +288,31 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *
|
||||||
GVariantBuilder gvb;
|
GVariantBuilder gvb;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
(void)cg;
|
switch (key) {
|
||||||
|
case SR_CONF_SCAN_OPTIONS:
|
||||||
if (!sdi) {
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
switch (key) {
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, drvopts, devopts);
|
||||||
case SR_CONF_SCAN_OPTIONS:
|
case SR_CONF_SPL_WEIGHT_FREQ:
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
*data = g_variant_new_strv(weight_freq, ARRAY_SIZE(weight_freq));
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
break;
|
||||||
break;
|
case SR_CONF_SPL_WEIGHT_TIME:
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
*data = g_variant_new_strv(weight_time, ARRAY_SIZE(weight_time));
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
break;
|
||||||
drvopts, ARRAY_SIZE(drvopts), sizeof(uint32_t));
|
case SR_CONF_SPL_MEASUREMENT_RANGE:
|
||||||
break;
|
g_variant_builder_init(&gvb, G_VARIANT_TYPE_ARRAY);
|
||||||
default:
|
for (i = 0; i < ARRAY_SIZE(meas_ranges); i++) {
|
||||||
return SR_ERR_NA;
|
range[0] = g_variant_new_uint64(meas_ranges[i][0]);
|
||||||
}
|
range[1] = g_variant_new_uint64(meas_ranges[i][1]);
|
||||||
} else {
|
tuple = g_variant_new_tuple(range, 2);
|
||||||
switch (key) {
|
g_variant_builder_add_value(&gvb, tuple);
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_SPL_WEIGHT_FREQ:
|
|
||||||
*data = g_variant_new_strv(weight_freq, ARRAY_SIZE(weight_freq));
|
|
||||||
break;
|
|
||||||
case SR_CONF_SPL_WEIGHT_TIME:
|
|
||||||
*data = g_variant_new_strv(weight_time, ARRAY_SIZE(weight_time));
|
|
||||||
break;
|
|
||||||
case SR_CONF_SPL_MEASUREMENT_RANGE:
|
|
||||||
g_variant_builder_init(&gvb, G_VARIANT_TYPE_ARRAY);
|
|
||||||
for (i = 0; i < ARRAY_SIZE(meas_ranges); i++) {
|
|
||||||
range[0] = g_variant_new_uint64(meas_ranges[i][0]);
|
|
||||||
range[1] = g_variant_new_uint64(meas_ranges[i][1]);
|
|
||||||
tuple = g_variant_new_tuple(range, 2);
|
|
||||||
g_variant_builder_add_value(&gvb, tuple);
|
|
||||||
}
|
|
||||||
*data = g_variant_builder_end(&gvb);
|
|
||||||
break;
|
|
||||||
case SR_CONF_DATA_SOURCE:
|
|
||||||
*data = g_variant_new_strv(data_sources, ARRAY_SIZE(data_sources));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return SR_ERR_NA;
|
|
||||||
}
|
}
|
||||||
|
*data = g_variant_builder_end(&gvb);
|
||||||
|
break;
|
||||||
|
case SR_CONF_DATA_SOURCE:
|
||||||
|
*data = g_variant_new_strv(data_sources, ARRAY_SIZE(data_sources));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return SR_ERR_NA;
|
||||||
}
|
}
|
||||||
|
|
||||||
return SR_OK;
|
return SR_OK;
|
||||||
|
|
|
@ -135,26 +135,7 @@ 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,
|
static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi,
|
||||||
const struct sr_channel_group *cg)
|
const struct sr_channel_group *cg)
|
||||||
{
|
{
|
||||||
(void)cg;
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, drvopts, devopts);
|
||||||
|
|
||||||
switch (key) {
|
|
||||||
case SR_CONF_SCAN_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
|
||||||
if (!sdi)
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
drvopts, ARRAY_SIZE(drvopts), sizeof(uint32_t));
|
|
||||||
else
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return SR_ERR_NA;
|
|
||||||
}
|
|
||||||
|
|
||||||
return SR_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dev_acquisition_start(const struct sr_dev_inst *sdi, int idx)
|
static int dev_acquisition_start(const struct sr_dev_inst *sdi, int idx)
|
||||||
|
|
|
@ -357,25 +357,13 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *
|
||||||
GVariantBuilder gvb;
|
GVariantBuilder gvb;
|
||||||
struct dev_context *devc;
|
struct dev_context *devc;
|
||||||
|
|
||||||
(void)cg;
|
devc = (sdi) ? sdi->priv : NULL;
|
||||||
|
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case SR_CONF_SCAN_OPTIONS:
|
case SR_CONF_SCAN_OPTIONS:
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
if (!sdi)
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, drvopts, devopts);
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
drvopts, ARRAY_SIZE(drvopts), sizeof(uint32_t));
|
|
||||||
else
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_SAMPLERATE:
|
case SR_CONF_SAMPLERATE:
|
||||||
if (!sdi)
|
|
||||||
return SR_ERR_BUG;
|
|
||||||
devc = sdi->priv;
|
|
||||||
cv_fill_samplerates_if_needed(sdi);
|
cv_fill_samplerates_if_needed(sdi);
|
||||||
g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}"));
|
g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}"));
|
||||||
gvar = g_variant_new_fixed_array(G_VARIANT_TYPE("t"),
|
gvar = g_variant_new_fixed_array(G_VARIANT_TYPE("t"),
|
||||||
|
@ -386,7 +374,7 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *
|
||||||
*data = g_variant_builder_end(&gvb);
|
*data = g_variant_builder_end(&gvb);
|
||||||
break;
|
break;
|
||||||
case SR_CONF_LIMIT_SAMPLES:
|
case SR_CONF_LIMIT_SAMPLES:
|
||||||
if (!sdi || !sdi->priv || !(devc = sdi->priv) || !devc->prof)
|
if (!devc->prof)
|
||||||
return SR_ERR_BUG;
|
return SR_ERR_BUG;
|
||||||
grange[0] = g_variant_new_uint64(0);
|
grange[0] = g_variant_new_uint64(0);
|
||||||
if (devc->prof->model == CHRONOVU_LA8)
|
if (devc->prof->model == CHRONOVU_LA8)
|
||||||
|
@ -396,7 +384,7 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *
|
||||||
*data = g_variant_new_tuple(grange, 2);
|
*data = g_variant_new_tuple(grange, 2);
|
||||||
break;
|
break;
|
||||||
case SR_CONF_TRIGGER_MATCH:
|
case SR_CONF_TRIGGER_MATCH:
|
||||||
if (!sdi || !sdi->priv || !(devc = sdi->priv) || !devc->prof)
|
if (!devc->prof)
|
||||||
return SR_ERR_BUG;
|
return SR_ERR_BUG;
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_INT32,
|
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_INT32,
|
||||||
trigger_matches, devc->prof->num_trigger_matches,
|
trigger_matches, devc->prof->num_trigger_matches,
|
||||||
|
|
|
@ -96,23 +96,7 @@ 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,
|
static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi,
|
||||||
const struct sr_channel_group *cg)
|
const struct sr_channel_group *cg)
|
||||||
{
|
{
|
||||||
(void)sdi;
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, NULL, devopts);
|
||||||
(void)cg;
|
|
||||||
|
|
||||||
switch (key) {
|
|
||||||
case SR_CONF_SCAN_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return SR_ERR_NA;
|
|
||||||
}
|
|
||||||
|
|
||||||
return SR_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dev_acquisition_start(const struct sr_dev_inst *sdi)
|
static int dev_acquisition_start(const struct sr_dev_inst *sdi)
|
||||||
|
|
|
@ -136,23 +136,7 @@ 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,
|
static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi,
|
||||||
const struct sr_channel_group *cg)
|
const struct sr_channel_group *cg)
|
||||||
{
|
{
|
||||||
(void)sdi;
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, NULL, devopts);
|
||||||
(void)cg;
|
|
||||||
|
|
||||||
switch (key) {
|
|
||||||
case SR_CONF_SCAN_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return SR_ERR_NA;
|
|
||||||
}
|
|
||||||
|
|
||||||
return SR_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct sr_dev_driver conrad_digi_35_cpu_driver_info = {
|
static struct sr_dev_driver conrad_digi_35_cpu_driver_info = {
|
||||||
|
|
|
@ -358,27 +358,11 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *
|
||||||
GVariant *gvar;
|
GVariant *gvar;
|
||||||
GVariantBuilder gvb;
|
GVariantBuilder gvb;
|
||||||
|
|
||||||
if (key == SR_CONF_SCAN_OPTIONS) {
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
return SR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (key == SR_CONF_DEVICE_OPTIONS && !sdi) {
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
drvopts, ARRAY_SIZE(drvopts), sizeof(uint32_t));
|
|
||||||
return SR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!sdi)
|
|
||||||
return SR_ERR_ARG;
|
|
||||||
|
|
||||||
if (!cg) {
|
if (!cg) {
|
||||||
switch (key) {
|
switch (key) {
|
||||||
|
case SR_CONF_SCAN_OPTIONS:
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, drvopts, devopts);
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_SAMPLERATE:
|
case SR_CONF_SAMPLERATE:
|
||||||
g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}"));
|
g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}"));
|
||||||
gvar = g_variant_new_fixed_array(G_VARIANT_TYPE("t"), samplerates,
|
gvar = g_variant_new_fixed_array(G_VARIANT_TYPE("t"), samplerates,
|
||||||
|
|
|
@ -553,34 +553,21 @@ static int config_set(uint32_t key, GVariant *data,
|
||||||
static int config_list(uint32_t key, GVariant **data,
|
static int config_list(uint32_t key, GVariant **data,
|
||||||
const struct sr_dev_inst *sdi, const struct sr_channel_group *cg)
|
const struct sr_dev_inst *sdi, const struct sr_channel_group *cg)
|
||||||
{
|
{
|
||||||
struct dev_context *devc = NULL;
|
struct dev_context *devc;
|
||||||
GVariant *gvar, *range[2];
|
GVariant *gvar, *range[2];
|
||||||
GVariantBuilder gvb;
|
GVariantBuilder gvb;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
double v;
|
double v;
|
||||||
|
|
||||||
(void)cg;
|
devc = (sdi) ? sdi->priv : NULL;
|
||||||
|
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case SR_CONF_SCAN_OPTIONS:
|
case SR_CONF_SCAN_OPTIONS:
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
if (!sdi) {
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, drvopts, devopts);
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
drvopts, ARRAY_SIZE(drvopts), sizeof(uint32_t));
|
|
||||||
} else {
|
|
||||||
devc = sdi->priv;
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case SR_CONF_VOLTAGE_THRESHOLD:
|
case SR_CONF_VOLTAGE_THRESHOLD:
|
||||||
if (sdi->priv)
|
|
||||||
devc = sdi->priv;
|
|
||||||
g_variant_builder_init(&gvb, G_VARIANT_TYPE_ARRAY);
|
g_variant_builder_init(&gvb, G_VARIANT_TYPE_ARRAY);
|
||||||
if (devc && !strcmp(devc->profile->model, "DSLogic")) {
|
if (!strcmp(devc->profile->model, "DSLogic")) {
|
||||||
for (i = 0; i < ARRAY_SIZE(voltage_thresholds); i++) {
|
for (i = 0; i < ARRAY_SIZE(voltage_thresholds); i++) {
|
||||||
range[0] = g_variant_new_double(voltage_thresholds[i].low);
|
range[0] = g_variant_new_double(voltage_thresholds[i].low);
|
||||||
range[1] = g_variant_new_double(voltage_thresholds[i].high);
|
range[1] = g_variant_new_double(voltage_thresholds[i].high);
|
||||||
|
@ -598,7 +585,6 @@ static int config_list(uint32_t key, GVariant **data,
|
||||||
*data = g_variant_builder_end(&gvb);
|
*data = g_variant_builder_end(&gvb);
|
||||||
break;
|
break;
|
||||||
case SR_CONF_SAMPLERATE:
|
case SR_CONF_SAMPLERATE:
|
||||||
devc = sdi->priv;
|
|
||||||
g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}"));
|
g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}"));
|
||||||
gvar = g_variant_new_fixed_array(G_VARIANT_TYPE("t"), devc->samplerates,
|
gvar = g_variant_new_fixed_array(G_VARIANT_TYPE("t"), devc->samplerates,
|
||||||
devc->num_samplerates, sizeof(uint64_t));
|
devc->num_samplerates, sizeof(uint64_t));
|
||||||
|
|
|
@ -194,23 +194,7 @@ 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,
|
static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi,
|
||||||
const struct sr_channel_group *cg)
|
const struct sr_channel_group *cg)
|
||||||
{
|
{
|
||||||
(void)sdi;
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, NULL, devopts);
|
||||||
(void)cg;
|
|
||||||
|
|
||||||
switch (key) {
|
|
||||||
case SR_CONF_SCAN_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return SR_ERR_NA;
|
|
||||||
}
|
|
||||||
|
|
||||||
return SR_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dev_acquisition_start(const struct sr_dev_inst *sdi)
|
static int dev_acquisition_start(const struct sr_dev_inst *sdi)
|
||||||
|
|
|
@ -388,18 +388,10 @@ static int config_list(uint32_t key, GVariant **data,
|
||||||
GVariant *gvar;
|
GVariant *gvar;
|
||||||
GVariantBuilder gvb;
|
GVariantBuilder gvb;
|
||||||
|
|
||||||
(void)sdi;
|
|
||||||
(void)cg;
|
|
||||||
|
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case SR_CONF_SCAN_OPTIONS:
|
case SR_CONF_SCAN_OPTIONS:
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, NULL, devopts);
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_SAMPLERATE:
|
case SR_CONF_SAMPLERATE:
|
||||||
g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}"));
|
g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}"));
|
||||||
gvar = g_variant_new_fixed_array(G_VARIANT_TYPE("t"),
|
gvar = g_variant_new_fixed_array(G_VARIANT_TYPE("t"),
|
||||||
|
|
|
@ -536,25 +536,13 @@ static int config_list(uint32_t key, GVariant **data,
|
||||||
GVariant *gvar;
|
GVariant *gvar;
|
||||||
GVariantBuilder gvb;
|
GVariantBuilder gvb;
|
||||||
|
|
||||||
(void)cg;
|
devc = (sdi) ? sdi->priv : NULL;
|
||||||
|
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case SR_CONF_SCAN_OPTIONS:
|
case SR_CONF_SCAN_OPTIONS:
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
if (!sdi) {
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, drvopts, devopts);
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
drvopts, ARRAY_SIZE(drvopts), sizeof(uint32_t));
|
|
||||||
} else {
|
|
||||||
devc = sdi->priv;
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case SR_CONF_SAMPLERATE:
|
case SR_CONF_SAMPLERATE:
|
||||||
devc = sdi->priv;
|
|
||||||
g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}"));
|
g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}"));
|
||||||
gvar = g_variant_new_fixed_array(G_VARIANT_TYPE("t"), devc->samplerates,
|
gvar = g_variant_new_fixed_array(G_VARIANT_TYPE("t"), devc->samplerates,
|
||||||
devc->num_samplerates, sizeof(uint64_t));
|
devc->num_samplerates, sizeof(uint64_t));
|
||||||
|
|
|
@ -361,55 +361,18 @@ static int config_get(uint32_t key, GVariant **data, const struct sr_dev_inst *s
|
||||||
return SR_OK;
|
return SR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Implementation of config_list, auxiliary function for common parts. */
|
|
||||||
static int config_list_common(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi,
|
|
||||||
const struct sr_channel_group *cg)
|
|
||||||
{
|
|
||||||
(void)sdi;
|
|
||||||
(void)cg;
|
|
||||||
|
|
||||||
switch (key) {
|
|
||||||
case SR_CONF_SCAN_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return SR_ERR_NA;
|
|
||||||
}
|
|
||||||
|
|
||||||
return SR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Implementation of config_list for Metrahit 1x/2x send mode */
|
/** Implementation of config_list for Metrahit 1x/2x send mode */
|
||||||
static int config_list_sm(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi,
|
static int config_list_sm(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi,
|
||||||
const struct sr_channel_group *cg)
|
const struct sr_channel_group *cg)
|
||||||
{
|
{
|
||||||
switch (key) {
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, NULL, devopts_sm);
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
devopts_sm, ARRAY_SIZE(devopts_sm), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return config_list_common(key, data, sdi, cg);
|
|
||||||
}
|
|
||||||
|
|
||||||
return SR_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Implementation of config_list for Metrahit 2x bidirectional mode */
|
/** Implementation of config_list for Metrahit 2x bidirectional mode */
|
||||||
static int config_list_bd(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi,
|
static int config_list_bd(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi,
|
||||||
const struct sr_channel_group *cg)
|
const struct sr_channel_group *cg)
|
||||||
{
|
{
|
||||||
switch (key) {
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, NULL, devopts_bd);
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
devopts_bd, ARRAY_SIZE(devopts_bd), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return config_list_common(key, data, sdi, cg);
|
|
||||||
}
|
|
||||||
|
|
||||||
return SR_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dev_acquisition_start_1x_2x_rs232(const struct sr_dev_inst *sdi)
|
static int dev_acquisition_start_1x_2x_rs232(const struct sr_dev_inst *sdi)
|
||||||
|
|
|
@ -162,23 +162,7 @@ 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,
|
static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi,
|
||||||
const struct sr_channel_group *cg)
|
const struct sr_channel_group *cg)
|
||||||
{
|
{
|
||||||
(void)sdi;
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, NULL, devopts);
|
||||||
(void)cg;
|
|
||||||
|
|
||||||
switch (key) {
|
|
||||||
case SR_CONF_SCAN_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
return SR_OK;
|
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
return SR_OK;
|
|
||||||
default:
|
|
||||||
return SR_ERR_NA;
|
|
||||||
}
|
|
||||||
|
|
||||||
return SR_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dev_acquisition_start(const struct sr_dev_inst *sdi)
|
static int dev_acquisition_start(const struct sr_dev_inst *sdi)
|
||||||
|
|
|
@ -462,27 +462,15 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *
|
||||||
GVariantBuilder gvb;
|
GVariantBuilder gvb;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
GVariant *gvar;
|
GVariant *gvar;
|
||||||
struct dev_context *devc = NULL;
|
struct dev_context *devc;
|
||||||
|
|
||||||
if (key == SR_CONF_SCAN_OPTIONS) {
|
devc = (sdi) ? sdi->priv : NULL;
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
return SR_OK;
|
|
||||||
} else if (key == SR_CONF_DEVICE_OPTIONS && !sdi) {
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
drvopts, ARRAY_SIZE(drvopts), sizeof(uint32_t));
|
|
||||||
return SR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sdi)
|
|
||||||
devc = sdi->priv;
|
|
||||||
|
|
||||||
if (!cg) {
|
if (!cg) {
|
||||||
switch (key) {
|
switch (key) {
|
||||||
|
case SR_CONF_SCAN_OPTIONS:
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, drvopts, devopts);
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_SAMPLERATE:
|
case SR_CONF_SAMPLERATE:
|
||||||
g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}"));
|
g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}"));
|
||||||
gvar = g_variant_new_fixed_array(G_VARIANT_TYPE("t"),
|
gvar = g_variant_new_fixed_array(G_VARIANT_TYPE("t"),
|
||||||
|
@ -501,8 +489,6 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *
|
||||||
devopts_cg, ARRAY_SIZE(devopts_cg), sizeof(uint32_t));
|
devopts_cg, ARRAY_SIZE(devopts_cg), sizeof(uint32_t));
|
||||||
break;
|
break;
|
||||||
case SR_CONF_COUPLING:
|
case SR_CONF_COUPLING:
|
||||||
if (!devc)
|
|
||||||
return SR_ERR_NA;
|
|
||||||
*data = g_variant_new_strv(devc->coupling_vals, devc->coupling_tab_size);
|
*data = g_variant_new_strv(devc->coupling_vals, devc->coupling_tab_size);
|
||||||
break;
|
break;
|
||||||
case SR_CONF_VDIV:
|
case SR_CONF_VDIV:
|
||||||
|
|
|
@ -599,25 +599,11 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *
|
||||||
GVariantBuilder gvb;
|
GVariantBuilder gvb;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
if (key == SR_CONF_SCAN_OPTIONS) {
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
return SR_OK;
|
|
||||||
} else if (key == SR_CONF_DEVICE_OPTIONS && !sdi) {
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
drvopts, ARRAY_SIZE(drvopts), sizeof(uint32_t));
|
|
||||||
return SR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!sdi)
|
|
||||||
return SR_ERR_ARG;
|
|
||||||
|
|
||||||
if (!cg) {
|
if (!cg) {
|
||||||
switch (key) {
|
switch (key) {
|
||||||
|
case SR_CONF_SCAN_OPTIONS:
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, drvopts, devopts);
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_BUFFERSIZE:
|
case SR_CONF_BUFFERSIZE:
|
||||||
if (!sdi)
|
if (!sdi)
|
||||||
return SR_ERR_ARG;
|
return SR_ERR_ARG;
|
||||||
|
|
|
@ -282,35 +282,12 @@ static int config_set(uint32_t key, GVariant *data,
|
||||||
static int config_list(uint32_t key, GVariant **data,
|
static int config_list(uint32_t key, GVariant **data,
|
||||||
const struct sr_dev_inst *sdi, const struct sr_channel_group *cg)
|
const struct sr_dev_inst *sdi, const struct sr_channel_group *cg)
|
||||||
{
|
{
|
||||||
if (key == SR_CONF_SCAN_OPTIONS) {
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
return SR_OK;
|
|
||||||
} else if ((key == SR_CONF_DEVICE_OPTIONS) && !sdi) {
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
drvopts, ARRAY_SIZE(drvopts), sizeof(uint32_t));
|
|
||||||
return SR_OK;
|
|
||||||
} else if ((key == SR_CONF_DEVICE_OPTIONS) && !cg) {
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
return SR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* From here on, we're only concerned with channel group config. */
|
|
||||||
if (!cg)
|
|
||||||
return SR_ERR_NA;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* TODO: Implement channel group configuration when adding support for
|
* TODO: Implement channel group configuration when adding support for
|
||||||
* plug-in cards.
|
* plug-in cards.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
switch (key) {
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, drvopts, devopts);
|
||||||
default:
|
|
||||||
return SR_ERR_NA;
|
|
||||||
}
|
|
||||||
|
|
||||||
return SR_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void create_channel_index_list(GSList *channels, GArray **arr)
|
static void create_channel_index_list(GSList *channels, GArray **arr)
|
||||||
|
|
|
@ -565,7 +565,7 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case SR_CONF_SCAN_OPTIONS:
|
case SR_CONF_SCAN_OPTIONS:
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
break;
|
break;
|
||||||
case SR_CONF_SAMPLERATE:
|
case SR_CONF_SAMPLERATE:
|
||||||
|
@ -591,19 +591,12 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *
|
||||||
|
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case SR_CONF_SCAN_OPTIONS:
|
case SR_CONF_SCAN_OPTIONS:
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, NULL, NULL);
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
if (!sdi)
|
if (!cg)
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
return STD_CONFIG_LIST(key, data, sdi, cg, NULL, drvopts, devopts);
|
||||||
drvopts, ARRAY_SIZE(drvopts), sizeof(uint32_t));
|
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
||||||
else if (!cg)
|
cgopts, ARRAY_SIZE(cgopts), sizeof(uint32_t));
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
else
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
cgopts, ARRAY_SIZE(cgopts), sizeof(uint32_t));
|
|
||||||
break;
|
break;
|
||||||
case SR_CONF_SAMPLERATE:
|
case SR_CONF_SAMPLERATE:
|
||||||
g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}"));
|
g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}"));
|
||||||
|
|
|
@ -304,14 +304,9 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *
|
||||||
GVariant *gvar, *grange[2];
|
GVariant *gvar, *grange[2];
|
||||||
GVariantBuilder gvb;
|
GVariantBuilder gvb;
|
||||||
|
|
||||||
(void)sdi;
|
|
||||||
(void)cg;
|
|
||||||
|
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
return STD_CONFIG_LIST(key, data, sdi, cg, NULL, NULL, devopts);
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_SAMPLERATE:
|
case SR_CONF_SAMPLERATE:
|
||||||
g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}"));
|
g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}"));
|
||||||
gvar = g_variant_new_fixed_array(G_VARIANT_TYPE("t"),
|
gvar = g_variant_new_fixed_array(G_VARIANT_TYPE("t"),
|
||||||
|
|
|
@ -270,14 +270,9 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *
|
||||||
GVariant *gvar;
|
GVariant *gvar;
|
||||||
GVariantBuilder gvb;
|
GVariantBuilder gvb;
|
||||||
|
|
||||||
(void)sdi;
|
|
||||||
(void)cg;
|
|
||||||
|
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
return STD_CONFIG_LIST(key, data, sdi, cg, NULL, NULL, devopts);
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_SAMPLERATE:
|
case SR_CONF_SAMPLERATE:
|
||||||
g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}"));
|
g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}"));
|
||||||
gvar = g_variant_new_fixed_array(G_VARIANT_TYPE("t"),
|
gvar = g_variant_new_fixed_array(G_VARIANT_TYPE("t"),
|
||||||
|
|
|
@ -325,14 +325,9 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *
|
||||||
GVariantBuilder gvb;
|
GVariantBuilder gvb;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
(void)sdi;
|
|
||||||
(void)cg;
|
|
||||||
|
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
return STD_CONFIG_LIST(key, data, sdi, cg, NULL, NULL, devopts);
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_SAMPLE_INTERVAL:
|
case SR_CONF_SAMPLE_INTERVAL:
|
||||||
g_variant_builder_init(&gvb, G_VARIANT_TYPE_ARRAY);
|
g_variant_builder_init(&gvb, G_VARIANT_TYPE_ARRAY);
|
||||||
for (i = 0; i < ARRAY_SIZE(kecheng_kc_330b_sample_intervals); i++) {
|
for (i = 0; i < ARRAY_SIZE(kecheng_kc_330b_sample_intervals); i++) {
|
||||||
|
|
|
@ -125,23 +125,7 @@ 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,
|
static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi,
|
||||||
const struct sr_channel_group *cg)
|
const struct sr_channel_group *cg)
|
||||||
{
|
{
|
||||||
(void)sdi;
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, NULL, devopts);
|
||||||
(void)cg;
|
|
||||||
|
|
||||||
switch (key) {
|
|
||||||
case SR_CONF_SCAN_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return SR_ERR_NA;
|
|
||||||
}
|
|
||||||
|
|
||||||
return SR_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dev_acquisition_start(const struct sr_dev_inst *sdi)
|
static int dev_acquisition_start(const struct sr_dev_inst *sdi)
|
||||||
|
|
|
@ -282,33 +282,12 @@ static int config_list(uint32_t key, GVariant **data,
|
||||||
double dval;
|
double dval;
|
||||||
int idx;
|
int idx;
|
||||||
|
|
||||||
(void)cg;
|
devc = (sdi) ? sdi->priv : NULL;
|
||||||
|
|
||||||
/* Always available (with or without sdi). */
|
|
||||||
if (key == SR_CONF_SCAN_OPTIONS) {
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
return SR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Return drvopts without sdi (and devopts with sdi, see below). */
|
|
||||||
if (key == SR_CONF_DEVICE_OPTIONS && !sdi) {
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
drvopts, ARRAY_SIZE(drvopts), sizeof(uint32_t));
|
|
||||||
return SR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Every other key needs an sdi. */
|
|
||||||
if (!sdi)
|
|
||||||
return SR_ERR_ARG;
|
|
||||||
|
|
||||||
devc = sdi->priv;
|
|
||||||
|
|
||||||
switch (key) {
|
switch (key) {
|
||||||
|
case SR_CONF_SCAN_OPTIONS:
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, drvopts, devopts);
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_VOLTAGE_TARGET:
|
case SR_CONF_VOLTAGE_TARGET:
|
||||||
g_variant_builder_init(&gvb, G_VARIANT_TYPE_ARRAY);
|
g_variant_builder_init(&gvb, G_VARIANT_TYPE_ARRAY);
|
||||||
/* Min, max, step. */
|
/* Min, max, step. */
|
||||||
|
|
|
@ -183,23 +183,7 @@ 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,
|
static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi,
|
||||||
const struct sr_channel_group *cg)
|
const struct sr_channel_group *cg)
|
||||||
{
|
{
|
||||||
(void)sdi;
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, NULL, devopts);
|
||||||
(void)cg;
|
|
||||||
|
|
||||||
switch (key) {
|
|
||||||
case SR_CONF_SCAN_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return SR_ERR_NA;
|
|
||||||
}
|
|
||||||
|
|
||||||
return SR_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void LIBUSB_CALL mark_xfer(struct libusb_transfer *xfer)
|
static void LIBUSB_CALL mark_xfer(struct libusb_transfer *xfer)
|
||||||
|
|
|
@ -406,15 +406,9 @@ static int config_list(uint32_t key, GVariant **data,
|
||||||
GVariantBuilder vb;
|
GVariantBuilder vb;
|
||||||
GVariant *var;
|
GVariant *var;
|
||||||
|
|
||||||
(void)sdi;
|
|
||||||
(void)cg;
|
|
||||||
|
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
return STD_CONFIG_LIST(key, data, sdi, cg, NULL, NULL, devopts);
|
||||||
devopts, ARRAY_SIZE(devopts),
|
|
||||||
sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_SAMPLERATE:
|
case SR_CONF_SAMPLERATE:
|
||||||
g_variant_builder_init(&vb, G_VARIANT_TYPE("a{sv}"));
|
g_variant_builder_init(&vb, G_VARIANT_TYPE("a{sv}"));
|
||||||
var = g_variant_new_fixed_array(G_VARIANT_TYPE("t"),
|
var = g_variant_new_fixed_array(G_VARIANT_TYPE("t"),
|
||||||
|
|
|
@ -388,41 +388,18 @@ static int config_set(uint32_t key, GVariant *data,
|
||||||
static int config_list(uint32_t key, GVariant **data,
|
static int config_list(uint32_t key, GVariant **data,
|
||||||
const struct sr_dev_inst *sdi, const struct sr_channel_group *cg)
|
const struct sr_dev_inst *sdi, const struct sr_channel_group *cg)
|
||||||
{
|
{
|
||||||
struct dev_context *devc = NULL;
|
struct dev_context *devc;
|
||||||
const struct scope_config *model = NULL;
|
const struct scope_config *model;
|
||||||
|
|
||||||
(void)cg;
|
devc = (sdi) ? sdi->priv : NULL;
|
||||||
|
model = (devc) ? devc->model_config : NULL;
|
||||||
/* SR_CONF_SCAN_OPTIONS is always valid, regardless of sdi or channel group. */
|
|
||||||
if (key == SR_CONF_SCAN_OPTIONS) {
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
return SR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* If sdi is NULL, nothing except SR_CONF_DEVICE_OPTIONS can be provided. */
|
|
||||||
if (key == SR_CONF_DEVICE_OPTIONS && !sdi) {
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
drvopts, ARRAY_SIZE(drvopts), sizeof(uint32_t));
|
|
||||||
return SR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Every other option requires a valid device instance. */
|
|
||||||
if (!sdi)
|
|
||||||
return SR_ERR_ARG;
|
|
||||||
|
|
||||||
devc = sdi->priv;
|
|
||||||
model = devc->model_config;
|
|
||||||
|
|
||||||
switch (key) {
|
switch (key) {
|
||||||
|
case SR_CONF_SCAN_OPTIONS:
|
||||||
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, NULL, NULL);
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
if (!cg) {
|
if (!cg)
|
||||||
/* If cg is NULL, only the SR_CONF_DEVICE_OPTIONS that are not
|
return STD_CONFIG_LIST(key, data, sdi, cg, NULL, drvopts, devopts);
|
||||||
* specific to a channel group must be returned. */
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
return SR_OK;
|
|
||||||
}
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
||||||
analog_devopts, ARRAY_SIZE(analog_devopts),
|
analog_devopts, ARRAY_SIZE(analog_devopts),
|
||||||
sizeof(uint32_t));
|
sizeof(uint32_t));
|
||||||
|
|
|
@ -288,14 +288,9 @@ static int config_list(int key, GVariant **data, const struct sr_dev_inst *sdi,
|
||||||
GVariant *gvar;
|
GVariant *gvar;
|
||||||
GVariantBuilder gvb;
|
GVariantBuilder gvb;
|
||||||
|
|
||||||
(void)cg;
|
|
||||||
(void)sdi;
|
|
||||||
|
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
return STD_CONFIG_LIST(key, data, sdi, cg, NULL, NULL, devopts);
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_SAMPLERATE:
|
case SR_CONF_SAMPLERATE:
|
||||||
g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}"));
|
g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}"));
|
||||||
gvar = g_variant_new_fixed_array(G_VARIANT_TYPE("t"), samplerates,
|
gvar = g_variant_new_fixed_array(G_VARIANT_TYPE("t"), samplerates,
|
||||||
|
|
|
@ -286,32 +286,12 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *
|
||||||
double dval;
|
double dval;
|
||||||
int idx;
|
int idx;
|
||||||
|
|
||||||
(void)cg;
|
devc = (sdi) ? sdi->priv : NULL;
|
||||||
|
|
||||||
/* Always available (with or without sdi). */
|
|
||||||
if (key == SR_CONF_SCAN_OPTIONS) {
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
return SR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Return drvopts without sdi (and devopts with sdi, see below). */
|
|
||||||
if (key == SR_CONF_DEVICE_OPTIONS && !sdi) {
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
drvopts, ARRAY_SIZE(drvopts), sizeof(uint32_t));
|
|
||||||
return SR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Every other key needs an sdi. */
|
|
||||||
if (!sdi)
|
|
||||||
return SR_ERR_ARG;
|
|
||||||
devc = sdi->priv;
|
|
||||||
|
|
||||||
switch (key) {
|
switch (key) {
|
||||||
|
case SR_CONF_SCAN_OPTIONS:
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, drvopts, devopts);
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_VOLTAGE_TARGET:
|
case SR_CONF_VOLTAGE_TARGET:
|
||||||
g_variant_builder_init(&gvb, G_VARIANT_TYPE_ARRAY);
|
g_variant_builder_init(&gvb, G_VARIANT_TYPE_ARRAY);
|
||||||
/* Min, max, step. */
|
/* Min, max, step. */
|
||||||
|
|
|
@ -362,31 +362,11 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *
|
||||||
struct dev_context *devc;
|
struct dev_context *devc;
|
||||||
GVariantBuilder gvb;
|
GVariantBuilder gvb;
|
||||||
|
|
||||||
/* Always available, even without sdi. */
|
devc = (sdi) ? sdi->priv : NULL;
|
||||||
if (key == SR_CONF_SCAN_OPTIONS) {
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
return SR_OK;
|
|
||||||
} else if (key == SR_CONF_DEVICE_OPTIONS && !sdi) {
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
drvopts, ARRAY_SIZE(drvopts), sizeof(uint32_t));
|
|
||||||
return SR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!sdi)
|
|
||||||
return SR_ERR_ARG;
|
|
||||||
devc = sdi->priv;
|
|
||||||
|
|
||||||
if (!cg) {
|
if (!cg) {
|
||||||
/* No channel group: global options. */
|
/* No channel group: global options. */
|
||||||
switch (key) {
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, drvopts, devopts);
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return SR_ERR_NA;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
|
|
|
@ -142,32 +142,18 @@ 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,
|
static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi,
|
||||||
const struct sr_channel_group *cg, int idx)
|
const struct sr_channel_group *cg, int idx)
|
||||||
{
|
{
|
||||||
(void)cg;
|
/*
|
||||||
|
* We can't use the ternary operator here! The result would contain
|
||||||
switch (key) {
|
* sizeof((cond) ? A : B) where A/B are arrays of different type/size.
|
||||||
case SR_CONF_SCAN_OPTIONS:
|
* The ternary operator always returns the "common" type of A and B,
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
* which would be a pointer instead of either the A or B arrays.
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
* Thus, sizeof() would yield the size of a pointer, not the size
|
||||||
break;
|
* of either the A or B array, which is not what we want.
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
*/
|
||||||
if (!sdi && !mic_devs[idx].has_humidity) {
|
if (mic_devs[idx].has_humidity)
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, drvopts_temp_hum, devopts);
|
||||||
drvopts_temp, ARRAY_SIZE(drvopts_temp),
|
else
|
||||||
sizeof(uint32_t));
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, drvopts_temp, devopts);
|
||||||
} else if (!sdi && mic_devs[idx].has_humidity) {
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
drvopts_temp_hum, ARRAY_SIZE(drvopts_temp_hum),
|
|
||||||
sizeof(uint32_t));
|
|
||||||
} else {
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return SR_ERR_NA;
|
|
||||||
}
|
|
||||||
|
|
||||||
return SR_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dev_acquisition_start(const struct sr_dev_inst *sdi, int idx)
|
static int dev_acquisition_start(const struct sr_dev_inst *sdi, int idx)
|
||||||
|
|
|
@ -677,32 +677,14 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *
|
||||||
GVariant *gvar;
|
GVariant *gvar;
|
||||||
GVariantBuilder gvb;
|
GVariantBuilder gvb;
|
||||||
|
|
||||||
/* Driver options, no device instance necessary. */
|
devc = (sdi) ? sdi->priv : NULL;
|
||||||
switch (key) {
|
|
||||||
case SR_CONF_SCAN_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
return SR_OK;
|
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
|
||||||
if (sdi)
|
|
||||||
break;
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
drvopts, ARRAY_SIZE(drvopts), sizeof(uint32_t));
|
|
||||||
return SR_OK;
|
|
||||||
default:
|
|
||||||
if (!sdi)
|
|
||||||
return SR_ERR_ARG;
|
|
||||||
devc = sdi->priv;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Device options, independent from channel groups. */
|
/* Device options, independent from channel groups. */
|
||||||
if (!cg) {
|
if (!cg) {
|
||||||
switch (key) {
|
switch (key) {
|
||||||
|
case SR_CONF_SCAN_OPTIONS:
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, drvopts, devopts);
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
return SR_OK;
|
|
||||||
case SR_CONF_CHANNEL_CONFIG:
|
case SR_CONF_CHANNEL_CONFIG:
|
||||||
if (devc->model->modelid <= LPS_303) {
|
if (devc->model->modelid <= LPS_303) {
|
||||||
/* The 1-channel models. */
|
/* The 1-channel models. */
|
||||||
|
|
|
@ -176,23 +176,7 @@ 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,
|
static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi,
|
||||||
const struct sr_channel_group *cg)
|
const struct sr_channel_group *cg)
|
||||||
{
|
{
|
||||||
(void)sdi;
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, NULL, devopts);
|
||||||
(void)cg;
|
|
||||||
|
|
||||||
switch (key) {
|
|
||||||
case SR_CONF_SCAN_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return SR_ERR_NA;
|
|
||||||
}
|
|
||||||
|
|
||||||
return SR_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dev_acquisition_start(const struct sr_dev_inst *sdi)
|
static int dev_acquisition_start(const struct sr_dev_inst *sdi)
|
||||||
|
|
|
@ -327,21 +327,10 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *
|
||||||
GVariantBuilder gvb;
|
GVariantBuilder gvb;
|
||||||
int num_ols_changrp, i;
|
int num_ols_changrp, i;
|
||||||
|
|
||||||
(void)cg;
|
|
||||||
|
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case SR_CONF_SCAN_OPTIONS:
|
case SR_CONF_SCAN_OPTIONS:
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
if (!sdi)
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, drvopts, devopts);
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
drvopts, ARRAY_SIZE(drvopts), sizeof(uint32_t));
|
|
||||||
else
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_SAMPLERATE:
|
case SR_CONF_SAMPLERATE:
|
||||||
g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}"));
|
g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}"));
|
||||||
gvar = g_variant_new_fixed_array(G_VARIANT_TYPE("t"), samplerates,
|
gvar = g_variant_new_fixed_array(G_VARIANT_TYPE("t"), samplerates,
|
||||||
|
|
|
@ -242,55 +242,35 @@ static int config_list(uint32_t key, GVariant **data,
|
||||||
GVariant *tuple, *range[2];
|
GVariant *tuple, *range[2];
|
||||||
GVariantBuilder gvb;
|
GVariantBuilder gvb;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
int ret;
|
|
||||||
|
|
||||||
(void)cg;
|
switch (key) {
|
||||||
|
case SR_CONF_SCAN_OPTIONS:
|
||||||
ret = SR_OK;
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
if (!sdi) {
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, drvopts, devopts);
|
||||||
switch (key) {
|
case SR_CONF_SPL_WEIGHT_FREQ:
|
||||||
case SR_CONF_SCAN_OPTIONS:
|
*data = g_variant_new_strv(weight_freq, ARRAY_SIZE(weight_freq));
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
break;
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
case SR_CONF_SPL_WEIGHT_TIME:
|
||||||
break;
|
*data = g_variant_new_strv(weight_time, ARRAY_SIZE(weight_time));
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
break;
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
case SR_CONF_SPL_MEASUREMENT_RANGE:
|
||||||
drvopts, ARRAY_SIZE(drvopts), sizeof(uint32_t));
|
g_variant_builder_init(&gvb, G_VARIANT_TYPE_ARRAY);
|
||||||
break;
|
for (i = 0; i < ARRAY_SIZE(meas_ranges); i++) {
|
||||||
default:
|
range[0] = g_variant_new_uint64(meas_ranges[i][0]);
|
||||||
return SR_ERR_NA;
|
range[1] = g_variant_new_uint64(meas_ranges[i][1]);
|
||||||
}
|
tuple = g_variant_new_tuple(range, 2);
|
||||||
} else {
|
g_variant_builder_add_value(&gvb, tuple);
|
||||||
switch (key) {
|
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_SPL_WEIGHT_FREQ:
|
|
||||||
*data = g_variant_new_strv(weight_freq, ARRAY_SIZE(weight_freq));
|
|
||||||
break;
|
|
||||||
case SR_CONF_SPL_WEIGHT_TIME:
|
|
||||||
*data = g_variant_new_strv(weight_time, ARRAY_SIZE(weight_time));
|
|
||||||
break;
|
|
||||||
case SR_CONF_SPL_MEASUREMENT_RANGE:
|
|
||||||
g_variant_builder_init(&gvb, G_VARIANT_TYPE_ARRAY);
|
|
||||||
for (i = 0; i < ARRAY_SIZE(meas_ranges); i++) {
|
|
||||||
range[0] = g_variant_new_uint64(meas_ranges[i][0]);
|
|
||||||
range[1] = g_variant_new_uint64(meas_ranges[i][1]);
|
|
||||||
tuple = g_variant_new_tuple(range, 2);
|
|
||||||
g_variant_builder_add_value(&gvb, tuple);
|
|
||||||
}
|
|
||||||
*data = g_variant_builder_end(&gvb);
|
|
||||||
break;
|
|
||||||
case SR_CONF_DATA_SOURCE:
|
|
||||||
*data = g_variant_new_strv(data_sources, ARRAY_SIZE(data_sources));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return SR_ERR_NA;
|
|
||||||
}
|
}
|
||||||
|
*data = g_variant_builder_end(&gvb);
|
||||||
|
break;
|
||||||
|
case SR_CONF_DATA_SOURCE:
|
||||||
|
*data = g_variant_new_strv(data_sources, ARRAY_SIZE(data_sources));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return SR_ERR_NA;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return SR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dev_open(struct sr_dev_inst *sdi)
|
static int dev_open(struct sr_dev_inst *sdi)
|
||||||
|
|
|
@ -343,13 +343,9 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *
|
||||||
GVariantBuilder gvb;
|
GVariantBuilder gvb;
|
||||||
int num_pols_changrp, i;
|
int num_pols_changrp, i;
|
||||||
|
|
||||||
(void)cg;
|
|
||||||
|
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
return STD_CONFIG_LIST(key, data, sdi, cg, NULL, NULL, devopts);
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_SAMPLERATE:
|
case SR_CONF_SAMPLERATE:
|
||||||
g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}"));
|
g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}"));
|
||||||
gvar = g_variant_new_fixed_array(G_VARIANT_TYPE("t"), samplerates,
|
gvar = g_variant_new_fixed_array(G_VARIANT_TYPE("t"), samplerates,
|
||||||
|
|
|
@ -843,42 +843,15 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *
|
||||||
GVariant *tuple, *rational[2];
|
GVariant *tuple, *rational[2];
|
||||||
GVariantBuilder gvb;
|
GVariantBuilder gvb;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
struct dev_context *devc = NULL;
|
struct dev_context *devc;
|
||||||
|
|
||||||
/* SR_CONF_SCAN_OPTIONS is always valid, regardless of sdi or channel group. */
|
devc = (sdi) ? sdi->priv : NULL;
|
||||||
if (key == SR_CONF_SCAN_OPTIONS) {
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
return SR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* If sdi is NULL, nothing except SR_CONF_DEVICE_OPTIONS can be provided. */
|
|
||||||
if (key == SR_CONF_DEVICE_OPTIONS && !sdi) {
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
drvopts, ARRAY_SIZE(drvopts), sizeof(uint32_t));
|
|
||||||
return SR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Every other option requires a valid device instance. */
|
|
||||||
if (!sdi)
|
|
||||||
return SR_ERR_ARG;
|
|
||||||
devc = sdi->priv;
|
|
||||||
|
|
||||||
/* If a channel group is specified, it must be a valid one. */
|
|
||||||
if (cg && !g_slist_find(sdi->channel_groups, cg)) {
|
|
||||||
sr_err("Invalid channel group specified.");
|
|
||||||
return SR_ERR;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (key) {
|
switch (key) {
|
||||||
|
case SR_CONF_SCAN_OPTIONS:
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
if (!cg) {
|
if (!cg)
|
||||||
/* If cg is NULL, only the SR_CONF_DEVICE_OPTIONS that are not
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, drvopts, devopts);
|
||||||
* specific to a channel group must be returned. */
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
return SR_OK;
|
|
||||||
}
|
|
||||||
if (cg == devc->digital_group) {
|
if (cg == devc->digital_group) {
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
||||||
NULL, 0, sizeof(uint32_t));
|
NULL, 0, sizeof(uint32_t));
|
||||||
|
@ -895,17 +868,13 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SR_CONF_COUPLING:
|
case SR_CONF_COUPLING:
|
||||||
if (!cg) {
|
if (!cg)
|
||||||
sr_err("No channel group specified.");
|
|
||||||
return SR_ERR_CHANNEL_GROUP;
|
return SR_ERR_CHANNEL_GROUP;
|
||||||
}
|
|
||||||
*data = g_variant_new_strv(coupling, ARRAY_SIZE(coupling));
|
*data = g_variant_new_strv(coupling, ARRAY_SIZE(coupling));
|
||||||
break;
|
break;
|
||||||
case SR_CONF_PROBE_FACTOR:
|
case SR_CONF_PROBE_FACTOR:
|
||||||
if (!cg) {
|
if (!cg)
|
||||||
sr_err("No channel group specified.");
|
|
||||||
return SR_ERR_CHANNEL_GROUP;
|
return SR_ERR_CHANNEL_GROUP;
|
||||||
}
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT64,
|
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT64,
|
||||||
probe_factor, ARRAY_SIZE(probe_factor), sizeof(uint64_t));
|
probe_factor, ARRAY_SIZE(probe_factor), sizeof(uint64_t));
|
||||||
break;
|
break;
|
||||||
|
@ -913,10 +882,8 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *
|
||||||
if (!devc)
|
if (!devc)
|
||||||
/* Can't know this until we have the exact model. */
|
/* Can't know this until we have the exact model. */
|
||||||
return SR_ERR_ARG;
|
return SR_ERR_ARG;
|
||||||
if (!cg) {
|
if (!cg)
|
||||||
sr_err("No channel group specified.");
|
|
||||||
return SR_ERR_CHANNEL_GROUP;
|
return SR_ERR_CHANNEL_GROUP;
|
||||||
}
|
|
||||||
g_variant_builder_init(&gvb, G_VARIANT_TYPE_ARRAY);
|
g_variant_builder_init(&gvb, G_VARIANT_TYPE_ARRAY);
|
||||||
for (i = 0; i < devc->num_vdivs; i++) {
|
for (i = 0; i < devc->num_vdivs; i++) {
|
||||||
rational[0] = g_variant_new_uint64(devc->vdivs[i][0]);
|
rational[0] = g_variant_new_uint64(devc->vdivs[i][0]);
|
||||||
|
|
|
@ -217,30 +217,7 @@ static int config_set(uint32_t key, GVariant *data,
|
||||||
static int config_list(uint32_t key, GVariant **data,
|
static int config_list(uint32_t key, GVariant **data,
|
||||||
const struct sr_dev_inst *sdi, const struct sr_channel_group *cg)
|
const struct sr_dev_inst *sdi, const struct sr_channel_group *cg)
|
||||||
{
|
{
|
||||||
(void)sdi;
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, drvopts, devopts);
|
||||||
(void)cg;
|
|
||||||
|
|
||||||
/* Return drvopts without sdi (and devopts with sdi, see below). */
|
|
||||||
if (key == SR_CONF_DEVICE_OPTIONS && !sdi) {
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
drvopts, ARRAY_SIZE(drvopts), sizeof(uint32_t));
|
|
||||||
return SR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (key) {
|
|
||||||
case SR_CONF_SCAN_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return SR_ERR_NA;
|
|
||||||
}
|
|
||||||
|
|
||||||
return SR_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SR_PRIV struct sr_dev_driver rohde_schwarz_sme_0x_driver_info = {
|
SR_PRIV struct sr_dev_driver rohde_schwarz_sme_0x_driver_info = {
|
||||||
|
|
|
@ -353,23 +353,10 @@ static int config_list(uint32_t key, GVariant **data,
|
||||||
GVariant *gvar;
|
GVariant *gvar;
|
||||||
GVariantBuilder gvb;
|
GVariantBuilder gvb;
|
||||||
|
|
||||||
(void)sdi;
|
|
||||||
(void)cg;
|
|
||||||
|
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case SR_CONF_SCAN_OPTIONS:
|
case SR_CONF_SCAN_OPTIONS:
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
if (!sdi) {
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, drvopts, devopts);
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
drvopts, ARRAY_SIZE(drvopts), sizeof(uint32_t));
|
|
||||||
} else {
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case SR_CONF_SAMPLERATE:
|
case SR_CONF_SAMPLERATE:
|
||||||
g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}"));
|
g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}"));
|
||||||
gvar = g_variant_new_fixed_array(G_VARIANT_TYPE("t"),
|
gvar = g_variant_new_fixed_array(G_VARIANT_TYPE("t"),
|
||||||
|
|
|
@ -503,18 +503,10 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *
|
||||||
GVariantBuilder gvb;
|
GVariantBuilder gvb;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
(void)sdi;
|
|
||||||
(void)cg;
|
|
||||||
|
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case SR_CONF_SCAN_OPTIONS:
|
case SR_CONF_SCAN_OPTIONS:
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, NULL, devopts);
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_SAMPLERATE:
|
case SR_CONF_SAMPLERATE:
|
||||||
g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}"));
|
g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}"));
|
||||||
gvar = g_variant_new_fixed_array(G_VARIANT_TYPE("t"),
|
gvar = g_variant_new_fixed_array(G_VARIANT_TYPE("t"),
|
||||||
|
|
|
@ -520,28 +520,18 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *
|
||||||
int i;
|
int i;
|
||||||
const char *s[16];
|
const char *s[16];
|
||||||
|
|
||||||
/* Always available, even without sdi. */
|
devc = (sdi) ? sdi->priv : NULL;
|
||||||
if (key == SR_CONF_SCAN_OPTIONS) {
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
return SR_OK;
|
|
||||||
} else if (key == SR_CONF_DEVICE_OPTIONS && !sdi) {
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
drvopts, ARRAY_SIZE(drvopts), sizeof(uint32_t));
|
|
||||||
return SR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!sdi)
|
|
||||||
return SR_ERR_ARG;
|
|
||||||
devc = sdi->priv;
|
|
||||||
|
|
||||||
if (!cg) {
|
if (!cg) {
|
||||||
/* No channel group: global options. */
|
/* No channel group: global options. */
|
||||||
switch (key) {
|
switch (key) {
|
||||||
|
case SR_CONF_SCAN_OPTIONS:
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
return std_opts_config_list(key, data, sdi, cg,
|
||||||
devc->device->devopts, devc->device->num_devopts,
|
scanopts, ARRAY_SIZE(scanopts),
|
||||||
sizeof(uint32_t));
|
drvopts, ARRAY_SIZE(drvopts),
|
||||||
|
(devc) ? devc->device->devopts : NULL,
|
||||||
|
(devc) ? devc->device->num_devopts : 0);
|
||||||
break;
|
break;
|
||||||
case SR_CONF_CHANNEL_CONFIG:
|
case SR_CONF_CHANNEL_CONFIG:
|
||||||
/* Not used. */
|
/* Not used. */
|
||||||
|
|
|
@ -152,23 +152,7 @@ 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,
|
static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi,
|
||||||
const struct sr_channel_group *cg)
|
const struct sr_channel_group *cg)
|
||||||
{
|
{
|
||||||
(void)sdi;
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, NULL, devopts);
|
||||||
(void)cg;
|
|
||||||
|
|
||||||
switch (key) {
|
|
||||||
case SR_CONF_SCAN_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return SR_ERR_NA;
|
|
||||||
}
|
|
||||||
|
|
||||||
return SR_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dev_acquisition_start(const struct sr_dev_inst *sdi)
|
static int dev_acquisition_start(const struct sr_dev_inst *sdi)
|
||||||
|
|
|
@ -625,8 +625,6 @@ static int config_commit(const struct sr_dev_inst *sdi)
|
||||||
return SR_OK;
|
return SR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* List available choices for a configuration setting.
|
|
||||||
*/
|
|
||||||
static int config_list(uint32_t key, GVariant **data,
|
static int config_list(uint32_t key, GVariant **data,
|
||||||
const struct sr_dev_inst *sdi,
|
const struct sr_dev_inst *sdi,
|
||||||
const struct sr_channel_group *cg)
|
const struct sr_channel_group *cg)
|
||||||
|
@ -635,31 +633,16 @@ static int config_list(uint32_t key, GVariant **data,
|
||||||
GVariant *gvar;
|
GVariant *gvar;
|
||||||
GVariantBuilder gvb;
|
GVariantBuilder gvb;
|
||||||
|
|
||||||
(void)cg;
|
devc = (sdi) ? sdi->priv : NULL;
|
||||||
|
|
||||||
if (key == SR_CONF_SCAN_OPTIONS) {
|
switch (key) {
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
case SR_CONF_SCAN_OPTIONS:
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(scanopts[0]));
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
return SR_OK;
|
return std_opts_config_list(key, data, sdi, cg,
|
||||||
}
|
scanopts, ARRAY_SIZE(scanopts),
|
||||||
if (!sdi) {
|
drvopts, ARRAY_SIZE(drvopts),
|
||||||
if (key != SR_CONF_DEVICE_OPTIONS)
|
(devc) ? devc->model->devopts : NULL,
|
||||||
return SR_ERR_ARG;
|
(devc) ? devc->model->num_devopts : 0);
|
||||||
|
|
||||||
/* List driver capabilities. */
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
drvopts, ARRAY_SIZE(drvopts), sizeof(drvopts[0]));
|
|
||||||
return SR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
devc = sdi->priv;
|
|
||||||
|
|
||||||
/* List the model's device options. */
|
|
||||||
if (key == SR_CONF_DEVICE_OPTIONS) {
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
devc->model->devopts, devc->model->num_devopts,
|
|
||||||
sizeof(devc->model->devopts[0]));
|
|
||||||
return SR_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!has_devopt(devc->model, key | SR_CONF_LIST))
|
if (!has_devopt(devc->model, key | SR_CONF_LIST))
|
||||||
|
|
|
@ -136,23 +136,7 @@ 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,
|
static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi,
|
||||||
const struct sr_channel_group *cg)
|
const struct sr_channel_group *cg)
|
||||||
{
|
{
|
||||||
(void)sdi;
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, NULL, devopts);
|
||||||
(void)cg;
|
|
||||||
|
|
||||||
switch (key) {
|
|
||||||
case SR_CONF_SCAN_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return SR_ERR_NA;
|
|
||||||
}
|
|
||||||
|
|
||||||
return SR_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dev_acquisition_start(const struct sr_dev_inst *sdi)
|
static int dev_acquisition_start(const struct sr_dev_inst *sdi)
|
||||||
|
|
|
@ -222,23 +222,7 @@ 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,
|
static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi,
|
||||||
const struct sr_channel_group *cg)
|
const struct sr_channel_group *cg)
|
||||||
{
|
{
|
||||||
(void)sdi;
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, NULL, devopts);
|
||||||
(void)cg;
|
|
||||||
|
|
||||||
switch (key) {
|
|
||||||
case SR_CONF_SCAN_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return SR_ERR_NA;
|
|
||||||
}
|
|
||||||
|
|
||||||
return SR_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void receive_data(struct sr_dev_inst *sdi, unsigned char *data, int len)
|
static void receive_data(struct sr_dev_inst *sdi, unsigned char *data, int len)
|
||||||
|
|
|
@ -106,23 +106,7 @@ 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,
|
static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi,
|
||||||
const struct sr_channel_group *cg)
|
const struct sr_channel_group *cg)
|
||||||
{
|
{
|
||||||
(void)sdi;
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, NULL, devopts);
|
||||||
(void)cg;
|
|
||||||
|
|
||||||
switch (key) {
|
|
||||||
case SR_CONF_SCAN_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return SR_ERR_NA;
|
|
||||||
}
|
|
||||||
|
|
||||||
return SR_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dev_acquisition_start(const struct sr_dev_inst *sdi)
|
static int dev_acquisition_start(const struct sr_dev_inst *sdi)
|
||||||
|
|
|
@ -121,23 +121,7 @@ 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,
|
static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi,
|
||||||
const struct sr_channel_group *cg)
|
const struct sr_channel_group *cg)
|
||||||
{
|
{
|
||||||
(void)sdi;
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, NULL, devopts);
|
||||||
(void)cg;
|
|
||||||
|
|
||||||
switch (key) {
|
|
||||||
case SR_CONF_SCAN_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return SR_ERR_NA;
|
|
||||||
}
|
|
||||||
|
|
||||||
return SR_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dev_acquisition_start(const struct sr_dev_inst *sdi)
|
static int dev_acquisition_start(const struct sr_dev_inst *sdi)
|
||||||
|
|
|
@ -205,18 +205,10 @@ 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,
|
static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi,
|
||||||
const struct sr_channel_group *cg)
|
const struct sr_channel_group *cg)
|
||||||
{
|
{
|
||||||
(void)sdi;
|
|
||||||
(void)cg;
|
|
||||||
|
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case SR_CONF_SCAN_OPTIONS:
|
case SR_CONF_SCAN_OPTIONS:
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, NULL, devopts);
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_DATA_SOURCE:
|
case SR_CONF_DATA_SOURCE:
|
||||||
*data = g_variant_new_strv(data_sources, ARRAY_SIZE(data_sources));
|
*data = g_variant_new_strv(data_sources, ARRAY_SIZE(data_sources));
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -182,27 +182,7 @@ 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,
|
static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi,
|
||||||
const struct sr_channel_group *cg)
|
const struct sr_channel_group *cg)
|
||||||
{
|
{
|
||||||
(void)sdi;
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, drvopts, devopts);
|
||||||
(void)cg;
|
|
||||||
|
|
||||||
switch (key) {
|
|
||||||
case SR_CONF_SCAN_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
|
||||||
if (!sdi)
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
drvopts, ARRAY_SIZE(drvopts), sizeof(uint32_t));
|
|
||||||
else
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return SR_ERR_NA;
|
|
||||||
}
|
|
||||||
|
|
||||||
return SR_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void LIBUSB_CALL receive_transfer(struct libusb_transfer *transfer)
|
static void LIBUSB_CALL receive_transfer(struct libusb_transfer *transfer)
|
||||||
|
|
|
@ -470,28 +470,11 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *
|
||||||
const struct sr_channel_group *cg)
|
const struct sr_channel_group *cg)
|
||||||
{
|
{
|
||||||
int cg_type = CG_NONE;
|
int cg_type = CG_NONE;
|
||||||
struct dev_context *devc = NULL;
|
struct dev_context *devc;
|
||||||
const struct scope_config *model = NULL;
|
const struct scope_config *model;
|
||||||
|
|
||||||
/* SR_CONF_SCAN_OPTIONS is always valid, regardless of sdi or channel group. */
|
devc = (sdi) ? sdi->priv : NULL;
|
||||||
if (key == SR_CONF_SCAN_OPTIONS) {
|
model = (devc) ? devc->model_config : NULL;
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
dlm_scanopts, ARRAY_SIZE(dlm_scanopts), sizeof(uint32_t));
|
|
||||||
return SR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* If sdi is NULL, nothing except SR_CONF_DEVICE_OPTIONS can be provided. */
|
|
||||||
if (key == SR_CONF_DEVICE_OPTIONS && !sdi) {
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
dlm_drvopts, ARRAY_SIZE(dlm_drvopts), sizeof(uint32_t));
|
|
||||||
return SR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!sdi)
|
|
||||||
return SR_ERR_ARG;
|
|
||||||
|
|
||||||
devc = sdi->priv;
|
|
||||||
model = devc->model_config;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If cg is NULL, only the SR_CONF_DEVICE_OPTIONS that are not
|
* If cg is NULL, only the SR_CONF_DEVICE_OPTIONS that are not
|
||||||
|
@ -499,10 +482,9 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *
|
||||||
*/
|
*/
|
||||||
if (!cg) {
|
if (!cg) {
|
||||||
switch (key) {
|
switch (key) {
|
||||||
|
case SR_CONF_SCAN_OPTIONS:
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
return STD_CONFIG_LIST(key, data, sdi, cg, dlm_scanopts, dlm_drvopts, dlm_devopts);
|
||||||
dlm_devopts, ARRAY_SIZE(dlm_devopts), sizeof(uint32_t));
|
|
||||||
return SR_OK;
|
|
||||||
case SR_CONF_TIMEBASE:
|
case SR_CONF_TIMEBASE:
|
||||||
*data = build_tuples(&dlm_timebases, ARRAY_SIZE(dlm_timebases));
|
*data = build_tuples(&dlm_timebases, ARRAY_SIZE(dlm_timebases));
|
||||||
return SR_OK;
|
return SR_OK;
|
||||||
|
|
|
@ -399,18 +399,9 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *
|
||||||
double v;
|
double v;
|
||||||
GVariant *range[2];
|
GVariant *range[2];
|
||||||
|
|
||||||
(void)cg;
|
|
||||||
|
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
if (!sdi) {
|
return STD_CONFIG_LIST(key, data, sdi, cg, NULL, drvopts, devopts);
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
drvopts, ARRAY_SIZE(drvopts), sizeof(uint32_t));
|
|
||||||
} else {
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case SR_CONF_SAMPLERATE:
|
case SR_CONF_SAMPLERATE:
|
||||||
devc = sdi->priv;
|
devc = sdi->priv;
|
||||||
g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}"));
|
g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}"));
|
||||||
|
|
|
@ -853,18 +853,19 @@ SR_API int sr_config_commit(const struct sr_dev_inst *sdi)
|
||||||
* List all possible values for a configuration key.
|
* List all possible values for a configuration key.
|
||||||
*
|
*
|
||||||
* @param[in] driver The sr_dev_driver struct to query. Must not be NULL.
|
* @param[in] driver The sr_dev_driver struct to query. Must not be NULL.
|
||||||
* @param[in] sdi (optional) If the key is specific to a device, this must
|
* @param[in] sdi (optional) If the key is specific to a device instance, this
|
||||||
* contain a pointer to the struct sr_dev_inst to be checked.
|
* must contain a pointer to the struct sr_dev_inst to be checked.
|
||||||
* Otherwise it must be NULL. If sdi is != NULL, sdi->priv must
|
* Otherwise it must be NULL. If sdi is != NULL, sdi->priv must
|
||||||
* also be != NULL.
|
* also be != NULL.
|
||||||
* @param[in] cg The channel group on the device for which to list the
|
* @param[in] cg The channel group on the device instance for which to list
|
||||||
* values, or NULL.
|
* the values, or NULL. If this device instance doesn't
|
||||||
|
* have channel groups, this must not be != NULL.
|
||||||
* @param[in] key The configuration key (SR_CONF_*).
|
* @param[in] key The configuration key (SR_CONF_*).
|
||||||
* @param[in,out] data A pointer to a GVariant where the list will be stored.
|
* @param[in,out] data A pointer to a GVariant where the list will be stored.
|
||||||
* The caller is given ownership of the GVariant and must thus
|
* The caller is given ownership of the GVariant and must thus
|
||||||
* unref the GVariant after use. However if this function
|
* unref the GVariant after use. However if this function
|
||||||
* returns an error code, the field should be considered
|
* returns an error code, the field should be considered
|
||||||
* unused, and should not be unreferenced.
|
* unused, and should not be unreferenced.
|
||||||
*
|
*
|
||||||
* @retval SR_OK Success.
|
* @retval SR_OK Success.
|
||||||
* @retval SR_ERR Error.
|
* @retval SR_ERR Error.
|
||||||
|
@ -883,21 +884,50 @@ SR_API int sr_config_list(const struct sr_dev_driver *driver,
|
||||||
|
|
||||||
if (!driver || !data)
|
if (!driver || !data)
|
||||||
return SR_ERR;
|
return SR_ERR;
|
||||||
else if (!driver->config_list)
|
|
||||||
|
if (!driver->config_list)
|
||||||
return SR_ERR_ARG;
|
return SR_ERR_ARG;
|
||||||
else if (key != SR_CONF_SCAN_OPTIONS && key != SR_CONF_DEVICE_OPTIONS) {
|
|
||||||
|
if (key != SR_CONF_SCAN_OPTIONS && key != SR_CONF_DEVICE_OPTIONS) {
|
||||||
if (check_key(driver, sdi, cg, key, SR_CONF_LIST, NULL) != SR_OK)
|
if (check_key(driver, sdi, cg, key, SR_CONF_LIST, NULL) != SR_OK)
|
||||||
return SR_ERR_ARG;
|
return SR_ERR_ARG;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sdi && !sdi->priv) {
|
if (sdi && !sdi->priv) {
|
||||||
sr_err("Can't list config (sdi != NULL, sdi->priv == NULL).");
|
sr_err("Can't list config (sdi != NULL, sdi->priv == NULL).");
|
||||||
return SR_ERR;
|
return SR_ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (key != SR_CONF_SCAN_OPTIONS && key != SR_CONF_DEVICE_OPTIONS && !sdi) {
|
||||||
|
sr_err("Config keys other than SR_CONF_SCAN_OPTIONS and "
|
||||||
|
"SR_CONF_DEVICE_OPTIONS always need an sdi.");
|
||||||
|
return SR_ERR_ARG;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cg && sdi && !sdi->channel_groups) {
|
||||||
|
sr_err("Can't list config for channel group, there are none.");
|
||||||
|
return SR_ERR_ARG;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cg && sdi && !g_slist_find(sdi->channel_groups, cg)) {
|
||||||
|
sr_err("If a channel group is specified, it must be a valid one.");
|
||||||
|
return SR_ERR_ARG;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cg && !sdi) {
|
||||||
|
sr_err("Need sdi when a channel group is specified.");
|
||||||
|
return SR_ERR_ARG;
|
||||||
|
}
|
||||||
|
|
||||||
if ((ret = driver->config_list(key, data, sdi, cg)) == SR_OK) {
|
if ((ret = driver->config_list(key, data, sdi, cg)) == SR_OK) {
|
||||||
log_key(sdi, cg, key, SR_CONF_LIST, *data);
|
log_key(sdi, cg, key, SR_CONF_LIST, *data);
|
||||||
g_variant_ref_sink(*data);
|
g_variant_ref_sink(*data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ret == SR_ERR_CHANNEL_GROUP)
|
||||||
|
sr_err("%s: No channel group specified.",
|
||||||
|
(sdi) ? sdi->driver->name : "unknown");
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -251,32 +251,6 @@ static int serial_stream_check(struct sr_serial_dev_inst *serial,
|
||||||
is_valid, timeout_ms, baudrate);
|
is_valid, timeout_ms, baudrate);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct std_opt_desc {
|
|
||||||
const uint32_t *scanopts;
|
|
||||||
const int num_scanopts;
|
|
||||||
const uint32_t *devopts;
|
|
||||||
const int num_devopts;
|
|
||||||
};
|
|
||||||
|
|
||||||
static int std_config_list(uint32_t key, GVariant **data,
|
|
||||||
const struct std_opt_desc *d)
|
|
||||||
{
|
|
||||||
switch (key) {
|
|
||||||
case SR_CONF_SCAN_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
d->scanopts, d->num_scanopts, sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
d->devopts, d->num_devopts, sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return SR_ERR_NA;
|
|
||||||
}
|
|
||||||
|
|
||||||
return SR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int send_config_update(struct sr_dev_inst *sdi, struct sr_config *cfg)
|
static int send_config_update(struct sr_dev_inst *sdi, struct sr_config *cfg)
|
||||||
{
|
{
|
||||||
struct sr_datafeed_packet packet;
|
struct sr_datafeed_packet packet;
|
||||||
|
@ -874,22 +848,14 @@ static const uint32_t devopts[] = {
|
||||||
SR_CONF_EQUIV_CIRCUIT_MODEL | SR_CONF_GET | SR_CONF_LIST,
|
SR_CONF_EQUIV_CIRCUIT_MODEL | SR_CONF_GET | SR_CONF_LIST,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct std_opt_desc opts = {
|
|
||||||
scanopts, ARRAY_SIZE(scanopts),
|
|
||||||
devopts, ARRAY_SIZE(devopts),
|
|
||||||
};
|
|
||||||
|
|
||||||
SR_PRIV int es51919_serial_config_list(uint32_t key, GVariant **data,
|
SR_PRIV int es51919_serial_config_list(uint32_t key, GVariant **data,
|
||||||
const struct sr_dev_inst *sdi,
|
const struct sr_dev_inst *sdi,
|
||||||
const struct sr_channel_group *cg)
|
const struct sr_channel_group *cg)
|
||||||
{
|
{
|
||||||
(void)sdi;
|
|
||||||
(void)cg;
|
|
||||||
|
|
||||||
if (std_config_list(key, data, &opts) == SR_OK)
|
|
||||||
return SR_OK;
|
|
||||||
|
|
||||||
switch (key) {
|
switch (key) {
|
||||||
|
case SR_CONF_SCAN_OPTIONS:
|
||||||
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
|
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, NULL, devopts);
|
||||||
case SR_CONF_OUTPUT_FREQUENCY:
|
case SR_CONF_OUTPUT_FREQUENCY:
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_DOUBLE,
|
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_DOUBLE,
|
||||||
frequencies, ARRAY_SIZE(frequencies), sizeof(double));
|
frequencies, ARRAY_SIZE(frequencies), sizeof(double));
|
||||||
|
|
|
@ -947,6 +947,15 @@ SR_PRIV GSList *std_dev_list(const struct sr_dev_driver *di);
|
||||||
SR_PRIV int std_serial_dev_close(struct sr_dev_inst *sdi);
|
SR_PRIV int std_serial_dev_close(struct sr_dev_inst *sdi);
|
||||||
SR_PRIV GSList *std_scan_complete(struct sr_dev_driver *di, GSList *devices);
|
SR_PRIV GSList *std_scan_complete(struct sr_dev_driver *di, GSList *devices);
|
||||||
|
|
||||||
|
SR_PRIV int std_opts_config_list(uint32_t key, GVariant **data,
|
||||||
|
const struct sr_dev_inst *sdi, const struct sr_channel_group *cg,
|
||||||
|
const uint32_t scanopts[], size_t scansize, const uint32_t drvopts[],
|
||||||
|
size_t drvsize, const uint32_t devopts[], size_t devsize);
|
||||||
|
|
||||||
|
#define STD_CONFIG_LIST(key, data, sdi, cg, scanopts, drvopts, devopts) \
|
||||||
|
std_opts_config_list(key, data, sdi, cg, ARRAY_AND_SIZE(scanopts), \
|
||||||
|
ARRAY_AND_SIZE(drvopts), ARRAY_AND_SIZE(devopts))
|
||||||
|
|
||||||
/*--- resource.c ------------------------------------------------------------*/
|
/*--- resource.c ------------------------------------------------------------*/
|
||||||
|
|
||||||
SR_PRIV int64_t sr_file_get_size(FILE *file);
|
SR_PRIV int64_t sr_file_get_size(FILE *file);
|
||||||
|
|
|
@ -319,19 +319,7 @@ 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,
|
static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi,
|
||||||
const struct sr_channel_group *cg)
|
const struct sr_channel_group *cg)
|
||||||
{
|
{
|
||||||
(void)sdi;
|
return STD_CONFIG_LIST(key, data, sdi, cg, NULL, NULL, devopts);
|
||||||
(void)cg;
|
|
||||||
|
|
||||||
switch (key) {
|
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
|
||||||
devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return SR_ERR_NA;
|
|
||||||
}
|
|
||||||
|
|
||||||
return SR_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dev_acquisition_start(const struct sr_dev_inst *sdi)
|
static int dev_acquisition_start(const struct sr_dev_inst *sdi)
|
||||||
|
|
43
src/std.c
43
src/std.c
|
@ -497,3 +497,46 @@ SR_PRIV GSList *std_scan_complete(struct sr_dev_driver *di, GSList *devices)
|
||||||
|
|
||||||
return devices;
|
return devices;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SR_PRIV int std_opts_config_list(uint32_t key, GVariant **data,
|
||||||
|
const struct sr_dev_inst *sdi, const struct sr_channel_group *cg,
|
||||||
|
const uint32_t scanopts[], size_t scansize, const uint32_t drvopts[],
|
||||||
|
size_t drvsize, const uint32_t devopts[], size_t devsize)
|
||||||
|
{
|
||||||
|
switch (key) {
|
||||||
|
case SR_CONF_SCAN_OPTIONS:
|
||||||
|
/* Always return scanopts, regardless of sdi or cg. */
|
||||||
|
if (!scanopts)
|
||||||
|
return SR_ERR_ARG;
|
||||||
|
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
||||||
|
scanopts, scansize, sizeof(uint32_t));
|
||||||
|
break;
|
||||||
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
|
if (!sdi) {
|
||||||
|
/* sdi == NULL: return drvopts. */
|
||||||
|
if (!drvopts)
|
||||||
|
return SR_ERR_ARG;
|
||||||
|
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
||||||
|
drvopts, drvsize, sizeof(uint32_t));
|
||||||
|
} else if (sdi && !cg) {
|
||||||
|
/* sdi != NULL, cg == NULL: return devopts. */
|
||||||
|
if (!devopts)
|
||||||
|
return SR_ERR_ARG;
|
||||||
|
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
|
||||||
|
devopts, devsize, sizeof(uint32_t));
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
* Note: sdi != NULL, cg != NULL is not handled by
|
||||||
|
* this function since it's very driver-specific.
|
||||||
|
*/
|
||||||
|
sr_err("%s: %s: sdi/cg != NULL: not handling.",
|
||||||
|
sdi->driver->name, __func__);
|
||||||
|
return SR_ERR_ARG;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return SR_ERR_NA;
|
||||||
|
}
|
||||||
|
|
||||||
|
return SR_OK;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue