END_TEST START_TEST(test_analog_unit_to_string_null) { int ret; char *result; struct sr_datafeed_analog analog; struct sr_analog_encoding encoding; struct sr_analog_meaning meaning; struct sr_analog_spec spec; sr_analog_init_(&analog, &encoding, &meaning, &spec, 3); meaning.unit = SR_UNIT_VOLT; meaning.mqflags = SR_MQFLAG_RMS; ret = sr_analog_unit_to_string(NULL, &result); fail_unless(ret == SR_ERR_ARG); ret = sr_analog_unit_to_string(&analog, NULL); fail_unless(ret == SR_ERR_ARG); ret = sr_analog_unit_to_string(NULL, NULL); fail_unless(ret == SR_ERR_ARG); analog.meaning = NULL; ret = sr_analog_unit_to_string(&analog, &result); fail_unless(ret == SR_ERR_ARG); }
END_TEST START_TEST(test_analog_unit_to_string) { int ret; unsigned int i; char *result; struct sr_datafeed_analog analog; struct sr_analog_encoding encoding; struct sr_analog_meaning meaning; struct sr_analog_spec spec; const int u[] = {SR_UNIT_VOLT, SR_UNIT_AMPERE, SR_UNIT_CELSIUS}; const int f[] = {SR_MQFLAG_RMS, 0, 0}; const char *r[] = {"V RMS", "A", "°C"}; sr_analog_init_(&analog, &encoding, &meaning, &spec, 3); for (i = 0; i < ARRAY_SIZE(r); i++) { meaning.unit = u[i]; meaning.mqflags = f[i]; ret = sr_analog_unit_to_string(&analog, &result); fail_unless(ret == SR_OK); fail_unless(result != NULL); fail_unless(!strcmp(result, r[i]), "%s != %s", result, r[i]); g_free(result); } }
static int receive(const struct sr_output *o, const struct sr_datafeed_packet *packet, GString **out) { struct context *ctx; const struct sr_datafeed_analog_old *analog_old; const struct sr_datafeed_analog *analog; struct sr_channel *ch; GSList *l; float *fdata; unsigned int i; int num_channels, c, ret, si, digits; char *number, *suffix; *out = NULL; if (!o || !o->sdi) return SR_ERR_ARG; ctx = o->priv; switch (packet->type) { case SR_DF_FRAME_BEGIN: *out = g_string_new("FRAME-BEGIN\n"); break; case SR_DF_FRAME_END: *out = g_string_new("FRAME-END\n"); break; case SR_DF_ANALOG_OLD: analog_old = packet->payload; fdata = (float *)analog_old->data; *out = g_string_sized_new(512); num_channels = g_slist_length(analog_old->channels); for (si = 0; si < analog_old->num_samples; si++) { for (l = analog_old->channels, c = 0; l; l = l->next, c++) { ch = l->data; g_string_append_printf(*out, "%s: ", ch->name); fancyprint(analog_old->unit, analog_old->mqflags, fdata[si * num_channels + c], *out); } } break; case SR_DF_ANALOG: analog = packet->payload; num_channels = g_slist_length(analog->meaning->channels); if (!(fdata = g_try_malloc( analog->num_samples * num_channels * sizeof(float)))) return SR_ERR_MALLOC; 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; } sr_analog_unit_to_string(analog, &suffix); for (i = 0; i < analog->num_samples; i++) { for (l = analog->meaning->channels, c = 0; l; l = l->next, c++) { ch = l->data; g_string_append_printf(*out, "%s: ", ch->name); number = g_strdup_printf("%.*f", digits, fdata[i * num_channels + c]); g_string_append(*out, number); g_free(number); g_string_append(*out, " "); g_string_append(*out, suffix); g_string_append(*out, "\n"); } } g_free(suffix); break; } return SR_OK; }