]> sigrok.org Git - libsigrok.git/blobdiff - output/common.c
use us instead of µs in periods (VCD can't handle it)
[libsigrok.git] / output / common.c
index adb70e1afc2982ed6e37b13b956150f74abf23c4..39eb9a02a8f63f539cf414bb7db53a2e476ef4fe 100644 (file)
@@ -26,7 +26,7 @@
 /**
  * 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".
+ * 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,
@@ -42,13 +42,13 @@ char *sigrok_samplerate_string(uint64_t samplerate)
                return NULL;
 
        if (samplerate >= GHZ(1))
-               r = snprintf(o, 30, "%"PRIu64" GHz", samplerate / 1000000000);
+               r = snprintf(o, 30, "%" PRIu64 " GHz", samplerate / 1000000000);
        else if (samplerate >= MHZ(1))
-               r = snprintf(o, 30, "%"PRIu64" MHz", samplerate / 1000000);
+               r = snprintf(o, 30, "%" PRIu64 " MHz", samplerate / 1000000);
        else if (samplerate >= KHZ(1))
-               r = snprintf(o, 30, "%"PRIu64" KHz", samplerate / 1000);
+               r = snprintf(o, 30, "%" PRIu64 " kHz", samplerate / 1000);
        else
-               r = snprintf(o, 30, "%"PRIu64" Hz", samplerate);
+               r = snprintf(o, 30, "%" PRIu64 " Hz", samplerate);
 
        if (r < 0) {
                /* Something went wrong... */
@@ -58,3 +58,42 @@ char *sigrok_samplerate_string(uint64_t samplerate)
 
        return o;
 }
+
+
+/**
+ * Convert a numeric samplerate value to the "natural" string representation
+ * of its period.
+ *
+ * E.g. a value of 3000000 would be converted to "3 us", 20000 to "50 ms".
+ *
+ * @param frequency The frequency in Hz.
+ * @return A malloc()ed string representation of the frequency value,
+ *         or NULL upon errors. The caller is responsible to free() the memory.
+ */
+char *sigrok_period_string(uint64_t frequency)
+{
+       char *o;
+       int r;
+
+       o = malloc(30 + 1); /* Enough for a uint64_t as string + " ms". */
+       if (o == NULL)
+               return NULL;
+
+       if (frequency >= GHZ(1))
+               r = snprintf(o, 30, "%" PRIu64 " ns", frequency / 1000000000);
+       else if (frequency >= MHZ(1))
+               r = snprintf(o, 30, "%" PRIu64 " us", frequency / 1000000);
+       else if (frequency >= KHZ(1))
+               r = snprintf(o, 30, "%" PRIu64 " ms", frequency / 1000);
+       else
+               r = snprintf(o, 30, "%" PRIu64 " s", frequency);
+
+       if (r < 0) {
+               /* Something went wrong... */
+               free(o);
+               return NULL;
+       }
+
+       return o;
+}
+