X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;ds=inline;f=output%2Fcommon.c;h=77914956607b54fa25a98c7ed7f98a85d454e786;hb=5c2d46d1dbfa636fb3cdbeaffdc0e9ca77c66ee1;hp=1fc5df7d3517f3ce18d0b844c775bf438c6069cb;hpb=38ba2522516b481fa3619bdec56d1e2a4b7a5f45;p=libsigrok.git diff --git a/output/common.c b/output/common.c index 1fc5df7d..77914956 100644 --- a/output/common.c +++ b/output/common.c @@ -32,13 +32,13 @@ * @return A malloc()ed string representation of the samplerate value, * or NULL upon errors. The caller is responsible to free() the memory. */ -char *sigrok_samplerate_string(uint64_t samplerate) +char *sr_samplerate_string(uint64_t samplerate) { char *o; int r; o = malloc(30 + 1); /* Enough for a uint64_t as string + " GHz". */ - if (o == NULL) + if (!o) return NULL; if (samplerate >= GHZ(1)) @@ -58,3 +58,40 @@ 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 *sr_period_string(uint64_t frequency) +{ + char *o; + int r; + + o = malloc(30 + 1); /* Enough for a uint64_t as string + " ms". */ + if (!o) + 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; +}