+ * @return A g_try_malloc()ed string representation of the voltage value,
+ * or NULL upon errors. The caller is responsible to g_free() the
+ * memory.
+ */
+SR_API char *sr_voltage_string(struct sr_rational *voltage)
+{
+ char *o;
+ int r;
+
+ if (!(o = g_try_malloc0(30 + 1))) {
+ sr_err("strutil: %s: o malloc failed", __func__);
+ return NULL;
+ }
+
+ if (voltage->q == 1000)
+ r = snprintf(o, 30, "%" PRIu64 "mV", voltage->p);
+ else if (voltage->q == 1)
+ r = snprintf(o, 30, "%" PRIu64 "V", voltage->p);
+ else
+ r = -1;
+
+ if (r < 0) {
+ /* Something went wrong... */
+ g_free(o);
+ return NULL;
+ }
+
+ return o;
+}
+
+/**
+ * Parse a trigger specification string.
+ *
+ * @param dev The device for which the trigger specification is intended.
+ * @param triggerstring The string containing the trigger specification for
+ * one or more probes of this device. Entries for multiple probes are
+ * comma-separated. Triggers are specified in the form key=value,
+ * where the key is a probe number (or probe name) and the value is
+ * the requested trigger type. Valid trigger types currently
+ * include 'r' (rising edge), 'f' (falling edge), 'c' (any pin value
+ * change), '0' (low value), or '1' (high value).
+ * Example: "1=r,sck=f,miso=0,7=c"
+ *
+ * @return Pointer to a list of trigger types (strings), or NULL upon errors.
+ * The pointer list (if non-NULL) has as many entries as the
+ * respective device has probes (all physically available probes,
+ * not just enabled ones). Entries of the list which don't have
+ * a trigger value set in 'triggerstring' are NULL, the other entries
+ * contain the respective trigger type which is requested for the
+ * respective probe (e.g. "r", "c", and so on).