From: Bert Vermeulen Date: Wed, 17 Sep 2014 20:04:22 +0000 (+0200) Subject: input/chronovu_la8: Fix broken I/O loop. X-Git-Tag: libsigrok-0.4.0~992 X-Git-Url: https://sigrok.org/gitweb/?p=libsigrok.git;a=commitdiff_plain;h=04c2f202f26f8875f4c52a48dffc320498d2c0e0 input/chronovu_la8: Fix broken I/O loop. --- diff --git a/src/input/chronovu_la8.c b/src/input/chronovu_la8.c index 058d8dd5..a56d3485 100644 --- a/src/input/chronovu_la8.c +++ b/src/input/chronovu_la8.c @@ -92,33 +92,33 @@ static int receive(const struct sr_input *in, GString *buf) num_channels = g_slist_length(in->sdi->channels); - 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->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); + } packet.type = SR_DF_LOGIC; packet.payload = &logic; logic.unitsize = (num_channels + 7) / 8; - logic.data = in->buf->str; /* Cut off at multiple of unitsize. */ chunk_size = in->buf->len / logic.unitsize * logic.unitsize; chunk = 0; for (i = 0; i < chunk_size; i += chunk) { - chunk = MAX(MAX_CHUNK_SIZE, chunk_size - i); + logic.data = in->buf->str + i; + chunk = MIN(MAX_CHUNK_SIZE, chunk_size - i); logic.length = chunk; sr_session_send(in->sdi, &packet); } - - if (in->buf->len > chunk_size) - g_string_erase(in->buf, 0, in->buf->len - chunk_size); + g_string_erase(in->buf, 0, chunk_size); return SR_OK; }