sr: Refactored sr_samplerate_string into a more general function: sr_si_string_u64
This commit is contained in:
parent
b863fb1b9d
commit
4cc9aea15b
1
proto.h
1
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);
|
||||
|
|
76
strutil.c
76
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");
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue