From: Joel Holdsworth Date: Sat, 7 Jul 2012 08:32:00 +0000 (+0100) Subject: sr: Refactored sr_samplerate_string into a more general function: sr_si_string_u64 X-Git-Tag: dsupstream~708 X-Git-Url: https://sigrok.org/gitaction?a=commitdiff_plain;h=4cc9aea15b2d76930f565e810e0520918e2cc7bd;p=libsigrok.git sr: Refactored sr_samplerate_string into a more general function: sr_si_string_u64 --- diff --git a/proto.h b/proto.h index 6536c5a4..e520803c 100644 --- a/proto.h +++ b/proto.h @@ -122,6 +122,7 @@ SR_API struct sr_output_format **sr_output_list(void); /*--- strutil.c -------------------------------------------------------------*/ +SR_API char *sr_si_string_u64(uint64_t x, const char *unit); SR_API char *sr_samplerate_string(uint64_t samplerate); SR_API char *sr_period_string(uint64_t frequency); SR_API char *sr_voltage_string(struct sr_rational *voltage); diff --git a/strutil.c b/strutil.c index 9ad83d7f..8abc556e 100644 --- a/strutil.c +++ b/strutil.c @@ -24,6 +24,52 @@ #include "libsigrok.h" #include "libsigrok-internal.h" +/** + * Convert a numeric value value to its "natural" string representation. + * in SI units + * + * E.g. a value of 3000000, with units set to "W", would be converted + * to "3 MW", 20000 to "20 kW", 31500 would become "31.5 kW". + * + * @param x The value to convert. + * @param unit The unit to append to the string, or NULL if the string + * has no units. + * + * @return A g_try_malloc()ed string representation of the samplerate value, + * or NULL upon errors. The caller is responsible to g_free() the + * memory. + */ +SR_API char *sr_si_string_u64(uint64_t x, const char *unit) +{ + if(unit == NULL) + unit = ""; + + if ((x >= SR_GHZ(1)) && (x % SR_GHZ(1) == 0)) { + return g_strdup_printf("%" PRIu64 " G%s", x / SR_GHZ(1), unit); + } else if ((x >= SR_GHZ(1)) && (x % SR_GHZ(1) != 0)) { + return g_strdup_printf("%" PRIu64 ".%" PRIu64 " G%s", + x / SR_GHZ(1), x % SR_GHZ(1), unit); + } else if ((x >= SR_MHZ(1)) && (x % SR_MHZ(1) == 0)) { + return g_strdup_printf("%" PRIu64 " M%s", + x / SR_MHZ(1), unit); + } else if ((x >= SR_MHZ(1)) && (x % SR_MHZ(1) != 0)) { + return g_strdup_printf("%" PRIu64 ".%" PRIu64 " M%s", + x / SR_MHZ(1), x % SR_MHZ(1), unit); + } else if ((x >= SR_KHZ(1)) && (x % SR_KHZ(1) == 0)) { + return g_strdup_printf("%" PRIu64 " k%s", + x / SR_KHZ(1), unit); + } else if ((x >= SR_KHZ(1)) && (x % SR_KHZ(1) != 0)) { + return g_strdup_printf("%" PRIu64 ".%" PRIu64 " k%s", + x / SR_KHZ(1), x % SR_KHZ(1), unit); + } else { + return g_strdup_printf("%" PRIu64 " %s", x, unit); + } + + sr_err("strutil: %s: Error creating SI units string.", + __func__); + return NULL; +} + /** * Convert a numeric samplerate value to its "natural" string representation. * @@ -38,35 +84,7 @@ */ SR_API char *sr_samplerate_string(uint64_t samplerate) { - char *o; - uint64_t s = samplerate; - - if ((s >= SR_GHZ(1)) && (s % SR_GHZ(1) == 0)) { - o = g_strdup_printf("%" PRIu64 " GHz", s / SR_GHZ(1)); - } else if ((s >= SR_GHZ(1)) && (s % SR_GHZ(1) != 0)) { - o = g_strdup_printf("%" PRIu64 ".%" PRIu64 " GHz", - s / SR_GHZ(1), s % SR_GHZ(1)); - } else if ((s >= SR_MHZ(1)) && (s % SR_MHZ(1) == 0)) { - o = g_strdup_printf("%" PRIu64 " MHz", s / SR_MHZ(1)); - } else if ((s >= SR_MHZ(1)) && (s % SR_MHZ(1) != 0)) { - o = g_strdup_printf("%" PRIu64 ".%" PRIu64 " MHz", - s / SR_MHZ(1), s % SR_MHZ(1)); - } else if ((s >= SR_KHZ(1)) && (s % SR_KHZ(1) == 0)) { - o = g_strdup_printf("%" PRIu64 " kHz", s / SR_KHZ(1)); - } else if ((s >= SR_KHZ(1)) && (s % SR_KHZ(1) != 0)) { - o = g_strdup_printf("%" PRIu64 ".%" PRIu64 " kHz", - s / SR_KHZ(1), s % SR_KHZ(1)); - } else { - o = g_strdup_printf("%" PRIu64 " Hz", s); - } - - if (!o) { - sr_err("strutil: %s: Error creating samplerate string.", - __func__); - return NULL; - } - - return o; + return sr_si_string_u64(samplerate, "Hz"); } /**