const char *gnuplot_header = "\
# Sample data in space-separated columns format usable by gnuplot\n\
#\n\
-# Generated by: %s on %s\n\
-# Comment: Acquisition with %d/%d probes at %s\n\
+# Generated by: %s on %s\n%s\
# Timescale: %d %s\n\
# Column assignment:\n%s\n";
+const char *gnuplot_header_comment = "\
+# Comment: Acquisition with %d/%d probes at %s\n";
+
+
static int init(struct output *o)
{
/* Maximum header length */
unsigned int i;
int b, num_probes;
char *c, *samplerate_s;
- char wbuf[1000];
+ char wbuf[1000], comment[128];
ctx = malloc(sizeof(struct context));
if (ctx == NULL)
return SIGROK_ERR_MALLOC;
num_probes = g_slist_length(o->device->probes);
/* 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));
-
- if ((samplerate_s = sigrok_samplerate_string(samplerate)) == NULL)
- return -1; /* FIXME */
+ if (o->device->plugin) {
+ samplerate = *((uint64_t *) o->device->plugin->get_device_info(
+ o->device->plugin_index, DI_CUR_SAMPLERATE));
+ if ((samplerate_s = sigrok_samplerate_string(samplerate)) == NULL)
+ return SIGROK_ERR;
+ snprintf(comment, 127, gnuplot_header_comment, ctx->num_enabled_probes,
+ num_probes, samplerate_s);
+ free(samplerate_s);
+ }
+ else
+ comment[0] = '\0';
/* Columns / channels */
wbuf[0] = '\0';
/* TODO: date: File or signals? Make y/n configurable. */
/* TODO: Timescale */
b = snprintf(ctx->header, MAX_HEADER_LEN, gnuplot_header,
- PACKAGE_STRING, "TODO", ctx->num_enabled_probes,
- num_probes, samplerate_s, 1, "ns", (char *)&wbuf);
-
- free(samplerate_s);
+ PACKAGE_STRING, "TODO", comment, 1, "ns", (char *)&wbuf);
/* TODO: Handle snprintf errors. */
else
ctx->samples_per_line = default_spl;
- ctx->header = malloc(512);
- 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_s = sigrok_samplerate_string(samplerate)) == NULL)
- return -1; /* FIXME */
- snprintf(ctx->header + strlen(ctx->header), 512, "%s\n", samplerate_s);
- free(samplerate_s);
+ if (o->device->plugin) {
+ ctx->header = malloc(512);
+ 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_s = sigrok_samplerate_string(samplerate)) == NULL)
+ return -1; /* FIXME */
+ snprintf(ctx->header + strlen(ctx->header), 512, "%s\n", samplerate_s);
+ free(samplerate_s);
+ } else {
+ /*
+ * device has no plugin: this is just a dummy device, the data
+ * comes from a file.
+ */
+ ctx->header = NULL;
+ }
ctx->linebuf_len = ctx->samples_per_line * 2;
ctx->linebuf = calloc(1, num_probes * ctx->linebuf_len);
const char *vcd_header = "\
$date\n %s\n$end\n\
-$version\n %s\n$end\n\
-$comment\n Acquisition with %d/%d probes at %s\n$end\n\
+$version\n %s\n$end\n%s\
$timescale\n %i %s\n$end\n\
$scope module %s $end\n\
%s\
$enddefinitions $end\n\
$dumpvars\n";
+const char *vcd_header_comment = "\
+$comment\n Acquisition with %d/%d probes at %s\n$end\n";
+
+
static int init(struct output *o)
{
/* Maximum header length */
uint64_t samplerate;
int i, b, num_probes;
char *c, *samplerate_s;
- char wbuf[1000];
+ char wbuf[1000], comment[128];
ctx = malloc(sizeof(struct context));
if (ctx == NULL)
if (ctx->header == NULL)
return SIGROK_ERR_MALLOC;
num_probes = g_slist_length(o->device->probes);
- /* 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));
- if ((samplerate_s = sigrok_samplerate_string(samplerate)) == NULL)
- return -1; /* FIXME */
+ if (o->device->plugin) {
+ /* 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));
+ if ((samplerate_s = sigrok_samplerate_string(samplerate)) == NULL)
+ return SIGROK_ERR;
+ snprintf(comment, 127, vcd_header_comment, ctx->num_enabled_probes,
+ num_probes, samplerate_s);
+ free(samplerate_s);
+ }
+ else
+ comment[0] = '\0';
/* 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,
- samplerate_s, 1, "ns", PACKAGE, (char *)&wbuf);
+ PACKAGE_STRING, comment, 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;