From 2a3f9541a4bece23b25e1b255c0fab31ba5a751b Mon Sep 17 00:00:00 2001 From: Bert Vermeulen Date: Thu, 6 Jan 2011 00:51:29 +0100 Subject: [PATCH] add sigrok_period_string(), MAX_NUM_PROBES --- output/common.c | 39 +++++++++++++++++++++++++++++++++++++++ sigrok.h | 7 ++++++- 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/output/common.c b/output/common.c index 1fc5df7d..ad4720f7 100644 --- a/output/common.c +++ b/output/common.c @@ -58,3 +58,42 @@ char *sigrok_samplerate_string(uint64_t samplerate) 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 µs", 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 *sigrok_period_string(uint64_t frequency) +{ + char *o; + int r; + + o = malloc(30 + 1); /* Enough for a uint64_t as string + " ms". */ + if (o == NULL) + return NULL; + + if (frequency >= GHZ(1)) + r = snprintf(o, 30, "%" PRIu64 " ns", frequency / 1000000000); + else if (frequency >= MHZ(1)) + r = snprintf(o, 30, "%" PRIu64 " µs", 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... */ + free(o); + return NULL; + } + + return o; +} + diff --git a/sigrok.h b/sigrok.h index dd9881a7..9551b887 100644 --- a/sigrok.h +++ b/sigrok.h @@ -49,6 +49,11 @@ #define SIGROK_ERR_MALLOC -2 /* Malloc/calloc/realloc error */ #define SIGROK_ERR_SAMPLERATE -3 /* Incorrect samplerate */ +/* limited by uint64_t */ +#define MAX_NUM_PROBES 64 +#define MAX_PROBENAME_LEN 32 + + /* Handy little macros */ #define KHZ(n) ((n) * 1000) #define MHZ(n) ((n) * 1000000) @@ -153,6 +158,7 @@ int filter_probes(int in_unitsize, int out_unitsize, int *probelist, uint64_t *length_out); char *sigrok_samplerate_string(uint64_t samplerate); +char *sigrok_period_string(uint64_t frequency); /*--- analyzer.c ------------------------------------------------------------*/ @@ -210,7 +216,6 @@ struct device { struct datastore *datastore; }; -#define MAX_PROBENAME_LEN 32 struct probe { int index; gboolean enabled;