X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=output%2Fanalog.c;h=d2f28b6b2853bf94d6bb2ad91eea4c750c688900;hb=1953564a96798bc298d1c94eb90c129adbde1c9e;hp=7090d0feb42f49fd7134e17f47fcfeab9e5da3b0;hpb=258eeb77b88852b743e08a751455a2c1965e4db1;p=libsigrok.git diff --git a/output/analog.c b/output/analog.c index 7090d0fe..d2f28b6b 100644 --- a/output/analog.c +++ b/output/analog.c @@ -19,10 +19,19 @@ #include #include +#include #include #include "libsigrok.h" #include "libsigrok-internal.h" -#include + +/* Message logging helpers with driver-specific prefix string. */ +#define DRIVER_LOG_DOMAIN "output/analog: " +#define sr_log(l, s, args...) sr_log(l, DRIVER_LOG_DOMAIN s, ## args) +#define sr_spew(s, args...) sr_spew(DRIVER_LOG_DOMAIN s, ## args) +#define sr_dbg(s, args...) sr_dbg(DRIVER_LOG_DOMAIN s, ## args) +#define sr_info(s, args...) sr_info(DRIVER_LOG_DOMAIN s, ## args) +#define sr_warn(s, args...) sr_warn(DRIVER_LOG_DOMAIN s, ## args) +#define sr_err(s, args...) sr_err(DRIVER_LOG_DOMAIN s, ## args) struct context { int num_enabled_probes; @@ -36,12 +45,13 @@ static int init(struct sr_output *o) struct sr_probe *probe; GSList *l; - sr_spew("output/analog: initializing"); + sr_spew("Initializing output module."); + if (!o || !o->sdi) return SR_ERR_ARG; if (!(ctx = g_try_malloc0(sizeof(struct context)))) { - sr_err("output/analog: Context malloc failed."); + sr_err("Output module context malloc failed."); return SR_ERR_MALLOC; } o->internal = ctx; @@ -91,7 +101,6 @@ static void si_printf(float value, GString *out, char *unitstr) static void fancyprint(int unit, int mqflags, float value, GString *out) { - switch (unit) { case SR_UNIT_VOLT: si_printf(value, out, "V"); @@ -164,6 +173,9 @@ static void fancyprint(int unit, int mqflags, float value, GString *out) * a made-up notation. */ g_string_append(out, " %oA"); break; + case SR_UNIT_CONCENTRATION: + g_string_append_printf(out, "%f ppm", value * 1000000); + break; default: si_printf(value, out, ""); } @@ -174,18 +186,18 @@ static void fancyprint(int unit, int mqflags, float value, GString *out) else if (mqflags & SR_MQFLAG_DC) g_string_append_printf(out, " DC"); g_string_append_c(out, '\n'); - } static GString *receive(struct sr_output *o, const struct sr_dev_inst *sdi, - struct sr_datafeed_packet *packet) + const struct sr_datafeed_packet *packet) { - struct sr_datafeed_analog *analog; + const struct sr_datafeed_analog *analog; struct context *ctx; - float *fdata; + const float *fdata; int i, j; (void)sdi; + if (!o || !o->sdi) return NULL; ctx = o->internal; @@ -202,7 +214,7 @@ static GString *receive(struct sr_output *o, const struct sr_dev_inst *sdi, break; case SR_DF_ANALOG: analog = packet->payload; - fdata = (float *)analog->data; + fdata = (const float *)analog->data; for (i = 0; i < analog->num_samples; i++) { for (j = 0; j < ctx->num_enabled_probes; j++) { g_string_append_printf(ctx->out, "%s: ", @@ -233,7 +245,6 @@ static int cleanup(struct sr_output *o) return SR_OK; } - SR_PRIV struct sr_output_format output_analog = { .id = "analog", .description = "Analog data",