int num_enabled_channels;
GPtrArray *channellist;
int digits;
+ float *fdata;
};
enum {
g_ptr_array_add(ctx->channellist, ch->name);
ctx->num_enabled_channels++;
}
+ ctx->fdata = NULL;
return SR_OK;
}
-static void si_printf(float value, GString *out, char *unitstr)
+static void si_printf(float value, GString *out, const char *unitstr)
{
float v;
case SR_DF_ANALOG:
analog = packet->payload;
num_channels = g_slist_length(analog->meaning->channels);
- if (!(fdata = g_try_malloc(
+ if (!(fdata = g_try_realloc(ctx->fdata,
analog->num_samples * num_channels * sizeof(float))))
return SR_ERR_MALLOC;
+ ctx->fdata = fdata;
if ((ret = sr_analog_to_float(analog, fdata)) != SR_OK)
return ret;
*out = g_string_sized_new(512);
return SR_OK;
}
-static int cleanup(struct sr_output *o)
-{
- struct context *ctx;
-
- if (!o || !o->sdi)
- return SR_ERR_ARG;
- ctx = o->priv;
-
- g_ptr_array_free(ctx->channellist, 1);
- g_free(ctx);
- o->priv = NULL;
-
- return SR_OK;
-}
-
static struct sr_option options[] = {
{ "digits", "Digits", "Digits to show", NULL, NULL },
ALL_ZERO
return options;
}
+static int cleanup(struct sr_output *o)
+{
+ struct context *ctx;
+
+ if (!o || !o->sdi)
+ return SR_ERR_ARG;
+ 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);
+ g_free(ctx->fdata);
+ g_free(ctx);
+ o->priv = NULL;
+
+ return SR_OK;
+}
+
SR_PRIV struct sr_output_module output_analog = {
.id = "analog",
.name = "Analog",