sr: Refactored sr_samplerate_string into a more general function: sr_si_string_u64

This commit is contained in:
Joel Holdsworth 2012-07-07 09:32:00 +01:00 committed by Uwe Hermann
parent b863fb1b9d
commit 4cc9aea15b
2 changed files with 48 additions and 29 deletions

View File

@ -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);

View File

@ -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");
}
/**