const char *pd;
const char *pd_id;
int type;
- const char *class;
+ const char *class_;
int class_idx;
const char *outfile;
int outfd;
const struct sr_datafeed_packet *packet, void *cb_data)
{
static int samplecnt = 0;
+ static gboolean start_sent;
+
const struct sr_datafeed_logic *logic;
struct srd_session *sess;
+ const struct sr_datafeed_meta *meta;
+ struct sr_config *src;
+ GSList *l;
GVariant *gvar;
uint64_t samplerate;
+ int ret;
int num_samples;
struct sr_dev_driver *driver;
driver = sr_dev_inst_driver_get(sdi);
switch (packet->type) {
+ case SR_DF_META:
+ DBG("Received SR_DF_META");
+ meta = packet->payload;
+ for (l = meta->config; l; l = l->next) {
+ src = l->data;
+ switch (src->key) {
+ case SR_CONF_SAMPLERATE:
+ samplerate = g_variant_get_uint64(src->data);
+ ret = srd_session_metadata_set(sess,
+ SRD_CONF_SAMPLERATE,
+ g_variant_new_uint64(samplerate));
+ if (ret != SRD_OK)
+ ERR("Setting samplerate failed (meta)");
+ break;
+ default:
+ /* EMPTY */
+ break;
+ }
+ }
+ break;
case SR_DF_HEADER:
DBG("Received SR_DF_HEADER");
if (sr_config_get(driver, sdi, NULL, SR_CONF_SAMPLERATE,
&gvar) != SR_OK) {
- ERR("Getting samplerate failed");
+ DBG("Getting samplerate failed (SR_DF_HEADER)");
break;
}
samplerate = g_variant_get_uint64(gvar);
g_variant_unref(gvar);
- if (srd_session_metadata_set(sess, SRD_CONF_SAMPLERATE,
- g_variant_new_uint64(samplerate)) != SRD_OK) {
- ERR("Setting samplerate failed");
- break;
- }
- if (srd_session_start(sess) != SRD_OK) {
- ERR("Session start failed");
- break;
- }
+ ret = srd_session_metadata_set(sess, SRD_CONF_SAMPLERATE,
+ g_variant_new_uint64(samplerate));
+ if (ret != SRD_OK)
+ ERR("Setting samplerate failed (header)");
break;
case SR_DF_LOGIC:
+ DBG("Received SR_DF_LOGIC");
+ if (!start_sent) {
+ if (srd_session_start(sess) != SRD_OK) {
+ ERR("Session start failed");
+ break;
+ }
+ start_sent = TRUE;
+ }
logic = packet->payload;
num_samples = logic->length / logic->unitsize;
DBG("Received SR_DF_LOGIC (%"PRIu64" bytes, unitsize = %d).",
/* Resolve selected decoder's class index, so we can match. */
dec = srd_decoder_get_by_id(pd->name);
- if (op->class) {
+ if (op->class_) {
if (op->type == SRD_OUTPUT_ANN)
l = dec->annotations;
else if (op->type == SRD_OUTPUT_BINARY)
idx = 0;
while (l) {
decoder_class = l->data;
- if (!strcmp(decoder_class[0], op->class)) {
+ if (!strcmp(decoder_class[0], op->class_)) {
op->class_idx = idx;
break;
}
}
if (op->class_idx == -1) {
ERR("Output class '%s' not found in decoder %s.",
- op->class, pd->name);
+ op->class_, pd->name);
return FALSE;
}
- DBG("Class %s index is %d", op->class, op->class_idx);
+ DBG("Class %s index is %d", op->class_, op->class_idx);
}
sr_session_start(sr_sess);
op->pd = NULL;
op->pd_id = NULL;
op->type = -1;
- op->class = NULL;
+ op->class_ = NULL;
op->class_idx = -1;
op->outfd = 1;
usage(NULL);
}
if (opstr[2])
- op->class = g_strdup(opstr[2]);
+ op->class_ = g_strdup(opstr[2]);
g_strfreev(opstr);
break;
case 'f':