]> sigrok.org Git - libsigrok.git/blobdiff - src/output/csv.c
output/csv: get proper index for input channels
[libsigrok.git] / src / output / csv.c
index c39c29a7378fe9cd935fbaff0f35f2255f548f2a..831208dc6bf367f40a7d088cb7b4360dd56b0076 100644 (file)
@@ -378,11 +378,11 @@ static void process_logic(struct context *ctx,
 
        for (j = ch = 0; ch < ctx->num_logic_channels; j++) {
                if (ctx->channels[j].ch->type == SR_CHANNEL_LOGIC) {
-                       for (i = 0; i <= logic->length - logic->unitsize; i += logic->unitsize) {
-                               sample = logic->data + i;
-                               idx = ctx->channels[ch].ch->index;
+                       for (i = 0; i < num_samples; i++) {
+                               sample = logic->data + i * logic->unitsize;
+                               idx = ctx->channels[j].ch->index;
                                if (ctx->label_do && !ctx->label_names)
-                                       ctx->channels[i].label = "logic";
+                                       ctx->channels[j].label = "logic";
                                ctx->logic_samples[i * ctx->num_logic_channels + ch] = sample[idx / 8] & (1 << (idx % 8));
                        }
                        ch++;
@@ -457,7 +457,7 @@ static void dump_saved_values(struct context *ctx, GString **out)
                        }
 
                        if (ctx->time)
-                               g_string_append_printf(*out, "%lu%s",
+                               g_string_append_printf(*out, "%" PRIu64 "%s",
                                        ctx->sample_time, ctx->value);
 
                        for (j = 0; j < num_channels; j++) {
@@ -608,6 +608,7 @@ static int cleanup(struct sr_output *o)
                g_free((gpointer)ctx->frame);
                g_free((gpointer)ctx->comment);
                g_free((gpointer)ctx->gnuplot);
+               g_free((gpointer)ctx->value);
                g_free(ctx->previous_sample);
                g_free(ctx->channels);
                g_free(o->priv);