X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Finput%2Fchronovu_la8.c;h=9c82506a7584a27ce0841b72ae331dc457a6416c;hb=d0181813315114b88ad38cf276045ee5c311ca3c;hp=42700dd17c22076b892a2892a8e90bd75c1f294f;hpb=66c91e2509e2d995fa0b576104aa5ee04e469f21;p=libsigrok.git diff --git a/src/input/chronovu_la8.c b/src/input/chronovu_la8.c index 42700dd1..9c82506a 100644 --- a/src/input/chronovu_la8.c +++ b/src/input/chronovu_la8.c @@ -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,10 +134,12 @@ 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;