static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi,
const struct sr_channel_group *cg)
{
- GVariant *tuple, *range[2];
- GVariantBuilder gvb;
- unsigned int i;
-
switch (key) {
case SR_CONF_SCAN_OPTIONS:
case SR_CONF_DEVICE_OPTIONS:
*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);
+ *data = std_gvar_tuple_array(&meas_ranges, ARRAY_SIZE(meas_ranges));
break;
case SR_CONF_DATA_SOURCE:
*data = g_variant_new_strv(data_sources, ARRAY_SIZE(data_sources));
return ret;
}
-static GVariant *build_tuples(const uint64_t (*array)[][2], unsigned int n)
-{
- unsigned int i;
- GVariant *rational[2];
- GVariantBuilder gvb;
-
- g_variant_builder_init(&gvb, G_VARIANT_TYPE_ARRAY);
-
- for (i = 0; i < n; i++) {
- rational[0] = g_variant_new_uint64((*array)[i][0]);
- rational[1] = g_variant_new_uint64((*array)[i][1]);
-
- /* FIXME: Valgrind reports a memory leak here. */
- g_variant_builder_add_value(&gvb, g_variant_new_tuple(rational, 2));
- }
-
- return g_variant_builder_end(&gvb);
-}
-
static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sdi,
const struct sr_channel_group *cg)
{
case SR_CONF_TIMEBASE:
if (!model)
return SR_ERR_ARG;
- *data = build_tuples(model->timebases, model->num_timebases);
+ *data = std_gvar_tuple_array(model->timebases, model->num_timebases);
break;
case SR_CONF_VDIV:
if (cg_type == CG_NONE)
return SR_ERR_CHANNEL_GROUP;
- *data = build_tuples(model->vdivs, model->num_vdivs);
+ *data = std_gvar_tuple_array(model->vdivs, model->num_vdivs);
break;
default:
return SR_ERR_NA;
static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi,
const struct sr_channel_group *cg)
{
- GVariant *tuple, *rational[2];
GVariantBuilder gvb;
- unsigned int i;
GVariant *gvar;
struct dev_context *devc;
*data = g_variant_new_strv(devc->coupling_vals, devc->coupling_tab_size);
break;
case SR_CONF_VDIV:
- g_variant_builder_init(&gvb, G_VARIANT_TYPE_ARRAY);
- for (i = 0; i < ARRAY_SIZE(vdivs); i++) {
- rational[0] = g_variant_new_uint64(vdivs[i][0]);
- rational[1] = g_variant_new_uint64(vdivs[i][1]);
- tuple = g_variant_new_tuple(rational, 2);
- g_variant_builder_add_value(&gvb, tuple);
- }
- *data = g_variant_builder_end(&gvb);
+ *data = std_gvar_tuple_array(&vdivs, ARRAY_SIZE(vdivs));
break;
default:
return SR_ERR_NA;
const struct sr_channel_group *cg)
{
struct dev_context *devc;
- GVariant *tuple, *rational[2];
- GVariantBuilder gvb;
- unsigned int i;
if (!cg) {
switch (key) {
devc->profile->buffersizes, NUM_BUFFER_SIZES, sizeof(uint64_t));
break;
case SR_CONF_TIMEBASE:
- g_variant_builder_init(&gvb, G_VARIANT_TYPE_ARRAY);
- for (i = 0; i < ARRAY_SIZE(timebases); i++) {
- rational[0] = g_variant_new_uint64(timebases[i][0]);
- rational[1] = g_variant_new_uint64(timebases[i][1]);
- tuple = g_variant_new_tuple(rational, 2);
- g_variant_builder_add_value(&gvb, tuple);
- }
- *data = g_variant_builder_end(&gvb);
+ *data = std_gvar_tuple_array(&timebases, ARRAY_SIZE(timebases));
break;
case SR_CONF_TRIGGER_SOURCE:
*data = g_variant_new_strv(trigger_sources,
*data = g_variant_new_strv(coupling, ARRAY_SIZE(coupling));
break;
case SR_CONF_VDIV:
- g_variant_builder_init(&gvb, G_VARIANT_TYPE_ARRAY);
- for (i = 0; i < ARRAY_SIZE(vdivs); i++) {
- rational[0] = g_variant_new_uint64(vdivs[i][0]);
- rational[1] = g_variant_new_uint64(vdivs[i][1]);
- tuple = g_variant_new_tuple(rational, 2);
- g_variant_builder_add_value(&gvb, tuple);
- }
- *data = g_variant_builder_end(&gvb);
+ *data = std_gvar_tuple_array(&vdivs, ARRAY_SIZE(vdivs));
break;
default:
return SR_ERR_NA;
const struct sr_channel_group *cg)
{
GVariantBuilder gvb;
- GVariant *gvar, *rational[2];
+ GVariant *gvar;
GSList *l;
- int i;
switch (key) {
case SR_CONF_SCAN_OPTIONS:
buffersizes, ARRAY_SIZE(buffersizes), sizeof(uint64_t));
break;
case SR_CONF_VDIV:
- g_variant_builder_init(&gvb, G_VARIANT_TYPE_ARRAY);
- for (i = 0; i < (int)ARRAY_SIZE(vdivs); i++) {
- rational[0] = g_variant_new_uint64(vdivs[i][0]);
- rational[1] = g_variant_new_uint64(vdivs[i][1]);
- gvar = g_variant_new_tuple(rational, 2);
- g_variant_builder_add_value(&gvb, gvar);
- }
- *data = g_variant_builder_end(&gvb);
+ *data = std_gvar_tuple_array(&vdivs, ARRAY_SIZE(vdivs));
break;
case SR_CONF_COUPLING:
*data = g_variant_new_strv(coupling, ARRAY_SIZE(coupling));
static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi,
const struct sr_channel_group *cg)
{
- GVariant *tuple, *rational[2];
- GVariantBuilder gvb;
- unsigned int i;
-
switch (key) {
case SR_CONF_DEVICE_OPTIONS:
return STD_CONFIG_LIST(key, data, sdi, cg, NULL, drvopts, devopts);
case SR_CONF_SAMPLE_INTERVAL:
- g_variant_builder_init(&gvb, G_VARIANT_TYPE_ARRAY);
- for (i = 0; i < ARRAY_SIZE(kecheng_kc_330b_sample_intervals); i++) {
- rational[0] = g_variant_new_uint64(kecheng_kc_330b_sample_intervals[i][0]);
- rational[1] = g_variant_new_uint64(kecheng_kc_330b_sample_intervals[i][1]);
- tuple = g_variant_new_tuple(rational, 2);
- g_variant_builder_add_value(&gvb, tuple);
- }
- *data = g_variant_builder_end(&gvb);
+ *data = std_gvar_tuple_array(&kecheng_kc_330b_sample_intervals,
+ ARRAY_SIZE(kecheng_kc_330b_sample_intervals));
break;
case SR_CONF_SPL_WEIGHT_FREQ:
*data = g_variant_new_strv(weight_freq, ARRAY_SIZE(weight_freq));
return SR_OK;
}
-static GVariant *build_tuples(const struct sr_rational *array, unsigned int n)
-{
- unsigned int i;
- GVariant *rational[2];
- GVariantBuilder gvb;
-
- g_variant_builder_init(&gvb, G_VARIANT_TYPE_ARRAY);
-
- for (i = 0; i < n; i++) {
- rational[0] = g_variant_new_uint64(array[i].p);
- rational[1] = g_variant_new_uint64(array[i].q);
-
- /* FIXME: Valgrind reports a memory leak here. */
- g_variant_builder_add_value(&gvb, g_variant_new_tuple(rational, 2));
- }
-
- return g_variant_builder_end(&gvb);
-}
-
static int config_set(uint32_t key, GVariant *data,
const struct sr_dev_inst *sdi, const struct sr_channel_group *cg)
{
case SR_CONF_TIMEBASE:
if (!model)
return SR_ERR_ARG;
- *data = build_tuples(model->timebases, model->num_timebases);
+ *data = std_gvar_tuple_rational(model->timebases, model->num_timebases);
break;
case SR_CONF_VDIV:
if (!model)
return SR_ERR_ARG;
- *data = build_tuples(model->vdivs, model->num_vdivs);
+ *data = std_gvar_tuple_rational(model->vdivs, model->num_vdivs);
break;
default:
return SR_ERR_NA;
static int config_list(uint32_t key, GVariant **data,
const struct sr_dev_inst *sdi, const struct sr_channel_group *cg)
{
- GVariant *tuple, *range[2];
- GVariantBuilder gvb;
- unsigned int i;
-
switch (key) {
case SR_CONF_SCAN_OPTIONS:
case SR_CONF_DEVICE_OPTIONS:
*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);
+ *data = std_gvar_tuple_array(&meas_ranges, ARRAY_SIZE(meas_ranges));
break;
case SR_CONF_DATA_SOURCE:
*data = g_variant_new_strv(data_sources, ARRAY_SIZE(data_sources));
static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi,
const struct sr_channel_group *cg)
{
- GVariant *tuple, *rational[2];
- GVariantBuilder gvb;
unsigned int i;
struct dev_context *devc;
return SR_ERR_ARG;
if (!cg)
return SR_ERR_CHANNEL_GROUP;
- g_variant_builder_init(&gvb, G_VARIANT_TYPE_ARRAY);
- for (i = 0; i < devc->num_vdivs; i++) {
- rational[0] = g_variant_new_uint64(devc->vdivs[i][0]);
- rational[1] = g_variant_new_uint64(devc->vdivs[i][1]);
- tuple = g_variant_new_tuple(rational, 2);
- g_variant_builder_add_value(&gvb, tuple);
- }
- *data = g_variant_builder_end(&gvb);
+ *data = std_gvar_tuple_array((const uint64_t (*)[][2])devc->vdivs, devc->num_vdivs);
break;
case SR_CONF_TIMEBASE:
if (!devc)
return SR_ERR_ARG;
if (devc->num_timebases <= 0)
return SR_ERR_NA;
- g_variant_builder_init(&gvb, G_VARIANT_TYPE_ARRAY);
- for (i = 0; i < devc->num_timebases; i++) {
- rational[0] = g_variant_new_uint64(devc->timebases[i][0]);
- rational[1] = g_variant_new_uint64(devc->timebases[i][1]);
- tuple = g_variant_new_tuple(rational, 2);
- g_variant_builder_add_value(&gvb, tuple);
- }
- *data = g_variant_builder_end(&gvb);
+ *data = std_gvar_tuple_array((const uint64_t (*)[][2])devc->timebases, devc->num_timebases);
break;
case SR_CONF_TRIGGER_SOURCE:
if (!devc)
return ret;
}
-static GVariant *build_tuples(const uint64_t (*array)[][2], unsigned int n)
-{
- unsigned int i;
- GVariant *rational[2];
- GVariantBuilder gvb;
-
- g_variant_builder_init(&gvb, G_VARIANT_TYPE_ARRAY);
-
- for (i = 0; i < n; i++) {
- rational[0] = g_variant_new_uint64((*array)[i][0]);
- rational[1] = g_variant_new_uint64((*array)[i][1]);
-
- /* FIXME: Valgrind reports a memory leak here. */
- g_variant_builder_add_value(&gvb, g_variant_new_tuple(rational, 2));
- }
-
- return g_variant_builder_end(&gvb);
-}
-
static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sdi,
const struct sr_channel_group *cg)
{
case SR_CONF_DEVICE_OPTIONS:
return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, drvopts, devopts);
case SR_CONF_TIMEBASE:
- *data = build_tuples(&dlm_timebases, ARRAY_SIZE(dlm_timebases));
+ *data = std_gvar_tuple_array(&dlm_timebases, ARRAY_SIZE(dlm_timebases));
return SR_OK;
case SR_CONF_TRIGGER_SOURCE:
if (!model)
case SR_CONF_VDIV:
if (cg_type == CG_NONE)
return SR_ERR_CHANNEL_GROUP;
- *data = build_tuples(&dlm_vdivs, ARRAY_SIZE(dlm_vdivs));
+ *data = std_gvar_tuple_array(&dlm_vdivs, ARRAY_SIZE(dlm_vdivs));
break;
default:
return SR_ERR_NA;
std_opts_config_list(key, data, sdi, cg, ARRAY_AND_SIZE(scanopts), \
ARRAY_AND_SIZE(drvopts), ARRAY_AND_SIZE(devopts))
+SR_PRIV GVariant *std_gvar_tuple_array(const uint64_t (*a)[][2], unsigned int n);
+SR_PRIV GVariant *std_gvar_tuple_rational(const struct sr_rational *r, unsigned int n);
+
+
/*--- resource.c ------------------------------------------------------------*/
SR_PRIV int64_t sr_file_get_size(FILE *file);
return SR_OK;
}
+
+SR_PRIV GVariant *std_gvar_tuple_array(const uint64_t (*a)[][2], unsigned int n)
+{
+ unsigned int i;
+ GVariant *rational[2];
+ GVariantBuilder gvb;
+
+ g_variant_builder_init(&gvb, G_VARIANT_TYPE_ARRAY);
+
+ for (i = 0; i < n; i++) {
+ rational[0] = g_variant_new_uint64((*a)[i][0]);
+ rational[1] = g_variant_new_uint64((*a)[i][1]);
+
+ /* FIXME: Valgrind reports a memory leak here. */
+ g_variant_builder_add_value(&gvb, g_variant_new_tuple(rational, 2));
+ }
+
+ return g_variant_builder_end(&gvb);
+}
+
+SR_PRIV GVariant *std_gvar_tuple_rational(const struct sr_rational *r, unsigned int n)
+{
+ unsigned int i;
+ GVariant *rational[2];
+ GVariantBuilder gvb;
+
+ g_variant_builder_init(&gvb, G_VARIANT_TYPE_ARRAY);
+
+ for (i = 0; i < n; i++) {
+ rational[0] = g_variant_new_uint64(r[i].p);
+ rational[1] = g_variant_new_uint64(r[i].q);
+
+ /* FIXME: Valgrind reports a memory leak here. */
+ g_variant_builder_add_value(&gvb, g_variant_new_tuple(rational, 2));
+ }
+
+ return g_variant_builder_end(&gvb);
+}