X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=output%2Fcommon.c;h=ad4720f75c4e30382ed38b15c7600de47407d744;hb=7c17ac6cc4ecc30a1df1848ef3a3e0827351090c;hp=adb70e1afc2982ed6e37b13b956150f74abf23c4;hpb=25e7d9b115e5ea08be2d92ffe286aa1bf95778f4;p=libsigrok.git diff --git a/output/common.c b/output/common.c index adb70e1a..ad4720f7 100644 --- a/output/common.c +++ b/output/common.c @@ -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 µs", 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 " µs", 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; +} +