Skip to content

Commit cdc7209

Browse files
osc.c: final fixes
read attributes correctly when loading plugins update osc_test_value function for both device and channel attrs update osc_read_nonenclosed_value to do the same remove context clone remove unnecessary commented lines Signed-off-by: Cristina Suteu <[email protected]>
1 parent 65d405a commit cdc7209

File tree

1 file changed

+60
-58
lines changed

1 file changed

+60
-58
lines changed

Diff for: osc.c

+60-58
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,6 @@ unsigned global_enabled_channels_mask(struct iio_device *dev, struct iio_channel
167167
unsigned mask = 0;
168168
int scan_i = 0;
169169
unsigned int i = 0;
170-
//struct iio_channels_mask *ch_mask = iio_create_channels_mask(iio_device_get_channels_count(dev));
171170

172171
for (; i < iio_device_get_channels_count(dev); i++) {
173172
struct iio_channel *chn = iio_device_get_channel(dev, i);
@@ -1630,7 +1629,6 @@ static void plot_destroyed_cb(OscPlot *plot)
16301629
{
16311630
plot_list = g_list_remove(plot_list, plot);
16321631
stop_sampling();
1633-
// !!! capture_setup();
16341632
if (num_capturing_plots)
16351633
capture_start();
16361634
restart_all_running_plots();
@@ -2543,14 +2541,8 @@ struct iio_context * osc_create_context(void)
25432541
{
25442542
if (!ctx)
25452543
return iio_create_context(NULL, NULL);
2546-
else {
2547-
// !!!! context clone causes seg fault
2548-
// const struct iio_context_params * ctx_params = iio_context_get_params(ctx);
2549-
// const struct iio_attr *ctx_uri = iio_context_find_attr(ctx, "uri");
2550-
// const char *uri_val = iio_attr_get_static_value(ctx_uri);
2551-
// ctx = iio_create_context(ctx_params, uri_val);
2544+
else
25522545
return ctx;
2553-
}
25542546
}
25552547

25562548
void osc_destroy_context(struct iio_context *_ctx)
@@ -2577,29 +2569,36 @@ void osc_process_gtk_events(unsigned int msecs)
25772569
}
25782570
}
25792571

2580-
/* Test something, according to:
2572+
/* The format below no longer works
2573+
* with libiio v1.0 API for channel attrs
2574+
* Test something, according to:
25812575
* test.device.attribute.type = min max
2576+
* A channel attr should be tested :
2577+
* test.device.ch-(id/index/name).0/1.attribute.type = min max
25822578
*/
25832579
int osc_test_value(struct iio_context *_ctx, int line,
25842580
const char *attribute, const char *value)
25852581
{
25862582
struct iio_device *dev;
25872583
struct iio_channel *chn;
2588-
const char *attr;
2589-
const char *filename;
2584+
const struct iio_attr *attrib;
2585+
const char *attr = attribute;
25902586
long long min_i = -1, max_i = -1, val_i;
25912587
double min_d, max_d, val_d;
2592-
unsigned int i;
2588+
int i,j;
25932589
int ret = -EINVAL;
25942590

2595-
gchar **elems = g_strsplit(attribute, ".", 4);
2591+
for (j=0; attr[j]; attr[j]=='.' ? j++ : *attr++);
2592+
2593+
2594+
gchar **elems = g_strsplit(attribute, ".", j+1);
25962595
if (!elems)
25972596
goto err_popup;
25982597

25992598
if (!elems[0] || strcmp(elems[0], "test"))
26002599
goto cleanup;
26012600

2602-
for (i = 1; i < 4; i++)
2601+
for (i = 1; i < j+1; i++)
26032602
if (!elems[i])
26042603
goto cleanup;
26052604

@@ -2609,27 +2608,25 @@ int osc_test_value(struct iio_context *_ctx, int line,
26092608
goto cleanup;
26102609
}
26112610

2612-
const struct iio_attr *attrib = iio_device_find_attr(dev, elems[2]);
2613-
filename = iio_attr_get_filename(attrib);
2614-
ret = iio_err(filename);
2615-
//ret = iio_device_identify_filename(dev, elems[2], &chn, &attr);
2611+
if(j == 3) {
2612+
attrib = iio_device_find_attr(dev, elems[2]);
2613+
} else if(j == 5) {
2614+
chn = iio_device_find_channel(dev, elems[2],elems[3]);
2615+
attrib = iio_channel_find_attr(chn, elems[4]);
2616+
}
2617+
26162618
if (ret < 0)
26172619
goto cleanup;
26182620

2619-
if (!strcmp(elems[3], "int")) {
2621+
if (!strcmp(elems[j-1], "int")) {
26202622
ret = sscanf(value, "%lli %lli", &min_i, &max_i);
26212623
if (ret != 2) {
26222624
ret = -EINVAL;
26232625
goto cleanup;
26242626
}
26252627

2626-
//attrib = iio_channel_find_attr()
2627-
//ret = iio_attr_read_longlong()
26282628
ret = iio_attr_read_longlong(attrib, &val_i);
2629-
// if (chn)
2630-
// ret = iio_channel_attr_read_longlong(chn, attr, &val_i);
2631-
// else
2632-
// ret = iio_device_attr_read_longlong(dev, attr, &val_i);
2629+
26332630
if (ret < 0)
26342631
goto cleanup;
26352632

@@ -2644,7 +2641,7 @@ int osc_test_value(struct iio_context *_ctx, int line,
26442641
"Value read = %lli\n",
26452642
line, attribute, min_i, max_i, val_i);
26462643

2647-
} else if (!strcmp(elems[3], "double")) {
2644+
} else if (!strcmp(elems[j-1], "double")) {
26482645
gchar *end1, *end2;
26492646
min_d = g_ascii_strtod(value, &end1);
26502647
if (end1 == value) {
@@ -2659,10 +2656,7 @@ int osc_test_value(struct iio_context *_ctx, int line,
26592656
}
26602657

26612658
ret = iio_attr_read_double(attrib, &val_d);
2662-
// if (chn)
2663-
// ret = iio_channel_attr_read_double(chn, attr, &val_d);
2664-
// else
2665-
// ret = iio_device_attr_read_double(dev, attr, &val_d);
2659+
26662660
if (ret < 0)
26672661
goto cleanup;
26682662

@@ -2741,10 +2735,8 @@ int osc_identify_attrib(struct iio_context *_ctx, const char *attrib,
27412735
goto cleanup;
27422736
}
27432737
const struct iio_attr *attribute = iio_channel_find_attr(*chn, *attr);
2744-
file = iio_attr_get_filename(attribute);
2745-
ret = iio_err(file);
2746-
//ret = iio_device_identify_filename(device, filename, chn, attr);
2747-
if (!ret) {
2738+
ret = iio_err(attribute);
2739+
if (ret == 0) {
27482740
*debug = is_debug;
27492741
*dev = device;
27502742
}
@@ -2759,6 +2751,7 @@ static int osc_read_nonenclosed_value(struct iio_context *_ctx,
27592751
{
27602752
struct iio_device *dev;
27612753
struct iio_channel *chn;
2754+
const struct iio_attr *attribute;
27622755
const char *attr;
27632756
char *pend;
27642757
bool debug;
@@ -2773,15 +2766,17 @@ static int osc_read_nonenclosed_value(struct iio_context *_ctx,
27732766
}
27742767
if (ret < 0)
27752768
return ret;
2776-
const struct iio_attr *attribute;
2777-
attribute = iio_device_find_attr(dev, attr);
2778-
ret = iio_attr_read_longlong(attribute, out);
2779-
// if (chn)
2780-
// ret = iio_channel_attr_read_longlong(chn, attr, out);
2781-
// else if (debug)
2782-
// ret = iio_device_debug_attr_read_longlong(dev, attr, out);
2783-
// else
2784-
// ret = iio_device_attr_read_longlong(dev, attr, out);
2769+
2770+
if (chn) {
2771+
attribute = iio_channel_find_attr(chn, attr);
2772+
ret = iio_attr_read_longlong(attribute, out);
2773+
} else if (debug) {
2774+
attribute = iio_channel_find_attr(chn, attr);
2775+
ret = iio_attr_read_longlong(attribute, out);
2776+
} else {
2777+
attribute = iio_device_find_attr(dev, attr);
2778+
ret = iio_attr_read_longlong(attribute, out);
2779+
}
27852780
return ret < 0 ? ret : 0;
27862781
}
27872782

@@ -2929,6 +2924,7 @@ int osc_plugin_default_handle(struct iio_context *_ctx,
29292924
{
29302925
struct iio_device *dev;
29312926
struct iio_channel *chn;
2927+
const struct iio_attr *attribute;
29322928
const char *attr;
29332929
bool debug;
29342930
int ret;
@@ -2960,20 +2956,26 @@ int osc_plugin_default_handle(struct iio_context *_ctx,
29602956
return ret;
29612957
}
29622958

2963-
// if (chn)
2964-
// ret = iio_channel_attr_write_longlong(chn, attr, lval);
2965-
// else if (debug)
2966-
// ret = iio_device_debug_attr_write_longlong(dev, attr, lval);
2967-
// else
2968-
const struct iio_attr *attrib = iio_device_find_attr(dev, attr);
2969-
ret = iio_attr_write_longlong(attrib, lval);
2970-
} /*else if (chn)
2971-
ret = iio_channel_attr_write(chn, attr, value);
2972-
else if (debug)
2973-
ret = iio_device_debug_attr_write(dev, attr, value);*/
2974-
else {
2975-
const struct iio_attr *attrib = iio_device_find_attr(dev, attr);
2976-
ret = iio_attr_write(attrib,value);
2959+
if (chn) {
2960+
attribute = iio_channel_find_attr(chn, attr);
2961+
ret = iio_attr_write_longlong(attribute, lval);
2962+
} else if (debug) {
2963+
attribute = iio_device_find_debug_attr(dev, attr);
2964+
ret = iio_attr_write_longlong(attribute, lval);
2965+
}
2966+
else {
2967+
attribute = iio_device_find_attr(dev, attr);
2968+
ret = iio_attr_write_longlong(attribute, lval);
2969+
}
2970+
} else if (chn) {
2971+
attribute = iio_channel_find_attr(chn, attr);
2972+
ret = iio_attr_write(attribute, value);
2973+
} else if (debug) {
2974+
attribute = iio_device_find_debug_attr(dev, attr);
2975+
ret = iio_attr_write(attribute, value);
2976+
} else {
2977+
attribute = iio_device_find_attr(dev, attr);
2978+
ret = iio_attr_write(attribute,value);
29772979
}
29782980
if (ret < 0) {
29792981
fprintf(stderr, "Unable to write '%s' to %s:%s\n", value,

0 commit comments

Comments
 (0)