struct iio_context * iio_create_context_from_uri(const char *uri) { #ifdef WITH_LOCAL_BACKEND if (strcmp(uri, "local:") == 0) /* No address part */ return iio_create_local_context(); #endif #ifdef WITH_XML_BACKEND if (strncmp(uri, "xml:", sizeof("xml:") - 1) == 0) return iio_create_xml_context(uri + sizeof("xml:") - 1); #endif #ifdef WITH_NETWORK_BACKEND if (strncmp(uri, "ip:", sizeof("ip:") - 1) == 0) return iio_create_network_context(uri+3); #endif #ifdef WITH_USB_BACKEND if (strncmp(uri, "usb:", sizeof("usb:") - 1) == 0) return usb_create_context_from_uri(uri); #endif #ifdef WITH_SERIAL_BACKEND if (strncmp(uri, "serial:", sizeof("serial:") - 1) == 0) return serial_create_context_from_uri(uri); #endif errno = ENOSYS; return NULL; }
int main(int argc, char **argv) { char *xml; struct iio_context *ctx; int c, option_index = 0, arg_index = 0, xml_index = 0, ip_index = 0; enum backend backend = LOCAL; while ((c = getopt_long(argc, argv, "+hn:x:", options, &option_index)) != -1) { switch (c) { case 'h': usage(); return EXIT_SUCCESS; case 'n': if (backend != LOCAL) { fprintf(stderr, "-x and -n are mutually exclusive\n"); return EXIT_FAILURE; } backend = NETWORK; arg_index += 2; ip_index = arg_index; break; case 'x': if (backend != LOCAL) { fprintf(stderr, "-x and -n are mutually exclusive\n"); return EXIT_FAILURE; } backend = XML; arg_index += 2; xml_index = arg_index; break; case '?': return EXIT_FAILURE; } } if (arg_index >= argc) { fprintf(stderr, "Incorrect number of arguments.\n\n"); usage(); return EXIT_FAILURE; } if (backend == XML) ctx = iio_create_xml_context(argv[xml_index]); else if (backend == NETWORK) ctx = iio_create_network_context(argv[ip_index]); else ctx = iio_create_default_context(); if (!ctx) { fprintf(stderr, "Unable to create IIO context\n"); return EXIT_FAILURE; } xml = strdup(iio_context_get_xml(ctx)); if (!xml) { iio_context_destroy(ctx); return EXIT_FAILURE; } printf("XML generated:\n\n%s\n\n", xml); iio_context_destroy(ctx); ctx = iio_create_xml_context_mem(xml, strlen(xml)); if (!ctx) { fprintf(stderr, "Unable to re-generate context\n"); } else { printf("Context re-creation from generated XML suceeded!\n"); iio_context_destroy(ctx); } free(xml); return EXIT_SUCCESS; }
int main(int argc, char **argv) { struct iio_context *ctx; int c, option_index = 0, arg_index = 0; enum backend backend = LOCAL; unsigned int major, minor; char git_tag[8]; int ret; while ((c = getopt_long(argc, argv, "+hn:x:", options, &option_index)) != -1) { switch (c) { case 'h': usage(); return EXIT_SUCCESS; case 'n': if (backend != LOCAL) { ERROR("-x and -n are mutually exclusive\n"); return EXIT_FAILURE; } backend = NETWORK; arg_index += 2; break; case 'x': if (backend != LOCAL) { ERROR("-x and -n are mutually exclusive\n"); return EXIT_FAILURE; } backend = XML; arg_index += 2; break; case '?': return EXIT_FAILURE; } } if (arg_index >= argc) { fprintf(stderr, "Incorrect number of arguments.\n\n"); usage(); return EXIT_FAILURE; } iio_library_get_version(&major, &minor, git_tag); INFO("Library version: %u.%u (git tag: %s)\n", major, minor, git_tag); if (backend == XML) ctx = iio_create_xml_context(argv[arg_index]); else if (backend == NETWORK) ctx = iio_create_network_context(argv[arg_index]); else ctx = iio_create_local_context(); if (!ctx) { ERROR("Unable to create IIO context\n"); return EXIT_FAILURE; } INFO("IIO context created with %s backend.\n", iio_context_get_name(ctx)); ret = iio_context_get_version(ctx, &major, &minor, git_tag); if (!ret) INFO("Backend version: %u.%u (git tag: %s)\n", major, minor, git_tag); else ERROR("Unable to get backend version: %i\n", ret); unsigned int nb_devices = iio_context_get_devices_count(ctx); INFO("IIO context has %u devices:\n", nb_devices); unsigned int i; 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); INFO("\t%s: %s\n", iio_device_get_id(dev), name ? name : "" ); unsigned int nb_channels = iio_device_get_channels_count(dev); INFO("\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); INFO("\t\t\t%s: %s (%s)\n", iio_channel_get_id(ch), name ? name : "", type_name); unsigned int nb_attrs = iio_channel_get_attrs_count(ch); if (!nb_attrs) continue; INFO("\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, 1024); if (ret > 0) INFO("\t\t\t\tattr %u: %s" " value: %s\n", k, attr, buf); else if (ret == -ENOSYS) INFO("\t\t\t\tattr %u: %s\n", k, attr); else ERROR("Unable to read attribute %s\n", attr); } } unsigned int nb_attrs = iio_device_get_attrs_count(dev); if (!nb_attrs) continue; INFO("\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, 1024); if (ret > 0) INFO("\t\t\t\tattr %u: %s value: %s\n", j, attr, buf); else if (ret == -ENOSYS) INFO("\t\t\t\tattr %u: %s\n", j, attr); else ERROR("Unable to read attribute: %s\n", attr); } } iio_context_destroy(ctx); return EXIT_SUCCESS; }