output/output_text.c \
output/output_vcd.c \
output/output_gnuplot.c \
+ output/common.c \
output/output.c
libsigrok_la_LIBADD = $(LIBOBJS)
--- /dev/null
+/*
+ * This file is part of the sigrok project.
+ *
+ * Copyright (C) 2010 Uwe Hermann <uwe@hermann-uwe.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sigrok.h>
+
+/**
+ * Convert a numeric samplerate value to its "natural" string representation.
+ *
+ * E.g. a value of 3000000 would be converted to "3 MHz", 20000 to "20 KHz".
+ *
+ * @param samplerate The samplerate in Hz.
+ * @return A malloc()ed string representation of the samplerate value,
+ * or NULL upon errors. The caller is responsible to free() the memory.
+ */
+char *sigrok_samplerate_string(uint64_t samplerate)
+{
+ char *o;
+ int r;
+
+ o = malloc(30 + 1); /* Enough for a uint64_t as string + " GHz". */
+ if (o == NULL)
+ return NULL;
+
+ if (samplerate >= GHZ(1))
+ r = snprintf(o, 30, "%"PRIu64" GHz", samplerate / 1000000000);
+ else if (samplerate >= MHZ(1))
+ r = snprintf(o, 30, "%"PRIu64" MHz", samplerate / 1000000);
+ else if (samplerate >= KHZ(1))
+ r = snprintf(o, 30, "%"PRIu64" KHz", samplerate / 1000);
+ else
+ r = snprintf(o, 30, "%"PRIu64" Hz", samplerate);
+
+ if (r < 0) {
+ /* Something went wrong... */
+ free(o);
+ return NULL;
+ }
+
+ return o;
+}
GSList *l;
uint64_t samplerate;
int i, b, num_probes;
- char *c;
- char sbuf[10], wbuf[1000];
+ char *c, *samplerate_s;
+ char wbuf[1000];
ctx = malloc(sizeof(struct context));
if (ctx == NULL)
/* TODO: Handle num_probes == 0, too many probes, etc. */
samplerate = *((uint64_t *) o->device->plugin->get_device_info(
o->device->plugin_index, DI_CUR_SAMPLERATE));
-
- /* Samplerate string */
- if (samplerate >= GHZ(1))
- snprintf(sbuf, 10, "%"PRIu64" GHz", samplerate / 1000000000);
- else if (samplerate >= MHZ(1))
- snprintf(sbuf, 10, "%"PRIu64" MHz", samplerate / 1000000);
- else if (samplerate >= KHZ(1))
- snprintf(sbuf, 10, "%"PRIu64" KHz", samplerate / 1000);
- else
- snprintf(sbuf, 10, "%"PRIu64" Hz", samplerate);
+
+ if ((samplerate_s = sigrok_samplerate_string(samplerate)) == NULL)
+ return -1; // FIXME
/* Columns / channels */
wbuf[0] = '\0';
/* TODO: Timescale */
b = snprintf(ctx->header, MAX_HEADER_LEN, gnuplot_header,
PACKAGE_STRING, "TODO", ctx->num_enabled_probes,
- num_probes, (char *)&sbuf, 1, "ns", (char *)&wbuf);
+ num_probes, samplerate_s, 1, "ns", (char *)&wbuf);
+
+ free(samplerate_s);
/* TODO: Handle snprintf errors. */
*/
#include <stdint.h>
-
#include "sigrok.h"
-
-
static int init(struct output *o)
{
return 0;
#include <stdio.h>
#include <string.h>
#include <glib.h>
-#include "sigrok.h"
+#include <sigrok.h>
#define DEFAULT_BPL_BIN 64
#define DEFAULT_BPL_HEX 256
GSList *l;
uint64_t samplerate;
int num_probes;
+ char *samplerate_s;
ctx = malloc(sizeof(struct context));
o->internal = ctx;
num_probes = g_slist_length(o->device->probes);
samplerate = *((uint64_t *) o->device->plugin->get_device_info(o->device->plugin_index, DI_CUR_SAMPLERATE));
snprintf(ctx->header, 512, "Acquisition with %d/%d probes at ", ctx->num_enabled_probes, num_probes);
- if(samplerate >= GHZ(1))
- snprintf(ctx->header + strlen(ctx->header), 512, "%"PRIu64" GHz", samplerate / 1000000000);
- else if(samplerate >= MHZ(1))
- snprintf(ctx->header + strlen(ctx->header), 512, "%"PRIu64" MHz", samplerate / 1000000);
- else if(samplerate >= KHZ(1))
- snprintf(ctx->header + strlen(ctx->header), 512, "%"PRIu64" KHz", samplerate / 1000);
- else
- snprintf(ctx->header + strlen(ctx->header), 512, "%"PRIu64" Hz", samplerate);
- snprintf(ctx->header + strlen(ctx->header), 512, "\n");
+
+ if ((samplerate_s = sigrok_samplerate_string(samplerate)) == NULL)
+ return -1; // FIXME
+ snprintf(ctx->header + strlen(ctx->header), 512, "%s\n", samplerate_s);
+ free(samplerate_s);
ctx->linebuf_len = ctx->samples_per_line * 2;
ctx->linebuf = calloc(1, num_probes * ctx->linebuf_len);
GSList *l;
uint64_t samplerate;
int i, b, num_probes;
- char *c;
- char sbuf[10], wbuf[1000];
+ char *c, *samplerate_s;
+ char wbuf[1000];
ctx = malloc(sizeof(struct context));
if (ctx == NULL)
samplerate = *((uint64_t *) o->device->plugin->get_device_info(
o->device->plugin_index, DI_CUR_SAMPLERATE));
- /* Samplerate string */
- if (samplerate >= GHZ(1))
- snprintf(sbuf, 10, "%"PRIu64" GHz", samplerate / 1000000000);
- else if (samplerate >= MHZ(1))
- snprintf(sbuf, 10, "%"PRIu64" MHz", samplerate / 1000000);
- else if (samplerate >= KHZ(1))
- snprintf(sbuf, 10, "%"PRIu64" KHz", samplerate / 1000);
- else
- snprintf(sbuf, 10, "%"PRIu64" Hz", samplerate);
+ if ((samplerate_s = sigrok_samplerate_string(samplerate)) == NULL)
+ return -1; // FIXME
/* Wires / channels */
wbuf[0] = '\0';
/* TODO: date: File or signals? Make y/n configurable. */
b = snprintf(ctx->header, MAX_HEADER_LEN, vcd_header, "TODO: Date",
PACKAGE_STRING, ctx->num_enabled_probes, num_probes,
- (char *)&sbuf, 1, "ns", PACKAGE, (char *)&wbuf);
+ samplerate_s, 1, "ns", PACKAGE, (char *)&wbuf);
/* TODO: Handle snprintf errors. */
+ free(samplerate_s);
+
ctx->prevbits = calloc(sizeof(int), num_probes);
if (ctx->prevbits == NULL)
return SIGROK_ERR_MALLOC;
char *data_in, uint64_t length_in, char **data_out,
uint64_t *length_out);
+char *sigrok_samplerate_string(uint64_t samplerate);
+
/*--- analyzer.c ------------------------------------------------------------*/
struct analyzer {