]> sigrok.org Git - sigrok-gtk.git/commitdiff
Update sigrok-gtk to latest APIs.
authorUwe Hermann <redacted>
Sun, 30 Dec 2012 21:19:58 +0000 (22:19 +0100)
committerUwe Hermann <redacted>
Tue, 1 Jan 2013 00:14:09 +0000 (01:14 +0100)
This is sufficient to make sigrok-gtk compile again, but more fixes may
or may not be needed to make it properly work in all cases.

Opening a saved .sr file seems to work fine, at least.

devselect.c
main.c
toolbar.c

index f664df82dc0987d8918d57ef401039677ea4714a..e1bb630f5ecbdc059fa4e41d665de30124086626 100644 (file)
@@ -29,32 +29,31 @@ static void dev_selected(GtkComboBox *devbox, GObject *parent)
        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);
 }
@@ -77,24 +76,22 @@ static void dev_menuitem_toggled(GtkMenuItem *item, GtkComboBox *combo)
        } 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;
 
@@ -102,9 +99,9 @@ void dev_select_rescan(GtkAction *action, GtkWindow *parent)
         * 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 */
@@ -117,13 +114,28 @@ void dev_select_rescan(GtkAction *action, GtkWindow *parent)
        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)";
 
@@ -139,11 +151,11 @@ void dev_select_rescan(GtkAction *action, GtkWindow *parent)
                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)
diff --git a/main.c b/main.c
index 9546e1af6e74d674def022cba7a913bb4f2f5fb5..9bd2a0a5d1eefe3732d9a6b52a1b35dee816968d 100644 (file)
--- a/main.c
+++ b/main.c
@@ -33,14 +33,14 @@ static const char *colours[8] = {
        "gold", "darkgreen", "blue", "magenta",
 };
 
-static void
-datafeed_in(struct sr_dev *dev, struct sr_datafeed_packet *packet)
+static void datafeed_in(const struct sr_dev_inst *sdi,
+                       const struct sr_datafeed_packet *packet)
 {
-       static int logic_probelist[SR_MAX_NUM_PROBES + 1] = { 0 };
+       static int logic_probelist[SR_MAX_NUM_PROBES + 1] = { -1 };
        static int unitsize = 0;
-       struct sr_probe *probe;
-       struct sr_datafeed_logic *logic = NULL;
-       struct sr_datafeed_meta_logic *meta_logic;
+       const struct sr_probe *probe;
+       const struct sr_datafeed_logic *logic = NULL;
+       const struct sr_datafeed_meta_logic *meta_logic;
        int num_enabled_probes, sample_size, i;
        uint64_t filter_out_len;
        uint8_t *filter_out;
@@ -60,11 +60,11 @@ datafeed_in(struct sr_dev *dev, struct sr_datafeed_packet *packet)
                break;
        case SR_DF_META_LOGIC:
                g_message("fe: received SR_DF_META_LOGIC");
-               meta_logic = packet->payload;
+               meta_logic = (const struct sr_datafeed_meta_logic *)packet->payload;
                num_enabled_probes = 0;
                gtk_list_store_clear(siglist);
                for (i = 0; i < meta_logic->num_probes; i++) {
-                       probe = g_slist_nth_data(dev->probes, i);
+                       probe = (const struct sr_probe *)g_slist_nth_data(sdi->probes, i);
                        if (probe->enabled) {
                                GtkTreeIter iter;
                                logic_probelist[num_enabled_probes++] = probe->index;
@@ -76,13 +76,14 @@ datafeed_in(struct sr_dev *dev, struct sr_datafeed_packet *packet)
                                                -1);
                        }
                }
+               logic_probelist[num_enabled_probes] = -1;
                /* How many bytes we need to store num_enabled_probes bits */
                unitsize = (num_enabled_probes + 7) / 8;
                data = g_array_new(FALSE, FALSE, unitsize);
                g_object_set_data(G_OBJECT(siglist), "sampledata", data);
                break;
        case SR_DF_LOGIC:
-               logic = packet->payload;
+               logic = (const struct sr_datafeed_logic *)packet->payload;
                sample_size = logic->unitsize;
                g_message("fe: received SR_DF_LOGIC, %"PRIu64" bytes", logic->length);
 
@@ -130,9 +131,24 @@ int main(int argc, char **argv)
 {
        GtkWindow *window;
        GtkWidget *vbox, *vpaned, *log;
+       struct sr_context *sr_ctx;
+       struct sr_dev_driver **drivers, **driver;
+
        gtk_init(&argc, &argv);
        icons_register();
-       sr_init();
+
+       sr_init(&sr_ctx);
+
+       /* Initialize all libsigrok drivers. */
+       drivers = sr_driver_list();
+       for (driver = drivers; *driver; driver++) {
+               if (sr_driver_init(sr_ctx, *driver) != SR_OK) {
+                       g_error("Failed to initialize driver %s.",
+                               (*driver)->name);
+                       exit(1); // FIXME?
+               }
+       }
+
        sr_session_new();
        sr_session_datafeed_callback_add(datafeed_in);
 
index b8f9542dcc2997f68176ae7fb979f747ca64dc0a..84e1823535f698bae6c46015d64cfb343156626d 100644 (file)
--- a/toolbar.c
+++ b/toolbar.c
@@ -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,11 +59,10 @@ static void prop_edited(GtkCellRendererText *cel, gchar *path, gchar *text,
                if (sr_parse_sizestring(text, &tmp_u64) != SR_OK)
                        return;
 
-               ret = dev->driver->dev_config_set(dev->driver_index,
-                                                 cap, &tmp_u64);
+               ret = sr_dev_config_set(sdi, cap, &tmp_u64);
                break;
        case SR_T_CHAR:
-               ret = dev->driver->dev_config_set(dev->driver_index, cap, text);
+               ret = sr_dev_config_set(sdi, cap, text);
                break;
        /* SR_T_BOOL will be handled by prop_toggled */
        }
@@ -75,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;
@@ -86,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->driver->dev_config_set(dev->driver_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);
@@ -113,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",
@@ -137,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));
-       const int *hwcaps = dev->driver->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++) {
                const struct sr_hwcap_option *hwo;
-               if (!(hwo = sr_hw_hwcap_get(hwcaps[cap])))
+               if (!(hwo = sr_devopt_get(hwcaps[cap])))
                        continue;
                gtk_list_store_append(props, &iter);
                gtk_list_store_set(props, &iter, 
@@ -160,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;
@@ -202,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;
@@ -213,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);
 }
@@ -222,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;
 
@@ -230,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_set(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;
 
@@ -245,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);
 }
@@ -254,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",
@@ -279,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,
@@ -291,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;
@@ -331,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);
@@ -353,9 +354,8 @@ static void capture_run(GtkAction *action, GObject *parent)
        }
 
        if (time_msec) {
-               if (sr_driver_hwcap_exists(dev->driver, SR_HWCAP_LIMIT_MSEC)) {
-                       if (dev->driver->dev_config_set(dev->driver_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();
@@ -366,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->driver->dev_info_get(
-                                                       dev->driver_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) {
@@ -378,8 +377,7 @@ static void capture_run(GtkAction *action, GObject *parent)
                                return;
                        }
 
-                       if (dev->driver->dev_config_set(dev->driver_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;
@@ -387,20 +385,21 @@ static void capture_run(GtkAction *action, GObject *parent)
                }
        }
        if (limit_samples) {
-               if (dev->driver->dev_config_set(dev->driver_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->driver->dev_config_set(dev->driver_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.");