Skip to content

Commit 11d9745

Browse files
committed
plugins/fmcomms2_adv: Reenable and update to libiio 1.x API
Signed-off-by: Dan <[email protected]>
1 parent bf5e9f3 commit 11d9745

File tree

4 files changed

+81
-32
lines changed

4 files changed

+81
-32
lines changed

iio_utils.c

+43
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,16 @@ int dev_attr_read_longlong(struct iio_device *dev, const char *attr_name, long l
196196
return -ENOENT;
197197
}
198198

199+
int dev_debug_attr_read_longlong(struct iio_device *dev, const char *attr_name, long long *value)
200+
{
201+
const struct iio_attr *attr = iio_device_find_debug_attr(dev, attr_name);
202+
203+
if (attr)
204+
return iio_attr_read_longlong(attr, value);
205+
else
206+
return -ENOENT;
207+
}
208+
199209
int dev_attr_write_double(struct iio_device *dev, const char *attr_name, double value)
200210
{
201211
const struct iio_attr *attr = iio_device_find_attr(dev, attr_name);
@@ -216,6 +226,16 @@ int dev_attr_write_longlong(struct iio_device *dev, const char *attr_name, long
216226
return -ENOENT;
217227
}
218228

229+
int dev_debug_attr_write_string(struct iio_device *dev, const char *attr_name, const char *value)
230+
{
231+
const struct iio_attr *attr = iio_device_find_debug_attr(dev, attr_name);
232+
233+
if (attr)
234+
return iio_attr_write_string(attr, value);
235+
else
236+
return -ENOENT;
237+
}
238+
219239
int dev_debug_attr_write_longlong(struct iio_device *dev, const char *attr_name, long long value)
220240
{
221241
const struct iio_attr *attr = iio_device_find_debug_attr(dev, attr_name);
@@ -327,6 +347,29 @@ void dev_attr_read_all(struct iio_device *dev,
327347
}
328348
}
329349

350+
int dev_debug_attr_read_all(struct iio_device *dev,
351+
int (*cb)(struct iio_device *dev, const char *attr, const char *value, size_t len, void *d),
352+
void *data)
353+
{
354+
unsigned int i, attr_cnt = iio_device_get_debug_attrs_count(dev);
355+
const struct iio_attr *attr;
356+
char local_value[8192];
357+
int ret;
358+
359+
for (i = 0; i < attr_cnt; ++i) {
360+
attr = iio_device_get_debug_attr(dev, i);
361+
ret = iio_attr_read_raw(attr, local_value, ARRAY_SIZE(local_value));
362+
if (ret < 0) {
363+
fprintf(stderr, "Failed to read attribute: %s\n", iio_attr_get_name(attr));
364+
return ret;
365+
} else {
366+
cb(dev, iio_attr_get_name(attr), local_value, strlen(local_value), data);
367+
}
368+
}
369+
370+
return 0;
371+
}
372+
330373
void chn_attr_read_all(struct iio_channel *chn,
331374
int (*cb)(struct iio_channel *chn, const char *attr, const char *value, size_t len, void *d),
332375
void *data)

iio_utils.h

+5
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,12 @@ bool iio_attr_not_found(struct iio_device *dev, struct iio_channel *chn, const c
3030
inline int dev_attr_read_raw(struct iio_device *dev, const char *attr_name, char *dst, size_t len);
3131
inline int dev_attr_read_double(struct iio_device *dev, const char *attr_name, double *value);
3232
inline int dev_attr_read_longlong(struct iio_device *dev, const char *attr_name, long long *value);
33+
inline int dev_debug_attr_read_longlong(struct iio_device *dev, const char *attr_name, long long *value);
3334

3435
/* Helpers to write to iio attributes of devices */
3536
inline int dev_attr_write_double(struct iio_device *dev, const char *attr_name, double value);
3637
inline int dev_attr_write_longlong(struct iio_device *dev, const char *attr_name, long long value);
38+
inline int dev_debug_attr_write_string(struct iio_device *dev, const char *attr_name, const char *value);
3739
inline int dev_debug_attr_write_longlong(struct iio_device *dev, const char *attr_name, long long value);
3840

3941
/* Helpers to read from iio attributes of channels */
@@ -52,6 +54,9 @@ inline int chn_attr_write_longlong(struct iio_channel *chn, const char *attr_nam
5254
inline void dev_attr_read_all(struct iio_device *dev,
5355
int (*cb)(struct iio_device *dev, const char *attr, const char *value, size_t len, void *d),
5456
void *data);
57+
inline int dev_debug_attr_read_all(struct iio_device *dev,
58+
int (*cb)(struct iio_device *dev, const char *attr, const char *value, size_t len, void *d),
59+
void *data);
5560
inline void chn_attr_read_all(struct iio_channel *chn,
5661
int (*cb)(struct iio_channel *chn, const char *attr, const char *value, size_t len, void *d),
5762
void *data);

plugins/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
set(PLUGINS
1919
generic_dac
2020
fmcomms2
21-
#fmcomms2_adv
21+
fmcomms2_adv
2222
#fmcomms5
2323
#fmcomms6
2424
#fmcomms11

plugins/fmcomms2_adv.c

+32-31
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,15 @@
2424
#include <unistd.h>
2525

2626
#include <ad9361.h>
27-
#include <iio.h>
27+
#include <iio/iio.h>
2828

2929
#include "../libini2.h"
3030
#include "../osc.h"
3131
#include "../osc_plugin.h"
3232
#include "../config.h"
3333
#include "../iio_widget.h"
3434
#include "../datatypes.h"
35+
#include "../iio_utils.h"
3536

3637
#define PHY_DEVICE "ad9361-phy"
3738
#define PHY_SLAVE_DEVICE "ad9361-phy-B"
@@ -452,27 +453,27 @@ static void signal_handler_cb (GtkWidget *widget, gpointer data)
452453
if (ret != 2)
453454
return;
454455

455-
iio_device_debug_attr_read_longlong(dev, str, &mask);
456+
dev_debug_attr_read_longlong(dev, str, &mask);
456457

457458
if (val) {
458459
mask |= (1 << bit);
459460
} else {
460461
mask &= ~(1 << bit);
461462
}
462463

463-
iio_device_debug_attr_write_longlong(dev, str, mask);
464+
dev_debug_attr_write_longlong(dev, str, mask);
464465

465466
if (dev_slave)
466-
iio_device_debug_attr_write_longlong(dev_slave, str, mask);
467+
dev_debug_attr_write_longlong(dev_slave, str, mask);
467468
return;
468469
default:
469470
return;
470471
}
471472

472-
iio_device_debug_attr_write_longlong(dev, item->name, val);
473+
dev_debug_attr_write_longlong(dev, item->name, val);
473474

474475
if (dev_slave)
475-
iio_device_debug_attr_write_longlong(dev_slave, item->name, val);
476+
dev_debug_attr_write_longlong(dev_slave, item->name, val);
476477

477478
if (!strcmp(item->name, "initialize")) {
478479
reload_settings();
@@ -549,10 +550,10 @@ static void trx_phase_rotation(struct iio_device *dev, gdouble val)
549550
}
550551

551552
if (out1 && out0) {
552-
iio_channel_attr_write_double(out0, "calibscale", (double) vcos);
553-
iio_channel_attr_write_double(out0, "calibphase", (double) (-1.0 * vsin));
554-
iio_channel_attr_write_double(out1, "calibscale", (double) vcos);
555-
iio_channel_attr_write_double(out1, "calibphase", (double) vsin);
553+
chn_attr_write_double(out0, "calibscale", (double) vcos);
554+
chn_attr_write_double(out0, "calibphase", (double) (-1.0 * vsin));
555+
chn_attr_write_double(out1, "calibscale", (double) vcos);
556+
chn_attr_write_double(out1, "calibphase", (double) vsin);
556557
}
557558
}
558559
}
@@ -579,10 +580,10 @@ static void dds_tx_phase_rotation(struct iio_device *dev, gdouble val)
579580
case 1:
580581
case 4:
581582
case 5:
582-
iio_channel_attr_write_longlong(dds_out[d][j], "phase", i);
583+
chn_attr_write_longlong(dds_out[d][j], "phase", i);
583584
break;
584585
default:
585-
iio_channel_attr_write_longlong(dds_out[d][j], "phase", q);
586+
chn_attr_write_longlong(dds_out[d][j], "phase", q);
586587
}
587588
}
588589

