summaryrefslogtreecommitdiff
path: root/libsigrok4DSLogic/strutil.c
diff options
context:
space:
mode:
authorSven Wegener <sven.wegener@stealer.net>2014-06-30 09:38:31 +0200
committerSven Wegener <sven.wegener@stealer.net>2014-06-30 09:38:31 +0200
commit79de83205964ee0182940ef7cec86b46896ed0e6 (patch)
treeccf532205a550ac926e52069649a1cc41aa555a6 /libsigrok4DSLogic/strutil.c
parent3de7dbb24c71c0d894dbd734ddf9258683d9e2e1 (diff)
Update from DSLogic-v0.3.tar.gzHEADmaster
Signed-off-by: Sven Wegener <sven.wegener@stealer.net>
Diffstat (limited to 'libsigrok4DSLogic/strutil.c')
-rw-r--r--libsigrok4DSLogic/strutil.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/libsigrok4DSLogic/strutil.c b/libsigrok4DSLogic/strutil.c
index b7b0af1..68efe7e 100644
--- a/libsigrok4DSLogic/strutil.c
+++ b/libsigrok4DSLogic/strutil.c
@@ -93,6 +93,51 @@ SR_API char *sr_si_string_u64(uint64_t x, const char *unit)
}
/**
+ * Convert a numeric value value to its "natural" string representation.
+ * in IEC units
+ *
+ * E.g. a value of 1024, with units set to "B", would be converted
+ * to "1 kB", 16384 to "16 kB".
+ *
+ * @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_iec_string_u64(uint64_t x, const char *unit)
+{
+ if (unit == NULL)
+ unit = "";
+
+ if ((x >= SR_GB(1)) && (x % SR_GB(1) == 0)) {
+ return g_strdup_printf("%" PRIu64 " G%s", x / SR_GB(1), unit);
+ } else if ((x >= SR_GB(1)) && (x % SR_GB(1) != 0)) {
+ return g_strdup_printf("%" PRIu64 ".%" PRIu64 " G%s",
+ x / SR_GB(1), x % SR_GB(1), unit);
+ } else if ((x >= SR_MB(1)) && (x % SR_MB(1) == 0)) {
+ return g_strdup_printf("%" PRIu64 " M%s",
+ x / SR_MB(1), unit);
+ } else if ((x >= SR_MB(1)) && (x % SR_MB(1) != 0)) {
+ return g_strdup_printf("%" PRIu64 ".%" PRIu64 " M%s",
+ x / SR_MB(1), x % SR_MB(1), unit);
+ } else if ((x >= SR_KB(1)) && (x % SR_KB(1) == 0)) {
+ return g_strdup_printf("%" PRIu64 " k%s",
+ x / SR_KB(1), unit);
+ } else if ((x >= SR_KB(1)) && (x % SR_KB(1) != 0)) {
+ return g_strdup_printf("%" PRIu64 ".%" PRIu64 " k%s",
+ x / SR_KB(1), x % SR_KB(1), unit);
+ } else {
+ return g_strdup_printf("%" PRIu64 " %s", x, unit);
+ }
+
+ sr_err("%s: Error creating SI units string.", __func__);
+ return NULL;
+}
+
+/**
* 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",