@@ -163,17 +163,25 @@ bool dma_valid_selection(const char *device, unsigned mask, unsigned channel_cou
163
163
return ret ;
164
164
}
165
165
166
- unsigned global_enabled_channels_mask (struct iio_device * dev , struct iio_channels_mask * ch_mask )
166
+ unsigned global_enabled_channels_mask (struct iio_device * dev )
167
167
{
168
168
unsigned mask = 0 ;
169
169
int scan_i = 0 ;
170
170
unsigned int i = 0 ;
171
+ struct extra_dev_info * dev_info ;
172
+
173
+ dev_info = iio_device_get_data (dev );
174
+ if (!dev_info || !dev_info -> channels_mask ) {
175
+ fprintf (stderr , "error! Cannot retrieve channels mask of device: %s\n" ,
176
+ iio_device_get_id (dev ));
177
+ return 0 ;
178
+ }
171
179
172
180
for (; i < iio_device_get_channels_count (dev ); i ++ ) {
173
181
struct iio_channel * chn = iio_device_get_channel (dev , i );
174
182
175
183
if (iio_channel_is_scan_element (chn )) {
176
- if (iio_channel_is_enabled (chn , ch_mask ))
184
+ if (iio_channel_is_enabled (chn , dev_info -> channels_mask ))
177
185
mask |= 1 << scan_i ;
178
186
scan_i ++ ;
179
187
}
@@ -255,25 +263,25 @@ static void destroy_all_plots(void)
255
263
g_list_foreach (plot_list , gfunc_destroy_plot , NULL );
256
264
}
257
265
258
- static void disable_all_channels (struct iio_device * dev , struct iio_channels_mask * ch_mask )
266
+ static void disable_all_channels (struct iio_device * dev )
259
267
{
260
268
unsigned int i , nb_channels = iio_device_get_channels_count (dev );
269
+ struct extra_dev_info * info = iio_device_get_data (dev );
270
+
261
271
for (i = 0 ; i < nb_channels ; i ++ )
262
- iio_channel_disable (iio_device_get_channel (dev , i ), ch_mask );
272
+ iio_channel_disable (iio_device_get_channel (dev , i ), info -> channels_mask );
263
273
}
264
274
265
275
static void close_active_buffers (void )
266
276
{
267
277
unsigned int i ;
268
- const struct iio_channels_mask * mask = NULL ;
269
278
270
279
for (i = 0 ; i < num_devices ; i ++ ) {
271
280
struct iio_device * dev = iio_context_get_device (ctx , i );
272
281
struct extra_dev_info * info = iio_device_get_data (dev );
273
282
274
283
if (info -> buffer ) {
275
- mask = iio_buffer_get_channels_mask (info -> buffer );
276
- disable_all_channels (dev ,(struct iio_channels_mask * ) mask );
284
+ disable_all_channels (dev );
277
285
iio_buffer_destroy (info -> buffer );
278
286
info -> buffer = NULL ;
279
287
}
@@ -557,28 +565,26 @@ gdouble plugin_get_plot_fft_avg(OscPlot *plot, const char *device)
557
565
558
566
int plugin_data_capture_size (const char * device )
559
567
{
560
- struct extra_dev_info * info ;
561
568
struct iio_device * dev ;
562
- const struct iio_channels_mask * mask ;
569
+ struct extra_dev_info * info ;
563
570
564
571
if (!device )
565
572
return 0 ;
566
573
567
574
dev = iio_context_find_device (ctx , device );
568
575
if (!dev )
569
576
return 0 ;
570
-
571
577
info = iio_device_get_data (dev );
572
- mask = iio_buffer_get_channels_mask ( info -> buffer );
573
- return info -> sample_count * iio_device_get_sample_size (dev , mask );
578
+
579
+ return info -> sample_count * iio_device_get_sample_size (dev , info -> channels_mask );
574
580
}
575
581
576
582
int plugin_data_capture_num_active_channels (const char * device )
577
583
{
578
584
int nb_active = 0 ;
579
585
unsigned int i , nb_channels ;
580
586
struct iio_device * dev ;
581
- const struct iio_channels_mask * mask ;
587
+ struct extra_dev_info * info ;
582
588
583
589
if (!device )
584
590
return 0 ;
@@ -587,11 +593,11 @@ int plugin_data_capture_num_active_channels(const char *device)
587
593
if (!dev )
588
594
return 0 ;
589
595
596
+ info = iio_device_get_data (dev );
590
597
nb_channels = iio_device_get_channels_count (dev );
591
- mask = iio_create_channels_mask (nb_channels );
592
598
for (i = 0 ; i < nb_channels ; i ++ ) {
593
599
struct iio_channel * chn = iio_device_get_channel (dev , i );
594
- if (iio_channel_is_enabled (chn , mask ))
600
+ if (iio_channel_is_enabled (chn , info -> channels_mask ))
595
601
nb_active ++ ;
596
602
}
597
603
@@ -601,7 +607,7 @@ int plugin_data_capture_num_active_channels(const char *device)
601
607
int plugin_data_capture_bytes_per_sample (const char * device )
602
608
{
603
609
struct iio_device * dev ;
604
- const struct iio_channels_mask * mask ;
610
+ struct extra_dev_info * dev_info ;
605
611
int nb_channels ;
606
612
607
613
if (!device )
@@ -612,9 +618,9 @@ int plugin_data_capture_bytes_per_sample(const char *device)
612
618
if (!dev )
613
619
return 0 ;
614
620
nb_channels = iio_device_get_channels_count (dev );
615
- mask = iio_create_channels_mask ( nb_channels );
621
+ dev_info = iio_device_get_data ( dev );
616
622
617
- return iio_device_get_sample_size (dev , mask );
623
+ return iio_device_get_sample_size (dev , dev_info -> channels_mask );
618
624
}
619
625
620
626
int plugin_data_capture_of_plot (OscPlot * plot , const char * device , gfloat * * * cooked_data ,
@@ -1240,11 +1246,10 @@ static off_t get_trigger_offset(const struct iio_channel *chn,
1240
1246
struct extra_info * info = iio_channel_get_data (chn );
1241
1247
size_t i ;
1242
1248
const struct iio_device * dev = iio_channel_get_device (chn );
1249
+ struct extra_dev_info * dev_info = iio_device_get_data (dev );
1243
1250
int nb_channels = iio_device_get_channels_count (dev );
1244
- const struct iio_channels_mask * mask = iio_create_channels_mask (nb_channels );
1245
1251
1246
-
1247
- if (iio_channel_is_enabled (chn , mask )) {
1252
+ if (iio_channel_is_enabled (chn , dev_info -> channels_mask )) {
1248
1253
for (i = info -> offset / 2 ; i >= 1 ; i -- ) {
1249
1254
if (!falling_edge && info -> data_ref [i - 1 ] < trigger_value &&
1250
1255
info -> data_ref [i ] >= trigger_value )
@@ -1288,14 +1293,7 @@ static gboolean capture_process(void *data)
1288
1293
struct iio_device * dev = iio_context_get_device (ctx , i );
1289
1294
struct extra_dev_info * dev_info = iio_device_get_data (dev );
1290
1295
unsigned int nb_channels = iio_device_get_channels_count (dev );
1291
- const struct iio_channels_mask * mask = NULL ;
1292
- if (dev_info -> buffer == NULL )
1293
- mask = iio_create_channels_mask (nb_channels );
1294
- else
1295
- mask = iio_buffer_get_channels_mask (dev_info -> buffer );
1296
-
1297
-
1298
- unsigned int i , sample_size = iio_device_get_sample_size (dev , mask );
1296
+ unsigned int i , sample_size = iio_device_get_sample_size (dev , dev_info -> channels_mask );
1299
1297
ssize_t sample_count = dev_info -> sample_count ;
1300
1298
struct iio_channel * chn ;
1301
1299
off_t offset = 0 ;
@@ -1310,7 +1308,7 @@ static gboolean capture_process(void *data)
1310
1308
1311
1309
if (dev_info -> buffer == NULL || device_is_oneshot (dev )) {
1312
1310
dev_info -> buffer_size = sample_count ;
1313
- dev_info -> buffer = iio_device_create_buffer (dev , 0 , mask );
1311
+ dev_info -> buffer = iio_device_create_buffer (dev , 0 , dev_info -> channels_mask );
1314
1312
if (!dev_info -> buffer ) {
1315
1313
fprintf (stderr , "Error: Unable to create buffer: %s\n" , strerror (errno ));
1316
1314
goto capture_stop_check ;
@@ -1342,7 +1340,7 @@ static gboolean capture_process(void *data)
1342
1340
ret /= sample_size ;
1343
1341
if (ret >= sample_count ) {
1344
1342
1345
- iio_block_foreach_sample (block , mask , demux_sample , NULL );
1343
+ iio_block_foreach_sample (block , dev_info -> channels_mask , demux_sample , NULL );
1346
1344
if (ret >= sample_count * 2 ) {
1347
1345
printf ("Decreasing block size\n" );
1348
1346
iio_stream_destroy (dev_info -> stream );
@@ -1366,7 +1364,7 @@ static gboolean capture_process(void *data)
1366
1364
1367
1365
if (dev_info -> channel_trigger_enabled ) {
1368
1366
chn = iio_device_get_channel (dev , dev_info -> channel_trigger );
1369
- if (!iio_channel_is_enabled (chn , mask ))
1367
+ if (!iio_channel_is_enabled (chn , dev_info -> channels_mask ))
1370
1368
dev_info -> channel_trigger_enabled = false;
1371
1369
}
1372
1370
@@ -1385,7 +1383,7 @@ static gboolean capture_process(void *data)
1385
1383
offset -= quatter_of_capture_interval * sizeof (gfloat );
1386
1384
for (i = 0 ; i < nb_channels ; i ++ ) {
1387
1385
chn = iio_device_get_channel (dev , i );
1388
- if (iio_channel_is_enabled (chn , mask ))
1386
+ if (iio_channel_is_enabled (chn , dev_info -> channels_mask ))
1389
1387
apply_trigger_offset (chn , offset );
1390
1388
}
1391
1389
}
@@ -1500,7 +1498,6 @@ static int capture_setup(void)
1500
1498
struct extra_dev_info * dev_info = iio_device_get_data (dev );
1501
1499
unsigned int nb_channels = iio_device_get_channels_count (dev );
1502
1500
unsigned int sample_size , sample_count = max_sample_count_from_plots (dev_info );
1503
- const struct iio_channels_mask * mask = iio_create_channels_mask (nb_channels );
1504
1501
1505
1502
1506
1503
/* We capture a double amount o data. Then we look for a trigger
@@ -1514,13 +1511,13 @@ static int capture_setup(void)
1514
1511
struct iio_channel * ch = iio_device_get_channel (dev , j );
1515
1512
struct extra_info * info = iio_channel_get_data (ch );
1516
1513
if (info -> shadow_of_enabled > 0 )
1517
- iio_channel_enable (ch , ( struct iio_channels_mask * ) mask );
1514
+ iio_channel_enable (ch , dev_info -> channels_mask );
1518
1515
else
1519
- iio_channel_disable (ch , ( struct iio_channels_mask * ) mask );
1516
+ iio_channel_disable (ch , dev_info -> channels_mask );
1520
1517
}
1521
1518
1522
1519
1523
- sample_size = iio_device_get_sample_size (dev , mask );
1520
+ sample_size = iio_device_get_sample_size (dev , dev_info -> channels_mask );
1524
1521
if (sample_size == 0 || sample_count == 0 )
1525
1522
continue ;
1526
1523
@@ -1538,7 +1535,7 @@ static int capture_setup(void)
1538
1535
dev_info -> buffer = NULL ;
1539
1536
dev_info -> sample_count = sample_count ;
1540
1537
dev_info -> buffer_size = sample_count ;
1541
- dev_info -> buffer = iio_device_create_buffer (dev , 0 , mask );
1538
+ dev_info -> buffer = iio_device_create_buffer (dev , 0 , dev_info -> channels_mask );
1542
1539
dev_info -> stream = iio_buffer_create_stream (dev_info -> buffer , 4 , dev_info -> sample_count );
1543
1540
if (!dev_info -> buffer ) {
1544
1541
fprintf (stderr , "Error: Unable to create buffer: %s\n" , strerror (errno ));
0 commit comments