X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=main.c;h=9bd2a0a5d1eefe3732d9a6b52a1b35dee816968d;hb=ddb1e153f7428431a55c426e8a6549ee4a29e7ba;hp=5406b04e3cb047809bef9b37dea1b9106cea8057;hpb=2d4a0d9c47928b8a403152eb3be2a667b0240c3f;p=sigrok-gtk.git diff --git a/main.c b/main.c index 5406b04..9bd2a0a 100644 --- 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; @@ -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);