#include <string.h>
#include <glib.h>
#include <sigrok.h>
+#include <sigrok-internal.h>
/* demo.c */
extern GIOChannel channels[2];
void sr_session_destroy(void)
{
+
g_slist_free(session->devices);
/* TODO: Loop over protocol decoders and free them. */
{
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;
}
* or if the poll timeout out and this source
* asked for that timeout.
*/
- sources[i].cb(fds[i].fd, fds[i].revents,
- sources[i].user_data);
+ if (!sources[i].cb(fds[i].fd, fds[i].revents,
+ sources[i].user_data))
+ sr_session_source_remove(sources[i].fd);
}
}
}
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(
void sr_session_run(void)
{
- g_message("session: running");
+ sr_info("session: running");
session->running = TRUE;
/* do we have real sources? */
void sr_session_halt(void)
{
- g_message("session: halting");
+ sr_info("session: halting");
session->running = FALSE;
}
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;
}
+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;
*/
for (l = session->datafeed_callbacks; l; l = l->next) {
cb = l->data;
+ datafeed_dump(packet);
cb(device, packet);
}
}
return;
new_sources = calloc(1, sizeof(struct source) * num_sources);
- for (old = 0; old < num_sources; old++)
+ for (old = 0, new = 0; old < num_sources; old++)
if (sources[old].fd != fd)
memcpy(&new_sources[new++], &sources[old],
sizeof(struct source));