X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Finput%2Fchronovu_la8.c;h=727d68e94fa6ad956627dba44527d9fa215fda6a;hb=89da5b3b54d3b87bff49e716c4d2b36080fe7a07;hp=a56d3485c854d6f66ff1fdc22e23eb76ecc78530;hpb=04c2f202f26f8875f4c52a48dffc320498d2c0e0;p=libsigrok.git diff --git a/src/input/chronovu_la8.c b/src/input/chronovu_la8.c index a56d3485..727d68e9 100644 --- a/src/input/chronovu_la8.c +++ b/src/input/chronovu_la8.c @@ -62,7 +62,7 @@ static int init(struct sr_input *in, GHashTable *options) return SR_ERR_ARG; } - in->sdi = sr_dev_inst_new(0, SR_ST_ACTIVE, NULL, NULL, NULL); + in->sdi = sr_dev_inst_new(SR_ST_ACTIVE, NULL, NULL, NULL); in->priv = inc = g_malloc0(sizeof(struct context)); inc->samplerate = g_variant_get_uint64(g_hash_table_lookup(options, "samplerate")); @@ -76,7 +76,7 @@ static int init(struct sr_input *in, GHashTable *options) return SR_OK; } -static int receive(const struct sr_input *in, GString *buf) +static int receive(struct sr_input *in, GString *buf) { struct sr_datafeed_packet packet; struct sr_datafeed_meta meta; @@ -92,16 +92,25 @@ static int receive(const struct sr_input *in, GString *buf) num_channels = g_slist_length(in->sdi->channels); + if (!in->sdi_ready) { + /* sdi is ready, notify frontend. */ + in->sdi_ready = TRUE; + return SR_OK; + } + if (!inc->started) { std_session_send_df_header(in->sdi, LOG_PREFIX); - inc->started = TRUE; - packet.type = SR_DF_META; - packet.payload = &meta; - src = sr_config_new(SR_CONF_SAMPLERATE, g_variant_new_uint64(inc->samplerate)); - meta.config = g_slist_append(NULL, src); - sr_session_send(in->sdi, &packet); - sr_config_free(src); + if (inc->samplerate) { + packet.type = SR_DF_META; + packet.payload = &meta; + src = sr_config_new(SR_CONF_SAMPLERATE, g_variant_new_uint64(inc->samplerate)); + meta.config = g_slist_append(NULL, src); + sr_session_send(in->sdi, &packet); + sr_config_free(src); + } + + inc->started = TRUE; } packet.type = SR_DF_LOGIC; @@ -125,17 +134,17 @@ static int receive(const struct sr_input *in, GString *buf) static int cleanup(struct sr_input *in) { - struct sr_datafeed_packet packet; struct context *inc; + struct sr_datafeed_packet packet; inc = in->priv; + if (!inc) + return SR_OK; if (inc->started) { packet.type = SR_DF_END; sr_session_send(in->sdi, &packet); } - g_free(in->priv); - in->priv = NULL; return SR_OK; }