#define LOG_PREFIX "output/analog"
+#define BIN_TO_DEC_DIGITS (log(2) / log(10))
+
struct context {
int num_enabled_channels;
GPtrArray *channellist;
g_string_append_printf(*out, "%f",
g_variant_get_double(src->data));
} else if (srci->datatype == SR_T_UINT64) {
- g_string_append_printf(*out, "%" PRIu64,
+ g_string_append_printf(*out, "%"
+ G_GUINT64_FORMAT,
g_variant_get_uint64(src->data));
+ } else if (srci->datatype == SR_T_STRING) {
+ g_string_append_printf(*out, "%s",
+ g_variant_get_string(src->data, NULL));
}
g_string_append(*out, "\n");
}
if ((ret = sr_analog_to_float(analog, fdata)) != SR_OK)
return ret;
*out = g_string_sized_new(512);
- if (analog->encoding->is_digits_decimal) {
- if (ctx->digits == DIGITS_ALL)
- digits = analog->encoding->digits;
- else
- digits = analog->spec->spec_digits;
- } else {
- /* TODO we don't know how to print by number of bits yet. */
- digits = 6;
- }
+ if (ctx->digits == DIGITS_ALL)
+ digits = analog->encoding->digits;
+ else
+ digits = analog->spec->spec_digits;
+ if (!analog->encoding->is_digits_decimal)
+ digits = copysign(ceil(abs(digits) * BIN_TO_DEC_DIGITS), digits);
gboolean si_friendly = sr_analog_si_prefix_friendly(analog->meaning->unit);
sr_analog_unit_to_string(analog, &suffix);
for (i = 0; i < analog->num_samples; i++) {
ctx = o->priv;
g_ptr_array_free(ctx->channellist, 1);
- g_variant_unref(options[0].def);
- g_slist_free_full(options[0].values, (GDestroyNotify)g_variant_unref);
+ if (options[0].def) {
+ g_variant_unref(options[0].def);
+ options[0].def = NULL;
+ }
+ if (options[0].values) {
+ g_slist_free_full(options[0].values, (GDestroyNotify)g_variant_unref);
+ options[0].values = NULL;
+ }
g_free(ctx->fdata);
g_free(ctx);
o->priv = NULL;
SR_PRIV struct sr_output_module output_analog = {
.id = "analog",
.name = "Analog",
- .desc = "Analog data and types",
+ .desc = "ASCII analog data values and units",
.exts = NULL,
.flags = 0,
.options = get_options,