X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=output%2Fcommon.c;h=ad4720f75c4e30382ed38b15c7600de47407d744;hb=7c17ac6cc4ecc30a1df1848ef3a3e0827351090c;hp=1fc5df7d3517f3ce18d0b844c775bf438c6069cb;hpb=38ba2522516b481fa3619bdec56d1e2a4b7a5f45;p=libsigrok.git diff --git a/output/common.c b/output/common.c index 1fc5df7d..ad4720f7 100644 --- a/output/common.c +++ b/output/common.c @@ -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; +} +