@@ -594,8 +595,8 @@ static int default_dds(long long freq, double scale)
594595

595596
for (i = 0; i < 2; i++) {
596597
for (j = 0; j < 8; j++) {
597-
ret |= iio_channel_attr_write_longlong(dds_out[i][j], "frequency", freq);
598-
ret |= iio_channel_attr_write_double(dds_out[i][j], "scale", scale);
598+
ret |= chn_attr_write_longlong(dds_out[i][j], "frequency", freq);
599+
ret |= chn_attr_write_double(dds_out[i][j], "scale", scale);
599600
}
600601

601602
dds_tx_phase_rotation(i ? dev_dds_slave : dev_dds_master, 0.0);
@@ -707,25 +708,25 @@ static void __cal_switch_ports_enable_cb (unsigned val)
707708

708709

709710
#if 0
710-
iio_device_debug_attr_write_bool(dev, "loopback", lp_master);
711-
iio_device_debug_attr_write_bool(dev_slave, "loopback", lp_slave);
711+
dev_debug_attr_write_string_bool(dev, "loopback", lp_master);
712+
dev_debug_attr_write_string_bool(dev_slave, "loopback", lp_slave);
712713
#else
713714
near_end_loopback_ctrl(0, lp_slave); /* HPC */
714715
near_end_loopback_ctrl(1, lp_slave); /* HPC */
715716

716717
near_end_loopback_ctrl(4, lp_master); /* LPC */
717718
near_end_loopback_ctrl(5, lp_master); /* LPC */
718719
#endif
719-
iio_device_debug_attr_write_longlong(dev, "calibration_switch_control", sw);
720-
iio_channel_attr_write(iio_device_find_channel(dev, "voltage0", false),
720+
dev_debug_attr_write_longlong(dev, "calibration_switch_control", sw);
721+
chn_attr_write_string(iio_device_find_channel(dev, "voltage0", false),
721722
"rf_port_select", rx_port);
722-
iio_channel_attr_write(iio_device_find_channel(dev, "voltage0", true),
723+
chn_attr_write_string(iio_device_find_channel(dev, "voltage0", true),
723724
"rf_port_select", tx_port);
724725

725726
if (dev_slave) {
726-
iio_channel_attr_write(iio_device_find_channel(dev_slave, "voltage0", false),
727+
chn_attr_write_string(iio_device_find_channel(dev_slave, "voltage0", false),
727728
"rf_port_select", rx_port);
728-
iio_channel_attr_write(iio_device_find_channel(dev_slave, "voltage0", true),
729+
chn_attr_write_string(iio_device_find_channel(dev_slave, "voltage0", true),
729730
"rf_port_select", tx_port);
730731
}
731732

@@ -870,8 +871,8 @@ static void calibrate (gpointer button)
870871
goto calibrate_fail;
871872
}
872873

873-
iio_channel_attr_read_longlong(dds_out[0][0], "frequency", &cal_tone);
874-
iio_channel_attr_read_longlong(dds_out[0][0], "sampling_frequency", &cal_freq);
874+
chn_attr_read_longlong(dds_out[0][0], "frequency", &cal_tone);
875+
chn_attr_read_longlong(dds_out[0][0], "sampling_frequency", &cal_freq);
875876

876877
samples = get_cal_samples(cal_tone, cal_freq);
877878

@@ -883,8 +884,8 @@ static void calibrate (gpointer button)
883884
gdk_threads_leave();
884885

885886
/* Turn off quadrature tracking while the sync is going on */
886-
iio_channel_attr_write(in0, "quadrature_tracking_en", "0");
887-
iio_channel_attr_write(in0_slave, "quadrature_tracking_en", "0");
887+
chn_attr_write_string(in0, "quadrature_tracking_en", "0");
888+
chn_attr_write_string(in0_slave, "quadrature_tracking_en", "0");
888889

889890
/* reset any Tx rotation to zero */
890891
trx_phase_rotation(cf_ad9361_lpc, 0.0);
@@ -953,8 +954,8 @@ static void calibrate (gpointer button)
953954
__cal_switch_ports_enable_cb(0);
954955

955956
if (in0 && in0_slave) {
956-
iio_channel_attr_write(in0, "quadrature_tracking_en", "1");
957-
iio_channel_attr_write(in0_slave, "quadrature_tracking_en", "1");
957+
chn_attr_write_string(in0, "quadrature_tracking_en", "1");
958+
chn_attr_write_string(in0_slave, "quadrature_tracking_en", "1");
958959
}
959960

960961
gdk_threads_enter();
@@ -1089,10 +1090,10 @@ static void bist_tone_cb (GtkWidget *widget, gpointer data)
10891090
sprintf(temp, "%u %u %u %u", mode, freq, level * 6,
10901091
(c2q << 3) | (c2i << 2) | (c1q << 1) | c1i);
10911092

1092-
iio_device_debug_attr_write(dev, "bist_tone", temp);
1093+
dev_debug_attr_write_string(dev, "bist_tone", temp);
10931094

10941095
if (dev_slave)
1095-
iio_device_debug_attr_write(dev_slave, "bist_tone", temp);
1096+
dev_debug_attr_write_string(dev_slave, "bist_tone", temp);
10961097

10971098
}
10981099

@@ -1188,12 +1189,12 @@ static int __update_widget(struct iio_device *dev, const char *attr,
11881189

11891190
static int connect_widgets(GtkBuilder *builder)
11901191
{
1191-
return iio_device_debug_attr_read_all(dev, __connect_widget, builder);
1192+
return dev_debug_attr_read_all(dev, __connect_widget, builder);
11921193
}
11931194

11941195
static int update_widgets(GtkBuilder *builder)
11951196
{
1196-
return iio_device_debug_attr_read_all(dev, __update_widget, builder);
1197+
return dev_debug_attr_read_all(dev, __update_widget, builder);
11971198
}
11981199

11991200
static void change_page_cb (GtkNotebook *notebook, GtkNotebookTab *page,

0 commit comments

Comments
 (0)