Lines Matching +full:num +full:- +full:channels
1 // SPDX-License-Identifier: GPL-2.0-only
12 * generic_buffer -n <device_name> -t <trigger_name>
36 * enum autochan - state for the automatic channel enabling mechanism
45 * size_from_channelarray() - calculate the storage size of a scan
46 * @channels: the channel info array
47 * @num_channels: number of channels
49 * Has the side effect of filling the channels[i].location values used
52 static unsigned int size_from_channelarray(struct iio_channel_info *channels, int num_channels) in size_from_channelarray() argument
59 if (channels[i].bytes > max) in size_from_channelarray()
60 max = channels[i].bytes; in size_from_channelarray()
61 if (bytes % channels[i].bytes == 0) in size_from_channelarray()
62 channels[i].location = bytes; in size_from_channelarray()
64 channels[i].location = bytes - bytes % channels[i].bytes in size_from_channelarray()
65 + channels[i].bytes; in size_from_channelarray()
67 bytes = channels[i].location + channels[i].bytes; in size_from_channelarray()
77 bytes += max - misalignment; in size_from_channelarray()
88 input >>= info->shift; in print1byte()
89 input &= info->mask; in print1byte()
90 if (info->is_signed) { in print1byte()
91 int8_t val = (int8_t)(input << (8 - info->bits_used)) >> in print1byte()
92 (8 - info->bits_used); in print1byte()
93 printf("%05f ", ((float)val + info->offset) * info->scale); in print1byte()
95 printf("%05f ", ((float)input + info->offset) * info->scale); in print1byte()
102 if (info->be) in print2byte()
111 input >>= info->shift; in print2byte()
112 input &= info->mask; in print2byte()
113 if (info->is_signed) { in print2byte()
114 int16_t val = (int16_t)(input << (16 - info->bits_used)) >> in print2byte()
115 (16 - info->bits_used); in print2byte()
116 printf("%05f ", ((float)val + info->offset) * info->scale); in print2byte()
118 printf("%05f ", ((float)input + info->offset) * info->scale); in print2byte()
125 if (info->be) in print4byte()
134 input >>= info->shift; in print4byte()
135 input &= info->mask; in print4byte()
136 if (info->is_signed) { in print4byte()
137 int32_t val = (int32_t)(input << (32 - info->bits_used)) >> in print4byte()
138 (32 - info->bits_used); in print4byte()
139 printf("%05f ", ((float)val + info->offset) * info->scale); in print4byte()
141 printf("%05f ", ((float)input + info->offset) * info->scale); in print4byte()
148 if (info->be) in print8byte()
157 input >>= info->shift; in print8byte()
158 input &= info->mask; in print8byte()
159 if (info->is_signed) { in print8byte()
160 int64_t val = (int64_t)(input << (64 - info->bits_used)) >> in print8byte()
161 (64 - info->bits_used); in print8byte()
163 if (info->scale == 1.0f && info->offset == 0.0f) in print8byte()
167 ((float)val + info->offset) * info->scale); in print8byte()
169 printf("%05f ", ((float)input + info->offset) * info->scale); in print8byte()
174 * process_scan() - print out the values in SI units
176 * @channels: information about the channels.
179 * @num_channels: number of channels
181 static void process_scan(char *data, struct iio_channel_info *channels, in process_scan() argument
187 switch (channels[k].bytes) { in process_scan()
190 print1byte(*(uint8_t *)(data + channels[k].location), in process_scan()
191 &channels[k]); in process_scan()
194 print2byte(*(uint16_t *)(data + channels[k].location), in process_scan()
195 &channels[k]); in process_scan()
198 print4byte(*(uint32_t *)(data + channels[k].location), in process_scan()
199 &channels[k]); in process_scan()
202 print8byte(*(uint64_t *)(data + channels[k].location), in process_scan()
203 &channels[k]); in process_scan()
220 scanelemdir[sizeof(scanelemdir)-1] = '\0'; in enable_disable_all_channels()
224 fprintf(stderr, "Enabling/disabling channels: can't open %s\n", in enable_disable_all_channels()
226 return -EIO; in enable_disable_all_channels()
229 ret = -ENOENT; in enable_disable_all_channels()
231 if (iioutils_check_suffix(ent->d_name, "_en")) { in enable_disable_all_channels()
234 ent->d_name); in enable_disable_all_channels()
235 ret = write_sysfs_int(ent->d_name, scanelemdir, in enable_disable_all_channels()
239 ent->d_name); in enable_disable_all_channels()
243 if (closedir(dp) == -1) { in enable_disable_all_channels()
244 perror("Enabling/disabling channels: " in enable_disable_all_channels()
246 return -errno; in enable_disable_all_channels()
255 " -a Auto-activate all available channels\n" in print_usage()
256 " -A Force-activate ALL channels\n" in print_usage()
257 " -c <n> Do n conversions, or loop forever if n < 0\n" in print_usage()
258 " -e Disable wait for event (new data)\n" in print_usage()
259 " -g Use trigger-less mode\n" in print_usage()
260 " -l <n> Set buffer length to n samples\n" in print_usage()
261 " --device-name -n <name>\n" in print_usage()
262 " --device-num -N <num>\n" in print_usage()
264 " --trigger-name -t <name>\n" in print_usage()
265 " --trigger-num -T <num>\n" in print_usage()
267 " -w <n> Set delay between reads in us (event-less mode)\n"); in print_usage()
281 /* Disconnect the trigger - just write a dummy name. */ in cleanup()
286 strerror(-ret)); in cleanup()
295 strerror(-ret)); in cleanup()
298 /* Disable channels if auto-enabled */ in cleanup()
302 fprintf(stderr, "Failed to disable all channels\n"); in cleanup()
311 exit(-signum); in sig_handler()
324 exit(-1); in register_cleanup()
330 { "device-name", 1, 0, 'n' },
331 { "device-num", 1, 0, 'N' },
332 { "trigger-name", 1, 0, 't' },
333 { "trigger-num", 1, 0, 'T' },
347 int fp = -1; in main()
354 int dev_num = -1, trig_num = -1; in main()
362 struct iio_channel_info *channels = NULL; in main() local
367 NULL)) != -1) { in main()
380 ret = -errno; in main()
395 ret = -errno; in main()
407 ret = -errno; in main()
418 return -errno; in main()
424 ret = -errno; in main()
430 ret = -1; in main()
439 ret = -1; in main()
442 fprintf(stderr, "Only one of --device-num or --device-name needs to be set\n"); in main()
444 ret = -1; in main()
458 return -ENOMEM; in main()
463 ret = -ENOMEM; in main()
474 printf("trigger-less mode selected\n"); in main()
479 return -ENOMEM; in main()
497 "%s-dev%d", device_name, dev_num); in main()
499 ret = -ENOMEM; in main()
504 /* Look for this "-devN" trigger */ in main()
507 /* OK try the simpler "-trigger" suffix instead */ in main()
510 "%s-trigger", device_name); in main()
512 ret = -ENOMEM; in main()
529 * Parse the files in scan_elements to identify what channels are in main()
532 ret = build_channel_array(dev_dir_name, &channels, &num_channels); in main()
540 fprintf(stderr, "Auto-channels selected but some channels " in main()
542 fprintf(stderr, "Proceeding without activating any channels\n"); in main()
547 fprintf(stderr, "Enabling all channels\n"); in main()
551 fprintf(stderr, "Failed to enable all channels\n"); in main()
555 /* This flags that we need to disable the channels again */ in main()
558 ret = build_channel_array(dev_dir_name, &channels, in main()
567 fprintf(stderr, "Still no channels after " in main()
568 "auto-enabling, giving up\n"); in main()
575 "No channels are enabled, we have nothing to scan.\n"); in main()
576 fprintf(stderr, "Enable channels manually in " in main()
578 "/*_en or pass -a to autoenable channels and " in main()
580 ret = -ENOENT; in main()
592 ret = -ENOMEM; in main()
621 "Failed to enable buffer: %s\n", strerror(-ret)); in main()
625 scan_size = size_from_channelarray(channels, num_channels); in main()
630 ret = -EFAULT; in main()
637 ret = -ENOMEM; in main()
643 ret = -ENOMEM; in main()
649 if (fp == -1) { /* TODO: If it isn't there make the node */ in main()
650 ret = -errno; in main()
662 ret = poll(&pfd, 1, -1); in main()
664 ret = -errno; in main()
686 process_scan(data + scan_size * i, channels, in main()
693 if (fp >= 0 && close(fp) == -1) in main()
698 for (i = num_channels - 1; i >= 0; i--) { in main()
699 free(channels[i].name); in main()
700 free(channels[i].generic_name); in main()
702 free(channels); in main()