Skip to content

Commit 26db5b2

Browse files
fix csv output issue
1 parent 1070d31 commit 26db5b2

File tree

2 files changed

+38
-9
lines changed

2 files changed

+38
-9
lines changed

DSView/pv/storesession.cpp

+25
Original file line numberDiff line numberDiff line change
@@ -641,6 +641,31 @@ void StoreSession::export_proc(shared_ptr<data::Snapshot> snapshot)
641641
src = sr_config_new(SR_CONF_LIMIT_SAMPLES,
642642
g_variant_new_uint64(snapshot->get_sample_count()));
643643
meta.config = g_slist_append(meta.config, src);
644+
645+
GVariant *gvar;
646+
uint8_t bits;
647+
gvar = _session.get_device()->get_config(NULL, NULL, SR_CONF_UNIT_BITS);
648+
if (gvar != NULL) {
649+
bits = g_variant_get_byte(gvar);
650+
g_variant_unref(gvar);
651+
}
652+
gvar = _session.get_device()->get_config(NULL, NULL, SR_CONF_REF_MIN);
653+
if (gvar != NULL) {
654+
src = sr_config_new(SR_CONF_REF_MIN, gvar);
655+
g_variant_unref(gvar);
656+
} else {
657+
src = sr_config_new(SR_CONF_REF_MIN, g_variant_new_uint32(1));
658+
}
659+
meta.config = g_slist_append(meta.config, src);
660+
gvar = _session.get_device()->get_config(NULL, NULL, SR_CONF_REF_MAX);
661+
if (gvar != NULL) {
662+
src = sr_config_new(SR_CONF_REF_MAX, gvar);
663+
g_variant_unref(gvar);
664+
} else {
665+
src = sr_config_new(SR_CONF_REF_MAX, g_variant_new_uint32((1 << bits) - 1));
666+
}
667+
meta.config = g_slist_append(meta.config, src);
668+
644669
p.type = SR_DF_META;
645670
p.status = SR_PKT_OK;
646671
p.payload = &meta;

libsigrok4DSL/output/csv.c

+13-9
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,10 @@ struct context {
3737
int *channel_unit;
3838
float *channel_scale;
3939
uint16_t *channel_offset;
40-
uint8_t *channel_bits;
4140
double *channel_mmin;
4241
double *channel_mmax;
42+
uint32_t ref_min;
43+
uint32_t ref_max;
4344
uint64_t mask;
4445
uint64_t pre_data;
4546
uint64_t index;
@@ -89,7 +90,6 @@ static int init(struct sr_output *o, GHashTable *options)
8990
ctx->channel_unit = g_malloc(sizeof(int) * ctx->num_enabled_channels);
9091
ctx->channel_scale = g_malloc(sizeof(float) * ctx->num_enabled_channels);
9192
ctx->channel_offset = g_malloc(sizeof(uint16_t) * ctx->num_enabled_channels);
92-
ctx->channel_bits = g_malloc(sizeof(uint8_t) * ctx->num_enabled_channels);
9393
ctx->channel_mmax = g_malloc(sizeof(double) * ctx->num_enabled_channels);
9494
ctx->channel_mmin = g_malloc(sizeof(double) * ctx->num_enabled_channels);
9595

@@ -108,7 +108,6 @@ static int init(struct sr_output *o, GHashTable *options)
108108
(range >= 5000) ? 1000 : 1;
109109
ctx->channel_scale[i] = range / ctx->channel_unit[i];
110110
ctx->channel_offset[i] = ch->hw_offset;
111-
ctx->channel_bits[i] = ch->bits;
112111
ctx->channel_mmax[i] = ch->map_max;
113112
ctx->channel_mmin[i] = ch->map_min;
114113
i++;
@@ -199,7 +198,7 @@ static int receive(const struct sr_output *o, const struct sr_datafeed_packet *p
199198
const struct sr_datafeed_dso *dso;
200199
const struct sr_datafeed_analog *analog;
201200
const struct sr_config *src;
202-
GSList *l;
201+
GSList *l;
203202
struct context *ctx;
204203
int idx;
205204
uint64_t i, j;
@@ -220,7 +219,11 @@ static int receive(const struct sr_output *o, const struct sr_datafeed_packet *p
220219
ctx->samplerate = g_variant_get_uint64(src->data);
221220
else if (src->key == SR_CONF_LIMIT_SAMPLES)
222221
ctx->limit_samples = g_variant_get_uint64(src->data);
223-
}
222+
else if (src->key == SR_CONF_REF_MIN)
223+
ctx->ref_min = g_variant_get_uint32(src->data);
224+
else if (src->key == SR_CONF_REF_MAX)
225+
ctx->ref_max = g_variant_get_uint32(src->data);
226+
}
224227
break;
225228
case SR_DF_LOGIC:
226229
logic = packet->payload;
@@ -261,9 +264,9 @@ static int receive(const struct sr_output *o, const struct sr_datafeed_packet *p
261264
for (j = 0; j < ctx->num_enabled_channels; j++) {
262265
idx = ctx->channel_index[j];
263266
p = dso->data + i * ctx->num_enabled_channels + idx * ((ctx->num_enabled_channels > 1) ? 1 : 0);
264-
g_string_append_printf(*out, "%0.3f", (ctx->channel_offset[j] - *p) *
267+
g_string_append_printf(*out, "%0.5f", (ctx->channel_offset[j] - *p) *
265268
ctx->channel_scale[j] /
266-
((1 << ctx->channel_bits[j]) - 2.0));
269+
(ctx->ref_max - ctx->ref_min));
267270
g_string_append_c(*out, ctx->separator);
268271
}
269272

@@ -285,8 +288,9 @@ static int receive(const struct sr_output *o, const struct sr_datafeed_packet *p
285288
for (j = 0; j < ctx->num_enabled_channels; j++) {
286289
idx = ctx->channel_index[j];
287290
p = analog->data + i * ctx->num_enabled_channels + idx * ((ctx->num_enabled_channels > 1) ? 1 : 0);
288-
g_string_append_printf(*out, "%0.2f",
289-
ctx->channel_mmin[j] + (255.0 - *p) / 255.0 * (ctx->channel_mmax[j] - ctx->channel_mmin[j]));
291+
g_string_append_printf(*out, "%0.5f", (ctx->channel_offset[j] - *p) *
292+
(ctx->channel_mmax[j] - ctx->channel_mmin[j]) /
293+
(ctx->ref_max - ctx->ref_min));
290294
g_string_append_c(*out, ctx->separator);
291295
}
292296

0 commit comments

Comments
 (0)