- struct sr_probe *probe;
- GSList *l;
- uint64_t samplerate;
- unsigned int i;
- int b, num_probes;
- char *c, *frequency_s;
- char wbuf[1000], comment[128];
- time_t t;
-
- if (!(ctx = g_try_malloc0(sizeof(struct context)))) {
- sr_err("gnuplot out: %s: ctx malloc failed", __func__);
- return SR_ERR_MALLOC;
- }
-
- if (!(ctx->header = g_try_malloc0(MAX_HEADER_LEN + 1))) {
- g_free(ctx);
- sr_err("gnuplot out: %s: ctx->header malloc failed", __func__);
- return SR_ERR_MALLOC;
- }
-
- o->internal = ctx;
- ctx->num_enabled_probes = 0;
- for (l = o->dev->probes; l; l = l->next) {
- probe = l->data;
- if (!probe->enabled)
- continue;
- ctx->probelist[ctx->num_enabled_probes++] = probe->name;
- }
- ctx->probelist[ctx->num_enabled_probes] = 0;
-// ctx->unitsize = (ctx->num_enabled_probes + 7) / 8;
- ctx->unitsize = sizeof(struct sr_analog_sample) +
- (ctx->num_enabled_probes * sizeof(struct sr_analog_probe));
-
- num_probes = g_slist_length(o->dev->probes);
- comment[0] = '\0';
- if (o->dev->plugin && sr_dev_has_hwcap(o->dev, SR_HWCAP_SAMPLERATE)) {
- samplerate = *((uint64_t *) o->dev->plugin->get_dev_info(
- o->dev->plugin_index, SR_DI_CUR_SAMPLERATE));
- if (!(frequency_s = sr_samplerate_string(samplerate))) {
- g_free(ctx->header);
- g_free(ctx);
- return SR_ERR;
- }
- snprintf(comment, 127, gnuplot_header_comment,
- ctx->num_enabled_probes, num_probes, frequency_s);
- g_free(frequency_s);
- }
-
- /* Columns / channels */
- wbuf[0] = '\0';
- for (i = 0; i < ctx->num_enabled_probes; i++) {
- c = (char *)&wbuf + strlen((char *)&wbuf);
- sprintf(c, "# %d\t\t%s\n", i + 1, ctx->probelist[i]);
- }
-
- if (!(frequency_s = sr_period_string(samplerate))) {
- g_free(ctx->header);
- g_free(ctx);
- return SR_ERR;
- }
- t = time(NULL);
- b = snprintf(ctx->header, MAX_HEADER_LEN, gnuplot_header,
- PACKAGE_STRING, ctime(&t), comment, frequency_s,
- (char *)&wbuf);
- g_free(frequency_s);
-
- if (b < 0) {
- g_free(ctx->header);
- g_free(ctx);
- return SR_ERR;
- }
-
- return 0;
-}
-
-static int analog_data(struct sr_output *o, char *data_in, uint64_t length_in,
- char **data_out, uint64_t *length_out)
-{
- struct context *ctx;
- unsigned int max_linelen, outsize, p, /* curbit, */ i;
-// uint64_t sample;
- static uint64_t samplecount = 0;
- char *outbuf, *c;
- struct sr_analog_sample *sample;