X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=toolbar.c;h=84e1823535f698bae6c46015d64cfb343156626d;hb=ddb1e153f7428431a55c426e8a6549ee4a29e7ba;hp=ee4f38ad1cbc307a0c3f3b8e9ed8f02417d752d0;hpb=43132a90c265dfee4d4d8643eb0b331694017689;p=sigrok-gtk.git diff --git a/toolbar.c b/toolbar.c index ee4f38a..84e1823 100644 --- a/toolbar.c +++ b/toolbar.c @@ -19,7 +19,7 @@ #include -#include +#include #include @@ -43,7 +43,7 @@ static void prop_edited(GtkCellRendererText *cel, gchar *path, gchar *text, { (void)cel; - struct sr_dev *dev = g_object_get_data(G_OBJECT(props), "dev"); + struct sr_dev_inst *sdi = g_object_get_data(G_OBJECT(props), "sdi"); GtkTreeIter iter; int type, cap; guint64 tmp_u64; @@ -59,12 +59,10 @@ static void prop_edited(GtkCellRendererText *cel, gchar *path, gchar *text, if (sr_parse_sizestring(text, &tmp_u64) != SR_OK) return; - ret = dev->plugin->set_configuration(dev->plugin_index, - cap, &tmp_u64); + ret = sr_dev_config_set(sdi, cap, &tmp_u64); break; case SR_T_CHAR: - ret = dev->plugin->set_configuration(dev->plugin_index, - cap, text); + ret = sr_dev_config_set(sdi, cap, text); break; /* SR_T_BOOL will be handled by prop_toggled */ } @@ -76,7 +74,7 @@ static void prop_edited(GtkCellRendererText *cel, gchar *path, gchar *text, static void prop_toggled(GtkCellRendererToggle *cel, gchar *path, GtkListStore *props) { - struct sr_dev *dev = g_object_get_data(G_OBJECT(props), "dev"); + struct sr_dev_inst *sdi = g_object_get_data(G_OBJECT(props), "sdi"); GtkTreeIter iter; int type, cap; int ret; @@ -87,8 +85,7 @@ static void prop_toggled(GtkCellRendererToggle *cel, gchar *path, DEV_PROP_TYPE, &type, -1); val = !gtk_cell_renderer_toggle_get_active(cel); - ret = dev->plugin->set_configuration(dev->plugin_index, cap, - GINT_TO_POINTER(val)); + ret = sr_dev_config_set(sdi, cap, GINT_TO_POINTER(val)); if (!ret) gtk_list_store_set(props, &iter, DEV_PROP_BOOLVALUE, val, -1); @@ -114,8 +111,8 @@ static void dev_set_options(GtkAction *action, GtkWindow *parent) { (void)action; - struct sr_dev *dev = g_object_get_data(G_OBJECT(parent), "dev"); - if (!dev) + struct sr_dev_inst *sdi = g_object_get_data(G_OBJECT(parent), "sdi"); + if (!sdi) return; GtkWidget *dialog = gtk_dialog_new_with_buttons("Device Properties", @@ -138,12 +135,16 @@ static void dev_set_options(GtkAction *action, GtkWindow *parent) G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_BOOLEAN); gtk_tree_view_set_model(GTK_TREE_VIEW(tv), GTK_TREE_MODEL(props)); - int *hwcaps = dev->plugin->hwcap_get_all(); + const int *hwcaps; int cap; + + /* TODO: Error handling. */ + sr_info_get(sdi->driver, SR_DI_HWCAPS, (const void **)&hwcaps, sdi); + GtkTreeIter iter; for (cap = 0; hwcaps[cap]; cap++) { - struct sr_hwcap_option *hwo; - if (!(hwo = sr_hw_hwcap_get(hwcaps[cap]))) + const struct sr_hwcap_option *hwo; + if (!(hwo = sr_devopt_get(hwcaps[cap]))) continue; gtk_list_store_append(props, &iter); gtk_list_store_set(props, &iter, @@ -161,7 +162,7 @@ static void dev_set_options(GtkAction *action, GtkWindow *parent) /* Save device with list so that property can be set by edited * handler. */ - g_object_set_data(G_OBJECT(props), "dev", dev); + g_object_set_data(G_OBJECT(props), "sdi", sdi); /* Add columns to the tree view */ GtkTreeViewColumn *col; @@ -203,7 +204,7 @@ enum { static void probe_toggled(GtkCellRenderer *cel, gchar *path, GtkTreeModel *probes) { - struct sr_dev *dev = g_object_get_data(G_OBJECT(probes), "dev"); + struct sr_dev_inst *sdi = g_object_get_data(G_OBJECT(probes), "sdi"); GtkTreeIter iter; struct sr_probe *probe; gint i; @@ -214,8 +215,7 @@ static void probe_toggled(GtkCellRenderer *cel, gchar *path, gtk_tree_model_get_iter_from_string(probes, &iter, path); gtk_tree_model_get(probes, &iter, PROBE_NUMBER, &i, PROBE_ENABLED, &en, -1); - probe = sr_dev_probe_find(dev, i); - probe->enabled = !en; + sr_dev_probe_enable(sdi, i, FALSE); gtk_list_store_set(GTK_LIST_STORE(probes), &iter, PROBE_ENABLED, probe->enabled, -1); } @@ -223,7 +223,7 @@ static void probe_toggled(GtkCellRenderer *cel, gchar *path, static void probe_named(GtkCellRendererText *cel, gchar *path, gchar *text, GtkTreeModel *probes) { - struct sr_dev *dev = g_object_get_data(G_OBJECT(probes), "dev"); + struct sr_dev_inst *sdi = g_object_get_data(G_OBJECT(probes), "sdi"); GtkTreeIter iter; gint i; @@ -231,14 +231,14 @@ static void probe_named(GtkCellRendererText *cel, gchar *path, gchar *text, gtk_tree_model_get_iter_from_string(probes, &iter, path); gtk_tree_model_get(probes, &iter, PROBE_NUMBER, &i, -1); - sr_dev_probe_name(dev, i, text); + sr_dev_probe_name_set(sdi, i, text); gtk_list_store_set(GTK_LIST_STORE(probes), &iter, PROBE_NAME, text, -1); } static void probe_trigger_set(GtkCellRendererText *cel, gchar *path, gchar *text, GtkTreeModel *probes) { - struct sr_dev *dev = g_object_get_data(G_OBJECT(probes), "dev"); + struct sr_dev_inst *sdi = g_object_get_data(G_OBJECT(probes), "sdi"); GtkTreeIter iter; gint i; @@ -246,7 +246,7 @@ static void probe_trigger_set(GtkCellRendererText *cel, gchar *path, gtk_tree_model_get_iter_from_string(probes, &iter, path); gtk_tree_model_get(probes, &iter, PROBE_NUMBER, &i, -1); - sr_dev_trigger_set(dev, i, text); + sr_dev_trigger_set(sdi, i, text); gtk_list_store_set(GTK_LIST_STORE(probes), &iter, PROBE_TRIGGER, text, -1); } @@ -255,8 +255,8 @@ static void dev_set_probes(GtkAction *action, GtkWindow *parent) { (void)action; - struct sr_dev *dev = g_object_get_data(G_OBJECT(parent), "dev"); - if (!dev) + struct sr_dev_inst *sdi = g_object_get_data(G_OBJECT(parent), "sdi"); + if (!sdi) return; GtkWidget *dialog = gtk_dialog_new_with_buttons("Configure Probes", @@ -280,7 +280,7 @@ static void dev_set_probes(GtkAction *action, GtkWindow *parent) GtkTreeIter iter; GSList *p; int i; - for (p = dev->probes, i = 1; p; p = g_slist_next(p), i++) { + for (p = sdi->probes, i = 1; p; p = g_slist_next(p), i++) { struct sr_probe *probe = p->data; gtk_list_store_append(probes, &iter); gtk_list_store_set(probes, &iter, PROBE_NUMBER, i, @@ -292,7 +292,7 @@ static void dev_set_probes(GtkAction *action, GtkWindow *parent) /* Save device with list so that property can be set by edited * handler. */ - g_object_set_data(G_OBJECT(probes), "dev", dev); + g_object_set_data(G_OBJECT(probes), "sdi", sdi); /* Add columns to the tree view */ GtkTreeViewColumn *col; @@ -332,7 +332,7 @@ static void capture_run(GtkAction *action, GObject *parent) { (void)action; - struct sr_dev *dev = g_object_get_data(G_OBJECT(parent), "dev"); + struct sr_dev_inst *sdi = g_object_get_data(G_OBJECT(parent), "sdi"); GtkEntry *timesamples = g_object_get_data(parent, "timesamples"); GtkComboBox *timeunit = g_object_get_data(parent, "timeunit"); gint i = gtk_combo_box_get_active(timeunit); @@ -354,9 +354,8 @@ static void capture_run(GtkAction *action, GObject *parent) } if (time_msec) { - if (sr_hw_has_hwcap(dev->plugin, SR_HWCAP_LIMIT_MSEC)) { - if (dev->plugin->set_configuration(dev->plugin_index, - SR_HWCAP_LIMIT_MSEC, + if (sr_driver_hwcap_exists(sdi->driver, SR_HWCAP_LIMIT_MSEC)) { + if (sr_dev_config_set(sdi, SR_HWCAP_LIMIT_MSEC, &time_msec) != SR_OK) { g_critical("Failed to configure time limit."); sr_session_destroy(); @@ -367,11 +366,10 @@ static void capture_run(GtkAction *action, GObject *parent) * convert to samples based on the samplerate. */ limit_samples = 0; - if (sr_dev_has_hwcap(dev, SR_HWCAP_SAMPLERATE)) { + if (sr_dev_has_hwcap(sdi, SR_HWCAP_SAMPLERATE)) { guint64 tmp_u64; - tmp_u64 = *((uint64_t *)dev->plugin->get_dev_info( - dev->plugin_index, - SR_DI_CUR_SAMPLERATE)); + sr_info_get(sdi->driver, SR_DI_CUR_SAMPLERATE, + (const void **)&tmp_u64, sdi); limit_samples = tmp_u64 * time_msec / (uint64_t) 1000; } if (limit_samples == 0) { @@ -379,8 +377,7 @@ static void capture_run(GtkAction *action, GObject *parent) return; } - if (dev->plugin->set_configuration(dev->plugin_index, - SR_HWCAP_LIMIT_SAMPLES, + if (sr_dev_config_set(sdi, SR_HWCAP_LIMIT_SAMPLES, &limit_samples) != SR_OK) { g_critical("Failed to configure time-based sample limit."); return; @@ -388,20 +385,21 @@ static void capture_run(GtkAction *action, GObject *parent) } } if (limit_samples) { - if (dev->plugin->set_configuration(dev->plugin_index, - SR_HWCAP_LIMIT_SAMPLES, - &limit_samples) != SR_OK) { + if (sr_dev_config_set(sdi, SR_HWCAP_LIMIT_SAMPLES, + &limit_samples) != SR_OK) { g_critical("Failed to configure sample limit."); return; } } - if (dev->plugin->set_configuration(dev->plugin_index, - SR_HWCAP_PROBECONFIG, (char *)dev->probes) != SR_OK) { +#if 0 + if (sr_dev_config_set(sdi, + SR_HWCAP_PROBECONFIG, (char *)sdi->probes) != SR_OK) { printf("Failed to configure probes.\n"); sr_session_destroy(); return; } +#endif if (sr_session_start() != SR_OK) { g_critical("Failed to start session."); @@ -486,15 +484,15 @@ static const GtkActionEntry action_items[] = { "Exit the program", G_CALLBACK(gtk_main_quit) }, {"ViewMenu", NULL, "_View", NULL, NULL, NULL}, - {"ViewZoomIn", GTK_STOCK_ZOOM_IN, "Zoom _In", "z", NULL, + {"ViewZoomIn", GTK_STOCK_ZOOM_IN, "Zoom _In", "plus", NULL, G_CALLBACK(zoom_in)}, - {"ViewZoomOut", GTK_STOCK_ZOOM_OUT, "Zoom _Out", "Z", + {"ViewZoomOut", GTK_STOCK_ZOOM_OUT, "Zoom _Out", "minus", NULL, G_CALLBACK(zoom_out)}, {"ViewZoomFit", GTK_STOCK_ZOOM_FIT, NULL, NULL, NULL, G_CALLBACK(zoom_fit)}, {"HelpMenu", NULL, "_Help", NULL, NULL, NULL}, - {"HelpWiki", GTK_STOCK_ABOUT, "Sigrok _Wiki", NULL, NULL, + {"HelpWiki", GTK_STOCK_ABOUT, "sigrok _Wiki", NULL, NULL, G_CALLBACK(help_wiki)}, {"HelpAbout", GTK_STOCK_ABOUT, "_About", NULL, NULL, G_CALLBACK(help_about)}, @@ -579,17 +577,8 @@ GtkWidget *toolbar_init(GtkWindow *parent) toolbar = GTK_TOOLBAR(gtk_ui_manager_get_widget(ui, "/toolbar")); gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(toolbar), FALSE, TRUE, 0); - /* Device selection GtkComboBox */ - GtkToolItem *toolitem = gtk_tool_item_new(); - GtkWidget *align = gtk_alignment_new(0.5, 0.5, 2, 0); - GtkWidget *dev = dev_select_combo_box_new(parent); - - gtk_container_add(GTK_CONTAINER(align), dev); - gtk_container_add(GTK_CONTAINER(toolitem), align); - gtk_toolbar_insert(toolbar, toolitem, 0); - /* Time/Samples entry */ - toolitem = gtk_tool_item_new(); + GtkToolItem *toolitem = gtk_tool_item_new(); GtkWidget *timesamples = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(timesamples), "100"); gtk_entry_set_alignment(GTK_ENTRY(timesamples), 1.0); @@ -599,7 +588,7 @@ GtkWidget *toolbar_init(GtkWindow *parent) /* Time unit combo box */ toolitem = gtk_tool_item_new(); - align = gtk_alignment_new(0.5, 0.5, 2, 0); + GtkWidget *align = gtk_alignment_new(0.5, 0.5, 2, 0); GtkWidget *timeunit = gtk_combo_box_new_text(); gtk_combo_box_append_text(GTK_COMBO_BOX(timeunit), "samples"); gtk_combo_box_append_text(GTK_COMBO_BOX(timeunit), "ms"); @@ -612,6 +601,16 @@ GtkWidget *toolbar_init(GtkWindow *parent) g_object_set_data(G_OBJECT(parent), "timesamples", timesamples); g_object_set_data(G_OBJECT(parent), "timeunit", timeunit); + /* Device selection GtkComboBox */ + toolitem = gtk_tool_item_new(); + align = gtk_alignment_new(0.5, 0.5, 2, 0); + GtkWidget *dev = dev_select_combo_box_new(parent); + + gtk_container_add(GTK_CONTAINER(align), dev); + gtk_container_add(GTK_CONTAINER(toolitem), align); + gtk_toolbar_insert(toolbar, toolitem, 0); + + return GTK_WIDGET(vbox); }