X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Finput%2Fvcd.c;h=9d164f9884567e810ad4ff1c51dca2d110ff8562;hb=d0181813315114b88ad38cf276045ee5c311ca3c;hp=d50374ab5382fca90a1a37ea1060b75d9662b421;hpb=66c91e2509e2d995fa0b576104aa5ee04e469f21;p=libsigrok.git diff --git a/src/input/vcd.c b/src/input/vcd.c index d50374ab..9d164f98 100644 --- a/src/input/vcd.c +++ b/src/input/vcd.c @@ -409,8 +409,6 @@ static int init(struct sr_input *in, GHashTable *options) char name[16]; struct context *inc; - inc = g_malloc0(sizeof(struct context)); - num_channels = g_variant_get_int32(g_hash_table_lookup(options, "numchannels")); if (num_channels < 1) { sr_err("Invalid value for numchannels: must be at least 1."); @@ -420,6 +418,7 @@ static int init(struct sr_input *in, GHashTable *options) sr_err("No more than 64 channels supported."); return SR_ERR_ARG; } + inc = in->priv = g_malloc0(sizeof(struct context)); inc->maxchannels = num_channels; inc->downsample = g_variant_get_int32(g_hash_table_lookup(options, "downsample")); @@ -458,7 +457,7 @@ static gboolean have_header(GString *buf) return FALSE; } -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; @@ -477,8 +476,13 @@ static int receive(const struct sr_input *in, GString *buf) /* There was a header in there, but it was malformed. */ return SR_ERR; + in->sdi_ready = TRUE; + /* sdi is ready, notify frontend. */ + 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; @@ -487,6 +491,8 @@ static int receive(const struct sr_input *in, GString *buf) meta.config = g_slist_append(NULL, src); sr_session_send(in->sdi, &packet); sr_config_free(src); + + inc->started = TRUE; } while ((p = g_strrstr_len(in->buf->str, in->buf->len, "\n"))) {