X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=output%2Ftext%2Ftext.c;h=580942238aec1c62bef2bfd51072ff29ec4c56ff;hb=c2fa697afa86a8e6f37bef13acb5b8532714274e;hp=31bf3989eb4e77d5d5ca05e1fafe67dbfa735965;hpb=ec4063b83c9b8a0693b9837787306dd5405e076b;p=libsigrok.git diff --git a/output/text/text.c b/output/text/text.c index 31bf3989..58094223 100644 --- a/output/text/text.c +++ b/output/text/text.c @@ -1,5 +1,5 @@ /* - * This file is part of the sigrok project. + * This file is part of the libsigrok project. * * Copyright (C) 2013 Bert Vermeulen * Copyright (C) 2011 HÃ¥vard Espeland @@ -40,23 +40,27 @@ SR_PRIV void flush_linebufs(struct context *ctx, uint8_t *outbuf) { static int max_probename_len = 0; int len, i; + GSList *l; + char *probe_name; if (ctx->linebuf[0] == 0) return; if (max_probename_len == 0) { /* First time through... */ - for (i = 0; ctx->probelist[i]; i++) { - len = strlen(ctx->probelist[i]); + for (l = ctx->probenames; l; l = l->next) { + probe_name = l->data; + len = strlen(probe_name); if (len > max_probename_len) max_probename_len = len; } } - for (i = 0; ctx->probelist[i]; i++) { + for (i = 0, l = ctx->probenames; l; l = l->next, i++) { + probe_name = l->data; sprintf((char *)outbuf + strlen((const char *)outbuf), "%*s:%s\n", max_probename_len, - ctx->probelist[i], ctx->linebuf + i * ctx->linebuf_len); + probe_name, ctx->linebuf + i * ctx->linebuf_len); } /* Mark trigger with a ^ character. */ @@ -91,15 +95,16 @@ SR_PRIV int init(struct sr_output *o, int default_spl, enum outputmode mode) o->internal = ctx; ctx->num_enabled_probes = 0; + ctx->probenames = NULL; for (l = o->sdi->probes; l; l = l->next) { probe = l->data; if (!probe->enabled) continue; - ctx->probelist[ctx->num_enabled_probes++] = probe->name; + ctx->probenames = g_slist_append(ctx->probenames, probe->name); + ctx->num_enabled_probes++; } - ctx->probelist[ctx->num_enabled_probes] = 0; ctx->unitsize = (ctx->num_enabled_probes + 7) / 8; ctx->line_offset = 0; ctx->spl_cnt = 0; @@ -124,14 +129,12 @@ SR_PRIV int init(struct sr_output *o, int default_spl, enum outputmode mode) snprintf(ctx->header, 511, "%s\n", PACKAGE_STRING); num_probes = g_slist_length(o->sdi->probes); - if (o->sdi->driver || sr_dev_has_option(o->sdi, SR_CONF_SAMPLERATE)) { - if ((ret = o->sdi->driver->config_get(SR_CONF_SAMPLERATE, &gvar, - o->sdi)) != SR_OK) - goto err; + if (sr_config_get(o->sdi->driver, SR_CONF_SAMPLERATE, &gvar, + o->sdi) == SR_OK) { samplerate = g_variant_get_uint64(gvar); + g_variant_unref(gvar); if (!(samplerate_s = sr_samplerate_string(samplerate))) { ret = SR_ERR; - g_variant_unref(gvar); goto err; } snprintf(ctx->header + strlen(ctx->header), @@ -139,7 +142,6 @@ SR_PRIV int init(struct sr_output *o, int default_spl, enum outputmode mode) "Acquisition with %d/%d probes at %s\n", ctx->num_enabled_probes, num_probes, samplerate_s); g_free(samplerate_s); - g_variant_unref(gvar); } ctx->linebuf_len = ctx->samples_per_line * 2 + 4; @@ -154,6 +156,12 @@ SR_PRIV int init(struct sr_output *o, int default_spl, enum outputmode mode) ret = SR_ERR_MALLOC; } + if (mode == MODE_ASCII && + !(ctx->prevsample = g_try_malloc0(num_probes / 8))) { + sr_err("%s: ctx->prevsample malloc failed", __func__); + ret = SR_ERR_MALLOC; + } + err: if (ret != SR_OK) { g_free(ctx->header);