]> sigrok.org Git - sigrok-gtk.git/blobdiff - main.c
Makefile.am: Fix typo in 'ChangeLog' target.
[sigrok-gtk.git] / main.c
diff --git a/main.c b/main.c
index 8dd046b953d4477e72dae2f6fa6b097ab1d4bc55..9bd2a0a5d1eefe3732d9a6b52a1b35dee816968d 100644 (file)
--- a/main.c
+++ b/main.c
@@ -17,7 +17,7 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include <sigrok.h>
+#include <libsigrok/libsigrok.h>
 #include <gtk/gtk.h>
 
 #include <errno.h>
@@ -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;
@@ -53,18 +53,18 @@ datafeed_in(struct sr_dev *dev, struct sr_datafeed_packet *packet)
        case SR_DF_END:
                sigview_zoom(sigview, 1, 0);
                g_message("fe: Received SR_DF_END");
-               sr_session_halt();
+               sr_session_stop();
                break;
        case SR_DF_TRIGGER:
                g_message("fe: received SR_DF_TRIGGER");
                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);