]> sigrok.org Git - libsigrok.git/commitdiff
add sigrok_period_string(), MAX_NUM_PROBES
authorBert Vermeulen <redacted>
Wed, 5 Jan 2011 23:51:29 +0000 (00:51 +0100)
committerBert Vermeulen <redacted>
Sat, 8 Jan 2011 14:50:13 +0000 (15:50 +0100)
output/common.c
sigrok.h

index 1fc5df7d3517f3ce18d0b844c775bf438c6069cb..ad4720f75c4e30382ed38b15c7600de47407d744 100644 (file)
@@ -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;
+}
+
index dd9881a79b58d814e821461968c316cca65b29a5..9551b8874a8ad01fb0095c57f334a8809ea21cfa 100644 (file)
--- a/sigrok.h
+++ b/sigrok.h
 #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;