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;
+}
+
#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)
uint64_t *length_out);
char *sigrok_samplerate_string(uint64_t samplerate);
+char *sigrok_period_string(uint64_t frequency);
/*--- analyzer.c ------------------------------------------------------------*/
struct datastore *datastore;
};
-#define MAX_PROBENAME_LEN 32
struct probe {
int index;
gboolean enabled;