X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=session.c;h=bbcf5bc923172328f5b7be322f7172c3304861aa;hb=221304219ef861c14a44017eb025631bbd2fa05c;hp=2cafc0f02746846f261d0556f9aad37e35ad3991;hpb=8a2efef2d5900cb3dd935af92a0e22528660c4be;p=libsigrok.git diff --git a/session.c b/session.c index 2cafc0f0..bbcf5bc9 100644 --- a/session.c +++ b/session.c @@ -24,6 +24,7 @@ #include #include #include +#include /* demo.c */ extern GIOChannel channels[2]; @@ -32,7 +33,7 @@ struct source { int fd; int events; int timeout; - receive_data_callback cb; + sr_receive_data_callback cb; void *user_data; }; @@ -53,6 +54,7 @@ struct sr_session *sr_session_new(void) void sr_session_destroy(void) { + g_slist_free(session->devices); /* TODO: Loop over protocol decoders and free them. */ @@ -70,8 +72,8 @@ int sr_session_device_add(struct sr_device *device) { int ret; - if (device->plugin && device->plugin->open) { - ret = device->plugin->open(device->plugin_index); + if (device->plugin && device->plugin->opendev) { + ret = device->plugin->opendev(device->plugin_index); if (ret != SR_OK) return ret; } @@ -81,6 +83,7 @@ int sr_session_device_add(struct sr_device *device) return SR_OK; } +#if 0 void sr_session_pa_clear(void) { /* @@ -91,10 +94,11 @@ void sr_session_pa_clear(void) session->analyzers = NULL; } -void sr_session_pa_add(struct analyzer *an) +void sr_session_pa_add(struct sr_analyzer *an) { session->analyzers = g_slist_append(session->analyzers, an); } +#endif void sr_session_datafeed_callback_clear(void) { @@ -102,7 +106,7 @@ void sr_session_datafeed_callback_clear(void) session->datafeed_callbacks = NULL; } -void sr_session_datafeed_callback_add(datafeed_callback callback) +void sr_session_datafeed_callback_add(sr_datafeed_callback callback) { session->datafeed_callbacks = g_slist_append(session->datafeed_callbacks, callback); @@ -156,7 +160,7 @@ int sr_session_start(void) GSList *l; int ret; - g_message("session: starting"); + sr_info("session: starting"); for (l = session->devices; l; l = l->next) { device = l->data; if ((ret = device->plugin->start_acquisition( @@ -170,7 +174,7 @@ int sr_session_start(void) void sr_session_run(void) { - g_message("session: running"); + sr_info("session: running"); session->running = TRUE; /* do we have real sources? */ @@ -187,7 +191,7 @@ void sr_session_run(void) void sr_session_halt(void) { - g_message("session: halting"); + sr_info("session: halting"); session->running = FALSE; } @@ -197,7 +201,7 @@ void sr_session_stop(void) struct sr_device *device; GSList *l; - g_message("session: stopping"); + sr_info("session: stopping"); session->running = FALSE; for (l = session->devices; l; l = l->next) { device = l->data; @@ -207,10 +211,37 @@ void sr_session_stop(void) } +static void datafeed_dump(struct sr_datafeed_packet *packet) +{ + struct sr_datafeed_logic *logic; + + switch (packet->type) { + case SR_DF_HEADER: + sr_dbg("bus: received SR_DF_HEADER"); + break; + case SR_DF_TRIGGER: + sr_dbg("bus: received SR_DF_TRIGGER at %lu ms", + packet->timeoffset / 1000000); + break; + case SR_DF_LOGIC: + logic = packet->payload; + sr_dbg("bus: received SR_DF_LOGIC at %f ms duration %f ms, %"PRIu64" bytes", + packet->timeoffset / 1000000.0, packet->duration / 1000000.0, + logic->length); + break; + case SR_DF_END: + sr_dbg("bus: received SR_DF_END"); + break; + default: + sr_dbg("bus: received unknown packet type %d", packet->type); + } + +} + void sr_session_bus(struct sr_device *device, struct sr_datafeed_packet *packet) { GSList *l; - datafeed_callback cb; + sr_datafeed_callback cb; /* * TODO: Send packet through PD pipe, and send the output of that to @@ -218,12 +249,13 @@ void sr_session_bus(struct sr_device *device, struct sr_datafeed_packet *packet) */ for (l = session->datafeed_callbacks; l; l = l->next) { cb = l->data; + datafeed_dump(packet); cb(device, packet); } } void sr_session_source_add(int fd, int events, int timeout, - receive_data_callback callback, void *user_data) + sr_receive_data_callback callback, void *user_data) { struct source *new_sources, *s;