diff options
Diffstat (limited to 'tests/iio_info.c')
-rw-r--r-- | tests/iio_info.c | 452 |
1 files changed, 0 insertions, 452 deletions
diff --git a/tests/iio_info.c b/tests/iio_info.c deleted file mode 100644 index a7ef57f..0000000 --- a/tests/iio_info.c +++ /dev/null @@ -1,452 +0,0 @@ -/* - * libiio - Library for interfacing industrial I/O (IIO) devices - * - * Copyright (C) 2014 Analog Devices, Inc. - * Author: Paul Cercueil <paul.cercueil@analog.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * */ - -#include <errno.h> -#include <getopt.h> -#include <iio.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -#define MY_NAME "iio_info" - -#ifdef _WIN32 -#define snprintf sprintf_s -#endif - -enum backend { - LOCAL, - XML, - NETWORK, - AUTO, -}; - -static const struct option options[] = { - {"help", no_argument, 0, 'h'}, - {"xml", required_argument, 0, 'x'}, - {"network", required_argument, 0, 'n'}, - {"uri", required_argument, 0, 'u'}, - {"scan", no_argument, 0, 's'}, - {"auto", no_argument, 0, 'a'}, - {0, 0, 0, 0}, -}; - -static const char *options_descriptions[] = { - "Show this help and quit.", - "Use the XML backend with the provided XML file.", - "Use the network backend with the provided hostname.", - "Use the context at the provided URI.", - "Scan for available backends.", - "Scan for available contexts and if only one is available use it.", -}; - -static void usage(void) -{ - unsigned int i; - - printf("Usage:\n\t" MY_NAME " [-x <xml_file>]\n\t" - MY_NAME " [-n <hostname>]\n\t" - MY_NAME " [-u <uri>]\n\nOptions:\n"); - for (i = 0; options[i].name; i++) - printf("\t-%c, --%s\n\t\t\t%s\n", - options[i].val, options[i].name, - options_descriptions[i]); -} - -static void scan(void) -{ - struct iio_scan_context *ctx; - struct iio_context_info **info; - unsigned int i; - ssize_t ret; - - ctx = iio_create_scan_context(NULL, 0); - if (!ctx) { - fprintf(stderr, "Unable to create scan context\n"); - return; - } - - ret = iio_scan_context_get_info_list(ctx, &info); - if (ret < 0) { - fprintf(stderr, "Unable to scan: %li\n", (long) ret); - goto err_free_ctx; - } - - if (ret == 0) { - printf("No contexts found.\n"); - goto err_free_info_list; - } - - printf("Available contexts:\n"); - - for (i = 0; i < (size_t) ret; i++) { - printf("\t%d: %s [%s]\n", i, - iio_context_info_get_description(info[i]), - iio_context_info_get_uri(info[i])); - } - -err_free_info_list: - iio_context_info_list_free(info); -err_free_ctx: - iio_scan_context_destroy(ctx); -} - -static struct iio_context * autodetect_context(void) -{ - struct iio_scan_context *scan_ctx; - struct iio_context_info **info; - struct iio_context *ctx = NULL; - unsigned int i; - ssize_t ret; - - scan_ctx = iio_create_scan_context(NULL, 0); - if (!scan_ctx) { - fprintf(stderr, "Unable to create scan context\n"); - return NULL; - } - - ret = iio_scan_context_get_info_list(scan_ctx, &info); - if (ret < 0) { - char err_str[1024]; - iio_strerror(-ret, err_str, sizeof(err_str)); - fprintf(stderr, "Scanning for IIO contexts failed: %s\n", err_str); - goto err_free_ctx; - } - - if (ret == 0) { - printf("No IIO context found.\n"); - goto err_free_info_list; - } - - if (ret == 1) { - printf("Using auto-detected IIO context at URI \"%s\"\n", - iio_context_info_get_uri(info[0])); - ctx = iio_create_context_from_uri(iio_context_info_get_uri(info[0])); - } else { - fprintf(stderr, "Multiple contexts found. Please select one using --uri:\n"); - - for (i = 0; i < (size_t) ret; i++) { - fprintf(stderr, "\t%d: %s [%s]\n", i, - iio_context_info_get_description(info[i]), - iio_context_info_get_uri(info[i])); - } - } - -err_free_info_list: - iio_context_info_list_free(info); -err_free_ctx: - iio_scan_context_destroy(scan_ctx); - - return ctx; -} - -static int dev_is_buffer_capable(const struct iio_device *dev) -{ - unsigned int i; - - for (i = 0; i < iio_device_get_channels_count(dev); i++) { - struct iio_channel *chn = iio_device_get_channel(dev, i); - - if (iio_channel_is_scan_element(chn)) - return true; - } - - return false; -} - -int main(int argc, char **argv) -{ - struct iio_context *ctx; - int c, option_index = 0; - const char *arg_uri = NULL; - const char *arg_ip = NULL; - const char *arg_xml = NULL; - enum backend backend = LOCAL; - bool do_scan = false, detect_context = false; - unsigned int i, major, minor; - char git_tag[8]; - int ret; - - while ((c = getopt_long(argc, argv, "+hn:x:u:sa", - options, &option_index)) != -1) { - switch (c) { - case 'h': - usage(); - return EXIT_SUCCESS; - case 'n': - if (backend != LOCAL) { - fprintf(stderr, "-x, -n and -u are mutually exclusive\n"); - return EXIT_FAILURE; - } - backend = NETWORK; - arg_ip = optarg; - break; - case 'x': - if (backend != LOCAL) { - fprintf(stderr, "-x, -n and -u are mutually exclusive\n"); - return EXIT_FAILURE; - } - backend = XML; - arg_xml = optarg; - break; - case 's': - do_scan = true; - break; - case 'u': - if (backend != LOCAL) { - fprintf(stderr, "-x, -n and -u are mutually exclusive\n"); - return EXIT_FAILURE; - } - backend = AUTO; - arg_uri = optarg; - break; - case 'a': - detect_context = true; - break; - case '?': - return EXIT_FAILURE; - } - } - - if (optind != argc) { - fprintf(stderr, "Incorrect number of arguments.\n\n"); - usage(); - return EXIT_FAILURE; - } - - iio_library_get_version(&major, &minor, git_tag); - printf("Library version: %u.%u (git tag: %s)\n", major, minor, git_tag); - - printf("Compiled with backends:"); - for (i = 0; i < iio_get_backends_count(); i++) - printf(" %s", iio_get_backend(i)); - printf("\n"); - - if (do_scan) { - scan(); - return EXIT_SUCCESS; - } - - if (detect_context) - ctx = autodetect_context(); - else if (backend == XML) - ctx = iio_create_xml_context(arg_xml); - else if (backend == NETWORK) - ctx = iio_create_network_context(arg_ip); - else if (backend == AUTO) - ctx = iio_create_context_from_uri(arg_uri); - else - ctx = iio_create_default_context(); - - if (!ctx) { - if (!detect_context) { - char buf[1024]; - - iio_strerror(errno, buf, sizeof(buf)); - fprintf(stderr, "Unable to create IIO context: %s\n", - buf); - } - - return EXIT_FAILURE; - } - - printf("IIO context created with %s backend.\n", - iio_context_get_name(ctx)); - - ret = iio_context_get_version(ctx, &major, &minor, git_tag); - if (!ret) - printf("Backend version: %u.%u (git tag: %s)\n", - major, minor, git_tag); - else - fprintf(stderr, "Unable to get backend version: %i\n", ret); - - printf("Backend description string: %s\n", - iio_context_get_description(ctx)); - - unsigned int nb_ctx_attrs = iio_context_get_attrs_count(ctx); - if (nb_ctx_attrs > 0) - printf("IIO context has %u attributes:\n", nb_ctx_attrs); - - for (i = 0; i < nb_ctx_attrs; i++) { - const char *key, *value; - - iio_context_get_attr(ctx, i, &key, &value); - printf("\t%s: %s\n", key, value); - } - - unsigned int nb_devices = iio_context_get_devices_count(ctx); - printf("IIO context has %u devices:\n", nb_devices); - - for (i = 0; i < nb_devices; i++) { - const struct iio_device *dev = iio_context_get_device(ctx, i); - const char *name = iio_device_get_name(dev); - printf("\t%s:", iio_device_get_id(dev)); - if (name) - printf(" %s", name); - if (dev_is_buffer_capable(dev)) - printf(" (buffer capable)"); - printf("\n"); - - unsigned int nb_channels = iio_device_get_channels_count(dev); - printf("\t\t%u channels found:\n", nb_channels); - - unsigned int j; - for (j = 0; j < nb_channels; j++) { - struct iio_channel *ch = iio_device_get_channel(dev, j); - const char *type_name; - - if (iio_channel_is_output(ch)) - type_name = "output"; - else - type_name = "input"; - - name = iio_channel_get_name(ch); - printf("\t\t\t%s: %s (%s", - iio_channel_get_id(ch), - name ? name : "", type_name); - - if (iio_channel_is_scan_element(ch)) { - const struct iio_data_format *format = - iio_channel_get_data_format(ch); - char sign = format->is_signed ? 's' : 'u'; - char repeat[12] = ""; - - if (format->is_fully_defined) - sign += 'A' - 'a'; - - if (format->repeat > 1) - snprintf(repeat, sizeof(repeat), "X%u", - format->repeat); - - printf(", index: %lu, format: %ce:%c%u/%u%s>>%u)\n", - iio_channel_get_index(ch), - format->is_be ? 'b' : 'l', - sign, format->bits, - format->length, repeat, - format->shift); - } else { - printf(")\n"); - } - - unsigned int nb_attrs = iio_channel_get_attrs_count(ch); - if (!nb_attrs) - continue; - - printf("\t\t\t%u channel-specific attributes found:\n", - nb_attrs); - - unsigned int k; - for (k = 0; k < nb_attrs; k++) { - const char *attr = iio_channel_get_attr(ch, k); - char buf[1024]; - ret = (int) iio_channel_attr_read(ch, - attr, buf, sizeof(buf)); - - printf("\t\t\t\tattr %2u: %s ", k, attr); - - if (ret > 0) { - printf("value: %s\n", buf); - } else { - iio_strerror(-ret, buf, sizeof(buf)); - printf("ERROR: %s (%i)\n", buf, ret); - } - } - } - - unsigned int nb_attrs = iio_device_get_attrs_count(dev); - if (nb_attrs) { - printf("\t\t%u device-specific attributes found:\n", - nb_attrs); - for (j = 0; j < nb_attrs; j++) { - const char *attr = iio_device_get_attr(dev, j); - char buf[1024]; - ret = (int) iio_device_attr_read(dev, - attr, buf, sizeof(buf)); - - printf("\t\t\t\tattr %2u: %s ", - j, attr); - - if (ret > 0) { - printf("value: %s\n", buf); - } else { - iio_strerror(-ret, buf, sizeof(buf)); - printf("ERROR: %s (%i)\n", buf, ret); - } - } - } - - nb_attrs = iio_device_get_buffer_attrs_count(dev); - if (nb_attrs) { - printf("\t\t%u buffer-specific attributes found:\n", - nb_attrs); - for (j = 0; j < nb_attrs; j++) { - const char *attr = iio_device_get_buffer_attr(dev, j); - char buf[1024]; - ret = (int) iio_device_buffer_attr_read(dev, - attr, buf, sizeof(buf)); - - printf("\t\t\t\tattr %2u: %s ", - j, attr); - - if (ret > 0) { - printf("value: %s\n", buf); - } else { - iio_strerror(-ret, buf, sizeof(buf)); - printf("ERROR: %s (%i)\n", buf, ret); - } - } - } - - nb_attrs = iio_device_get_debug_attrs_count(dev); - if (nb_attrs) { - printf("\t\t%u debug attributes found:\n", nb_attrs); - for (j = 0; j < nb_attrs; j++) { - const char *attr = - iio_device_get_debug_attr(dev, j); - char buf[1024]; - - ret = (int) iio_device_debug_attr_read(dev, - attr, buf, sizeof(buf)); - printf("\t\t\t\tdebug attr %2u: %s ", - j, attr); - if (ret > 0) { - printf("value: %s\n", buf); - } else { - iio_strerror(-ret, buf, sizeof(buf)); - printf("ERROR: %s (%i)\n", buf, ret); - } - } - } - - const struct iio_device *trig; - ret = iio_device_get_trigger(dev, &trig); - if (ret == 0) { - if (trig == NULL) { - printf("\t\tNo trigger assigned to device\n"); - } else { - name = iio_device_get_name(trig); - printf("\t\tCurrent trigger: %s(%s)\n", - iio_device_get_id(trig), - name ? name : ""); - } - } - } - - iio_context_destroy(ctx); - return EXIT_SUCCESS; -} |