]> sigrok.org Git - libsigrok.git/commitdiff
output: if device has no plugin, don't report samplerate
authorBert Vermeulen <redacted>
Thu, 6 May 2010 02:56:48 +0000 (19:56 -0700)
committerBert Vermeulen <redacted>
Fri, 7 May 2010 21:52:48 +0000 (23:52 +0200)
output/output_gnuplot.c
output/output_text.c
output/output_vcd.c

index 4c887cbcdba61e7aeb5378a80c08b6817c92c4a2..2bc19b399b631ee42f6d4bcf92d75c8f0bfbad49 100644 (file)
@@ -34,11 +34,14 @@ struct context {
 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 */
@@ -51,7 +54,7 @@ static int init(struct output *o)
        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)
@@ -74,11 +77,17 @@ static int init(struct output *o)
                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';
@@ -90,10 +99,7 @@ static int init(struct output *o)
        /* 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. */
 
index 82487df01232b99c2873c59dc371aae92f16a352..05a368f056d4b0a6718fdb8a1e3ed0b290dd898e 100644 (file)
@@ -100,17 +100,25 @@ static int init(struct output *o, int default_spl)
        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);
index a147f5a962a71056ee36b48d169f27962b2dfa23..fdb27ccc5f1f123fede21c1250f450a0d6b33cf7 100644 (file)
@@ -34,8 +34,7 @@ struct context {
 
 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\
@@ -43,6 +42,10 @@ $upscope $end\n\
 $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 */
@@ -54,7 +57,7 @@ static int init(struct output *o)
        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)
@@ -76,12 +79,19 @@ static int init(struct output *o)
        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';
@@ -93,12 +103,9 @@ static int init(struct output *o)
 
        /* 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;