X-Git-Url: https://sigrok.org/gitweb/?p=libsigrok.git;a=blobdiff_plain;f=output%2Fanalog.c;h=286c50be9768d2c37ae58fddaed081acde25df05;hp=e7e475fc3126ec6219ddf509c76ae02d6e77f74b;hb=ba7dd8bbb8168cba432a844259a3e239aa5f36d7;hpb=17f63de642c3cb613f91eabd2e19ebed6785f755 diff --git a/output/analog.c b/output/analog.c index e7e475fc..286c50be 100644 --- a/output/analog.c +++ b/output/analog.c @@ -24,24 +24,17 @@ #include "libsigrok.h" #include "libsigrok-internal.h" -/* 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) +#define LOG_PREFIX "output/analog" struct context { - int num_enabled_probes; - GPtrArray *probelist; + int num_enabled_channels; + GPtrArray *channellist; }; static int init(struct sr_output *o) { struct context *ctx; - struct sr_probe *probe; + struct sr_channel *ch; GSList *l; sr_spew("Initializing output module."); @@ -55,14 +48,14 @@ static int init(struct sr_output *o) } o->internal = ctx; - /* Get the number of probes and their names. */ - ctx->probelist = g_ptr_array_new(); - for (l = o->sdi->probes; l; l = l->next) { - probe = l->data; - if (!probe || !probe->enabled) + /* Get the number of channels and their names. */ + ctx->channellist = g_ptr_array_new(); + for (l = o->sdi->channels; l; l = l->next) { + ch = l->data; + if (!ch || !ch->enabled) continue; - g_ptr_array_add(ctx->probelist, probe->name); - ctx->num_enabled_probes++; + g_ptr_array_add(ctx->channellist, ch->name); + ctx->num_enabled_channels++; } return SR_OK; @@ -99,89 +92,117 @@ 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"); - break; - case SR_UNIT_AMPERE: - si_printf(value, out, "A"); - break; - case SR_UNIT_OHM: - si_printf(value, out, ""); - g_string_append_unichar(out, 0x2126); - break; - case SR_UNIT_FARAD: - si_printf(value, out, "F"); - break; - case SR_UNIT_KELVIN: - si_printf(value, out, "K"); - break; - case SR_UNIT_CELSIUS: - si_printf(value, out, ""); - g_string_append_unichar(out, 0x00b0); - g_string_append_c(out, 'C'); - break; - case SR_UNIT_FAHRENHEIT: - si_printf(value, out, ""); - g_string_append_unichar(out, 0x00b0); - g_string_append_c(out, 'F'); - break; - case SR_UNIT_HERTZ: - si_printf(value, out, "Hz"); - break; - case SR_UNIT_PERCENTAGE: - g_string_append_printf(out, "%f%%", value); - break; - case SR_UNIT_BOOLEAN: - if (value > 0) - g_string_append_printf(out, "TRUE"); - else - g_string_append_printf(out, "FALSE"); - break; - case SR_UNIT_SECOND: - si_printf(value, out, "s"); - break; - case SR_UNIT_SIEMENS: - si_printf(value, out, "S"); - break; - case SR_UNIT_DECIBEL_MW: - si_printf(value, out, "dBu"); - break; - case SR_UNIT_DECIBEL_VOLT: - si_printf(value, out, "dBV"); - break; - case SR_UNIT_DECIBEL_SPL: - if (mqflags & SR_MQFLAG_SPL_FREQ_WEIGHT_A) - si_printf(value, out, "dB(A)"); - else if (mqflags & SR_MQFLAG_SPL_FREQ_WEIGHT_C) - si_printf(value, out, "dB(C)"); - else if (mqflags & SR_MQFLAG_SPL_FREQ_WEIGHT_Z) - si_printf(value, out, "dB(Z)"); - else - /* No frequency weighting, or non-standard "flat" */ - si_printf(value, out, "dB(SPL)"); - if (mqflags & SR_MQFLAG_SPL_TIME_WEIGHT_S) - g_string_append(out, " S"); - else if (mqflags & SR_MQFLAG_SPL_TIME_WEIGHT_F) - g_string_append(out, " F"); - if (mqflags & SR_MQFLAG_SPL_LAT) - g_string_append(out, " LAT"); - else if (mqflags & SR_MQFLAG_SPL_PCT_OVER_ALARM) - /* Not a standard function for SLMs, so this is - * 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, ""); + case SR_UNIT_VOLT: + si_printf(value, out, "V"); + break; + case SR_UNIT_AMPERE: + si_printf(value, out, "A"); + break; + case SR_UNIT_OHM: + si_printf(value, out, ""); + g_string_append_unichar(out, 0x2126); + break; + case SR_UNIT_FARAD: + si_printf(value, out, "F"); + break; + case SR_UNIT_KELVIN: + si_printf(value, out, "K"); + break; + case SR_UNIT_CELSIUS: + si_printf(value, out, ""); + g_string_append_unichar(out, 0x00b0); + g_string_append_c(out, 'C'); + break; + case SR_UNIT_FAHRENHEIT: + si_printf(value, out, ""); + g_string_append_unichar(out, 0x00b0); + g_string_append_c(out, 'F'); + break; + case SR_UNIT_HERTZ: + si_printf(value, out, "Hz"); + break; + case SR_UNIT_PERCENTAGE: + g_string_append_printf(out, "%f %%", value); + break; + case SR_UNIT_BOOLEAN: + if (value > 0) + g_string_append_printf(out, "TRUE"); + else + g_string_append_printf(out, "FALSE"); + break; + case SR_UNIT_SECOND: + si_printf(value, out, "s"); + break; + case SR_UNIT_SIEMENS: + si_printf(value, out, "S"); + break; + case SR_UNIT_DECIBEL_MW: + si_printf(value, out, "dBu"); + break; + case SR_UNIT_DECIBEL_VOLT: + si_printf(value, out, "dBV"); + break; + case SR_UNIT_DECIBEL_SPL: + if (mqflags & SR_MQFLAG_SPL_FREQ_WEIGHT_A) + si_printf(value, out, "dB(A)"); + else if (mqflags & SR_MQFLAG_SPL_FREQ_WEIGHT_C) + si_printf(value, out, "dB(C)"); + else if (mqflags & SR_MQFLAG_SPL_FREQ_WEIGHT_Z) + si_printf(value, out, "dB(Z)"); + else + /* No frequency weighting, or non-standard "flat" */ + si_printf(value, out, "dB(SPL)"); + if (mqflags & SR_MQFLAG_SPL_TIME_WEIGHT_S) + g_string_append(out, " S"); + else if (mqflags & SR_MQFLAG_SPL_TIME_WEIGHT_F) + g_string_append(out, " F"); + if (mqflags & SR_MQFLAG_SPL_LAT) + g_string_append(out, " LAT"); + else if (mqflags & SR_MQFLAG_SPL_PCT_OVER_ALARM) + /* Not a standard function for SLMs, so this is + * a made-up notation. */ + g_string_append(out, " %oA"); + break; + case SR_UNIT_CONCENTRATION: + g_string_append_printf(out, "%f ppm", value * 1000000); + break; + case SR_UNIT_REVOLUTIONS_PER_MINUTE: + si_printf(value, out, "RPM"); + break; + case SR_UNIT_VOLT_AMPERE: + si_printf(value, out, "VA"); + break; + case SR_UNIT_WATT: + si_printf(value, out, "W"); + break; + case SR_UNIT_WATT_HOUR: + si_printf(value, out, "Wh"); + break; + default: + si_printf(value, out, ""); + break; } - if ((mqflags & (SR_MQFLAG_AC | SR_MQFLAG_DC)) == (SR_MQFLAG_AC | SR_MQFLAG_DC)) - g_string_append_printf(out, " AC+DC"); - else if (mqflags & SR_MQFLAG_AC) + + if (mqflags & SR_MQFLAG_AC) g_string_append_printf(out, " AC"); - else if (mqflags & SR_MQFLAG_DC) + if (mqflags & SR_MQFLAG_DC) g_string_append_printf(out, " DC"); + if (mqflags & SR_MQFLAG_RMS) + g_string_append_printf(out, " RMS"); + if (mqflags & SR_MQFLAG_DIODE) + g_string_append_printf(out, " DIODE"); + if (mqflags & SR_MQFLAG_HOLD) + g_string_append_printf(out, " HOLD"); + if (mqflags & SR_MQFLAG_MAX) + g_string_append_printf(out, " MAX"); + if (mqflags & SR_MQFLAG_MIN) + g_string_append_printf(out, " MIN"); + if (mqflags & SR_MQFLAG_AUTORANGE) + g_string_append_printf(out, " AUTO"); + if (mqflags & SR_MQFLAG_RELATIVE) + g_string_append_printf(out, " REL"); + if (mqflags & SR_MQFLAG_AVG) + g_string_append_printf(out, " AVG"); g_string_append_c(out, '\n'); } @@ -189,7 +210,7 @@ static int receive(struct sr_output *o, const struct sr_dev_inst *sdi, const struct sr_datafeed_packet *packet, GString **out) { const struct sr_datafeed_analog *analog; - struct sr_probe *probe; + struct sr_channel *ch; GSList *l; const float *fdata; int i, p; @@ -212,9 +233,9 @@ static int receive(struct sr_output *o, const struct sr_dev_inst *sdi, fdata = (const float *)analog->data; *out = g_string_sized_new(512); for (i = 0; i < analog->num_samples; i++) { - for (l = analog->probes, p = 0; l; l = l->next, p++) { - probe = l->data; - g_string_append_printf(*out, "%s: ", probe->name); + for (l = analog->channels, p = 0; l; l = l->next, p++) { + ch = l->data; + g_string_append_printf(*out, "%s: ", ch->name); fancyprint(analog->unit, analog->mqflags, fdata[i + p], *out); } @@ -233,7 +254,7 @@ static int cleanup(struct sr_output *o) return SR_ERR_ARG; ctx = o->internal; - g_ptr_array_free(ctx->probelist, 1); + g_ptr_array_free(ctx->channellist, 1); g_free(ctx); o->internal = NULL;