GtkTreeIter iter;
const gchar *name;
GtkCheckMenuItem *menuitem;
- struct sr_dev *dev;
+ struct sr_dev_inst *sdi;
if (!gtk_combo_box_get_active_iter(devbox, &iter)) {
- g_object_set_data(parent, "dev", NULL);
+ g_object_set_data(parent, "sdi", NULL);
return;
}
- gtk_tree_model_get(devlist, &iter, 0, &name, 1, &dev,
+ gtk_tree_model_get(devlist, &iter, 0, &name, 1, &sdi,
2, &menuitem, -1);
gtk_check_menu_item_set_active(menuitem, TRUE);
sr_session_dev_remove_all();
- if (sr_session_dev_add(dev) != SR_OK) {
+ if (sr_session_dev_add(sdi) != SR_OK) {
g_critical("Failed to use device.");
sr_session_destroy();
- dev = NULL;
+ sdi = NULL;
}
- g_object_set_data(parent, "dev", dev);
+ g_object_set_data(parent, "sdi", sdi);
/*
* Grey out the time unless the device is valid,
* and it supports sample limiting
*/
- const gboolean limit_samples = dev &&
- sr_driver_hwcap_exists(dev->driver,
- SR_HWCAP_LIMIT_SAMPLES);
+ const gboolean limit_samples = sdi &&
+ sr_driver_hwcap_exists(sdi->driver, SR_HWCAP_LIMIT_SAMPLES);
gtk_widget_set_sensitive((GtkWidget*)timesamples, limit_samples);
gtk_widget_set_sensitive((GtkWidget*)timeunit, limit_samples);
}
} while (gtk_tree_model_iter_next(model, &iter));
}
-#define GET_DEV_INST(dev) \
- (dev)->driver->dev_info_get((dev)->driver_index, SR_DI_INST);
-
void dev_select_rescan(GtkAction *action, GtkWindow *parent)
{
GtkComboBox *devbox = g_object_get_data(G_OBJECT(parent), "devcombo");
g_return_if_fail(devbox != NULL);
GtkListStore *devlist = GTK_LIST_STORE(gtk_combo_box_get_model(devbox));
GtkTreeIter iter;
- struct sr_dev *dev;
const struct sr_dev_inst *sdi;
gchar *sdevname = NULL;
- GSList *devs, *l;
GtkUIManager *ui = g_object_get_data(G_OBJECT(parent), "ui_manager");
GtkWidget *menuitem = gtk_ui_manager_get_widget(ui,
"/menubar/DevMenu/DevSelectMenu");
GtkMenuShell *devmenu = GTK_MENU_SHELL(gtk_menu_item_get_submenu(GTK_MENU_ITEM(menuitem)));
GSList *radiolist = NULL;
+ struct sr_dev_driver **drivers;
+ GSList *l, *tmpdevs, *devices;
+ int num_devs, i;
(void)action;
* We wish to select the same device after the refresh if possible.
*/
if (gtk_combo_box_get_active_iter(devbox, &iter)) {
- gtk_tree_model_get(GTK_TREE_MODEL(devlist), &iter, 1, &dev, -1);
- /* FIXME: Use something other than dev->driver->name */
- sdevname = g_strdup(dev->driver->name);
+ gtk_tree_model_get(GTK_TREE_MODEL(devlist), &iter, 1, &sdi, -1);
+ /* FIXME: Use something other than sdi->driver->name */
+ sdevname = g_strdup(sdi->driver->name);
}
/* Destroy the old menu items */
gtk_list_store_clear(devlist);
/* Scan for new devices and update our list */
- /* TODO: Fix this in libsigrok first. */
- /*sr_dev_scan();*/
- devs = sr_dev_list();
- for (l = devs; l; l = l->next) {
- dev = l->data;
- sdi = GET_DEV_INST(dev);
- gchar *name = sdi->model ? sdi->model : sdi->vendor;
+#if 0
+ if (devices) {
+ /* TODO: tell drivers to clean up all instances */
+ g_free(devices);
+ }
+#endif
+ devices = NULL;
+
+ /* Scan all drivers for all devices. */
+ drivers = sr_driver_list();
+ for (i = 0; drivers[i]; i++) {
+ tmpdevs = sr_driver_scan(drivers[i], NULL);
+ for (l = tmpdevs; l; l = l->next)
+ devices = g_slist_append(devices, l->data);
+ g_slist_free(tmpdevs);
+ }
+ num_devs = g_slist_length(devices);
+
+ for (i = 0; i < num_devs; ++i) {
+ sdi = (struct sr_dev_inst *)g_slist_nth_data(devices, i);
+
+ gchar *name = sdi->driver->name;
if (!name)
name = "(unknown)";
gtk_list_store_append(devlist, &iter);
gtk_list_store_set(devlist, &iter,
0, name,
- 1, dev,
+ 1, sdi,
2, menuitem,
-1);
- if (sdevname && g_str_equal(sdevname, dev->driver->name))
+ if (sdevname && g_str_equal(sdevname, sdi->driver->name))
gtk_combo_box_set_active_iter(devbox, &iter);
}
if (sdevname)