int iio_context_get_version(const struct iio_context *ctx, unsigned int *major, unsigned int *minor, char git_tag[8]) { if (ctx->ops->get_version) return ctx->ops->get_version(ctx, major, minor, git_tag); iio_library_get_version(major, minor, git_tag); return 0; }
static void init_application () { GtkBuilder *builder = NULL; GtkWidget *window; GtkWidget *btn_capture; GtkWidget *infobar_close, *infobar_reconnect; GtkWidget *infobar_box; GtkWidget *vcheck_dont_show; GtkAboutDialog *about = NULL; unsigned int major, minor; char patch[9]; const gchar *tmp; gchar tmp2[1024]; builder = gtk_builder_new(); if (!gtk_builder_add_from_file(builder, "./osc.glade", NULL)) { gtk_builder_add_from_file(builder, OSC_GLADE_FILE_PATH "osc.glade", NULL); } else { GtkImage *logo; GdkPixbuf *pixbuf; GError *err = NULL; /* We are running locally, so load the local files */ logo = GTK_IMAGE(gtk_builder_get_object(builder, "about_ADI_logo")); g_object_set(logo, "file","./icons/ADIlogo.png", NULL); logo = GTK_IMAGE(gtk_builder_get_object(builder, "about_IIO_logo")); g_object_set(logo, "file","./icons/IIOlogo.png", NULL); about = GTK_ABOUT_DIALOG(gtk_builder_get_object(builder, "About_dialog")); pixbuf = gdk_pixbuf_new_from_file("./icons/osc128.png", &err); if (pixbuf) { g_object_set(about, "logo", pixbuf, NULL); g_object_unref(pixbuf); } } /* Override version in About menu with git branch and commit hash. */ if (!about) about = GTK_ABOUT_DIALOG(gtk_builder_get_object(builder, "About_dialog")); gtk_about_dialog_set_version(about, OSC_VERSION); iio_library_get_version(&major, &minor, patch); tmp = gtk_label_get_label(GTK_LABEL(gtk_builder_get_object(builder, "libiio_title"))); sprintf(tmp2, "%s\nlibiio version : %i.%i-%s\n", tmp, major, minor, patch); gtk_label_set_label(GTK_LABEL(gtk_builder_get_object(builder, "libiio_title")), tmp2); window = GTK_WIDGET(gtk_builder_get_object(builder, "main_menu")); notebook = GTK_WIDGET(gtk_builder_get_object(builder, "notebook")); btn_capture = GTK_WIDGET(gtk_builder_get_object(builder, "new_capture_plot")); tooltips_en = GTK_WIDGET(gtk_builder_get_object(builder, "menuitem_tooltips_en")); versioncheck_en = GTK_WIDGET(gtk_builder_get_object(builder, "menuitem_vcheck_startup")); vcheck_dont_show = GTK_WIDGET(gtk_builder_get_object(builder, "version_check_dont_show_again")); infobar_box = GTK_WIDGET(gtk_builder_get_object(builder, "connect_infobar_container")); infobar = gui_connection_infobar_new(&infobar_close, &infobar_reconnect); gtk_box_pack_start(GTK_BOX(infobar_box), infobar, FALSE, TRUE, 0); main_window = window; /* Connect signals. */ g_signal_connect(G_OBJECT(window), "delete-event", G_CALLBACK(application_quit), NULL); g_signal_connect(G_OBJECT(btn_capture), "activate", G_CALLBACK(new_plot_cb), NULL); g_signal_connect(G_OBJECT(tooltips_en), "toggled", G_CALLBACK(tooltips_enable_cb), NULL); g_signal_connect(G_OBJECT(versioncheck_en), "toggled", G_CALLBACK(versioncheck_en_cb), vcheck_dont_show); g_signal_connect(G_OBJECT(vcheck_dont_show), "toggled", G_CALLBACK(vcheck_dont_show_cb), versioncheck_en); g_signal_connect(G_OBJECT(infobar_close), "clicked", G_CALLBACK(infobar_hide_cb), NULL); g_signal_connect(G_OBJECT(infobar_reconnect), "clicked", G_CALLBACK(infobar_reconnect_cb), NULL); dialogs_init(builder); ctx = osc_create_context(); if (ctx) do_init(ctx); gtk_widget_show(window); }
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; }