/* got metadata */
sdi = get_metadata(fds[i].fd);
sdi->index = final_devcnt;
+ ctx = sdi->priv;
} else {
/* not an OLS -- some other board that uses the sump protocol */
sdi = sr_dev_inst_new(final_devcnt, SR_ST_INACTIVE,
if (!(sdi = sr_dev_inst_get(dev_insts, dev_index))) {
sr_err("ols: %s: sdi was NULL", __func__);
- return SR_ERR; /* TODO: SR_ERR_ARG? */
+ return SR_ERR_BUG;
}
ctx = sdi->priv;
return ret;
}
-static int receive_data(int fd, int revents, void *session_data)
+static int receive_data(int fd, int revents, void *cb_data)
{
struct sr_datafeed_packet packet;
struct sr_datafeed_logic logic;
ctx = NULL;
for (l = dev_insts; l; l = l->next) {
sdi = l->data;
+ ctx = sdi->priv;
if (ctx->serial->fd == fd) {
- ctx = sdi->priv;
break;
}
+ ctx = NULL;
}
if (!ctx)
/* Shouldn't happen. */
* finished. We'll double that to 30ms to be sure...
*/
sr_source_remove(fd);
- sr_source_add(fd, G_IO_IN, 30, receive_data, session_data);
+ sr_source_add(fd, G_IO_IN, 30, receive_data, cb_data);
ctx->raw_sample_buf = g_try_malloc(ctx->limit_samples * 4);
if (!ctx->raw_sample_buf) {
sr_err("ols: %s: ctx->raw_sample_buf malloc failed",
logic.unitsize = 4;
logic.data = ctx->raw_sample_buf +
(ctx->limit_samples - ctx->num_samples) * 4;
- sr_session_bus(session_data, &packet);
+ sr_session_send(cb_data, &packet);
}
/* send the trigger */
packet.type = SR_DF_TRIGGER;
- sr_session_bus(session_data, &packet);
+ sr_session_send(cb_data, &packet);
/* send post-trigger samples */
packet.type = SR_DF_LOGIC;
logic.unitsize = 4;
logic.data = ctx->raw_sample_buf + ctx->trigger_at * 4 +
(ctx->limit_samples - ctx->num_samples) * 4;
- sr_session_bus(session_data, &packet);
+ sr_session_send(cb_data, &packet);
} else {
/* no trigger was used */
packet.type = SR_DF_LOGIC;
logic.unitsize = 4;
logic.data = ctx->raw_sample_buf +
(ctx->limit_samples - ctx->num_samples) * 4;
- sr_session_bus(session_data, &packet);
+ sr_session_send(cb_data, &packet);
}
g_free(ctx->raw_sample_buf);
serial_flush(fd);
serial_close(fd);
packet.type = SR_DF_END;
- sr_session_bus(session_data, &packet);
+ sr_session_send(cb_data, &packet);
}
return TRUE;
}
-static int hw_dev_acquisition_start(int dev_index, gpointer session_data)
+static int hw_dev_acquisition_start(int dev_index, void *cb_data)
{
struct sr_datafeed_packet *packet;
struct sr_datafeed_header *header;
+ struct sr_datafeed_meta_logic meta;
struct sr_dev_inst *sdi;
struct context *ctx;
uint32_t trigger_config[4];
return SR_ERR;
sr_source_add(ctx->serial->fd, G_IO_IN, -1, receive_data,
- session_data);
+ cb_data);
if (!(packet = g_try_malloc(sizeof(struct sr_datafeed_packet)))) {
sr_err("ols: %s: packet malloc failed", __func__);
packet->payload = (unsigned char *)header;
header->feed_version = 1;
gettimeofday(&header->starttime, NULL);
- header->samplerate = ctx->cur_samplerate;
- header->num_logic_probes = NUM_PROBES;
- sr_session_bus(session_data, packet);
+ sr_session_send(cb_data, packet);
+
+ /* Send metadata about the SR_DF_LOGIC packets to come. */
+ packet->type = SR_DF_META_LOGIC;
+ packet->payload = &meta;
+ meta.samplerate = ctx->cur_samplerate;
+ meta.num_probes = NUM_PROBES;
+ sr_session_send(cb_data, packet);
g_free(header);
g_free(packet);
return SR_OK;
}
-static int hw_dev_acquisition_stop(int dev_index, gpointer session_dev_id)
+/* TODO: This stops acquisition on ALL devices, ignoring dev_index. */
+static int hw_dev_acquisition_stop(int dev_index, void *cb_data)
{
struct sr_datafeed_packet packet;
(void)dev_index;
packet.type = SR_DF_END;
- sr_session_bus(session_dev_id, &packet);
+ sr_session_send(cb_data, &packet);
return SR_OK;
}