X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=main.c;h=9bd2a0a5d1eefe3732d9a6b52a1b35dee816968d;hb=c82143e6806703f739597adec1cf14aff08a1a6e;hp=8dd046b953d4477e72dae2f6fa6b097ab1d4bc55;hpb=834ea5d229d6c85e09eec6eb274250c976087dba;p=sigrok-gtk.git
diff --git a/main.c b/main.c
index 8dd046b..9bd2a0a 100644
--- a/main.c
+++ b/main.c
@@ -17,7 +17,7 @@
* along with this program. If not, see .
*/
-#include
+#include
#include
#include
@@ -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);