X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=output%2Fcommon.c;h=77914956607b54fa25a98c7ed7f98a85d454e786;hb=5c2d46d1dbfa636fb3cdbeaffdc0e9ca77c66ee1;hp=adb70e1afc2982ed6e37b13b956150f74abf23c4;hpb=25e7d9b115e5ea08be2d92ffe286aa1bf95778f4;p=libsigrok.git diff --git a/output/common.c b/output/common.c index adb70e1a..77914956 100644 --- a/output/common.c +++ b/output/common.c @@ -26,29 +26,66 @@ /** * 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)) - 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... */ + free(o); + return NULL; + } + + 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... */