X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=output%2Fcommon.c;h=77914956607b54fa25a98c7ed7f98a85d454e786;hb=5c2d46d1dbfa636fb3cdbeaffdc0e9ca77c66ee1;hp=69338f0835b402c25c34fa022a7018d926471b85;hpb=99c1fc59ed59785d44610ac07556143cb1617f01;p=libsigrok.git diff --git a/output/common.c b/output/common.c index 69338f08..77914956 100644 --- a/output/common.c +++ b/output/common.c @@ -26,19 +26,19 @@ /** * 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, * 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)) @@ -46,7 +46,7 @@ char *sigrok_samplerate_string(uint64_t samplerate) else if (samplerate >= MHZ(1)) 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); @@ -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; +}