sr: add voltage parser and prettyprinter
This commit is contained in:
parent
c1e486185e
commit
79afc8cac4
|
@ -114,12 +114,14 @@ SR_API struct sr_output_format **sr_output_list(void);
|
||||||
|
|
||||||
SR_API char *sr_samplerate_string(uint64_t samplerate);
|
SR_API char *sr_samplerate_string(uint64_t samplerate);
|
||||||
SR_API char *sr_period_string(uint64_t frequency);
|
SR_API char *sr_period_string(uint64_t frequency);
|
||||||
|
SR_API char *sr_voltage_string(struct sr_rational *voltage);
|
||||||
SR_API char **sr_parse_triggerstring(struct sr_dev *dev,
|
SR_API char **sr_parse_triggerstring(struct sr_dev *dev,
|
||||||
const char *triggerstring);
|
const char *triggerstring);
|
||||||
SR_API int sr_parse_sizestring(const char *sizestring, uint64_t *size);
|
SR_API int sr_parse_sizestring(const char *sizestring, uint64_t *size);
|
||||||
SR_API uint64_t sr_parse_timestring(const char *timestring);
|
SR_API uint64_t sr_parse_timestring(const char *timestring);
|
||||||
SR_API gboolean sr_parse_boolstring(const char *boolstring);
|
SR_API gboolean sr_parse_boolstring(const char *boolstring);
|
||||||
SR_API int sr_parse_period(const char *periodstr, struct sr_rational *r);
|
SR_API int sr_parse_period(const char *periodstr, struct sr_rational *r);
|
||||||
|
SR_API int sr_parse_voltage(const char *voltstr, struct sr_rational *r);
|
||||||
|
|
||||||
/*--- version.c -------------------------------------------------------------*/
|
/*--- version.c -------------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
64
strutil.c
64
strutil.c
|
@ -110,6 +110,45 @@ SR_API char *sr_period_string(uint64_t frequency)
|
||||||
return o;
|
return o;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert a numeric frequency value to the "natural" string representation
|
||||||
|
* of its voltage value.
|
||||||
|
*
|
||||||
|
* E.g. a value of 300000 would be converted to "300mV", 2 to "2V".
|
||||||
|
*
|
||||||
|
* @param voltage The voltage represented as a rational number, with the
|
||||||
|
* denominator a divisor of 1V.
|
||||||
|
*
|
||||||
|
* @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.
|
* Parse a trigger specification string.
|
||||||
*
|
*
|
||||||
|
@ -344,3 +383,28 @@ SR_API int sr_parse_period(const char *periodstr, struct sr_rational *r)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SR_API int sr_parse_voltage(const char *voltstr, struct sr_rational *r)
|
||||||
|
{
|
||||||
|
char *s;
|
||||||
|
|
||||||
|
r->p = strtoull(voltstr, &s, 10);
|
||||||
|
if (r->p == 0 && s == voltstr)
|
||||||
|
/* No digits found. */
|
||||||
|
return SR_ERR_ARG;
|
||||||
|
|
||||||
|
if (s && *s) {
|
||||||
|
while (*s == ' ')
|
||||||
|
s++;
|
||||||
|
if (!strcasecmp(s, "mv"))
|
||||||
|
r->q = 1000L;
|
||||||
|
else if (!strcasecmp(s, "v"))
|
||||||
|
r->q = 1;
|
||||||
|
else
|
||||||
|
/* Must have a base suffix. */
|
||||||
|
return SR_ERR_ARG;
|
||||||
|
}
|
||||||
|
|
||||||
|
return SR_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue