X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=strutil.c;h=5b14f51afc74741d767e5f3ebdf863d8da44daf4;hb=d6836bf129adc8efbd826b8ea04246167987e0cc;hp=c5e7dce81ffeefc1e503955b8169d4cfc900041a;hpb=a885ce3ee9ed770594d5b231f6dec0b740bba03b;p=libsigrok.git diff --git a/strutil.c b/strutil.c index c5e7dce8..5b14f51a 100644 --- a/strutil.c +++ b/strutil.c @@ -165,8 +165,8 @@ SR_API char *sr_period_string(uint64_t frequency) */ SR_API char *sr_voltage_string(struct sr_rational *voltage) { - char *o; int r; + char *o; if (!(o = g_try_malloc0(30 + 1))) { sr_err("%s: o malloc failed", __func__); @@ -178,7 +178,7 @@ SR_API char *sr_voltage_string(struct sr_rational *voltage) else if (voltage->q == 1) r = snprintf(o, 30, "%" PRIu64 "V", voltage->p); else - r = -1; + r = snprintf(o, 30, "%gV", (float)voltage->p / (float)voltage->q); if (r < 0) { /* Something went wrong... */ @@ -216,6 +216,7 @@ SR_API char **sr_parse_triggerstring(const struct sr_dev_inst *sdi, const char *triggerstring) { GSList *l; + GVariant *gvar; struct sr_probe *probe; int max_probes, probenum, i; char **tokens, **triggerlist, *trigger, *tc; @@ -230,11 +231,11 @@ SR_API char **sr_parse_triggerstring(const struct sr_dev_inst *sdi, return NULL; } - if (sdi->driver->info_get(SR_DI_TRIGGER_TYPES, - (const void **)&trigger_types, sdi) != SR_OK) { + if (sdi->driver->config_list(SR_CONF_TRIGGER_TYPE, &gvar, sdi) != SR_OK) { sr_err("%s: Device doesn't support any triggers.", __func__); return NULL; } + trigger_types = g_variant_get_string(gvar, NULL); tokens = g_strsplit(triggerstring, ",", max_probes); for (i = 0; tokens[i]; i++) { @@ -269,6 +270,7 @@ SR_API char **sr_parse_triggerstring(const struct sr_dev_inst *sdi, } } g_strfreev(tokens); + g_variant_unref(gvar); if (error) { for (i = 0; i < max_probes; i++) @@ -403,8 +405,12 @@ SR_API int sr_parse_period(const char *periodstr, struct sr_rational *r) if (s && *s) { while (*s == ' ') s++; - if (!strcmp(s, "ns")) - r->q = 1000000000L; + if (!strcmp(s, "fs")) + r->q = 1000000000000000ULL; + else if (!strcmp(s, "ps")) + r->q = 1000000000000ULL; + else if (!strcmp(s, "ns")) + r->q = 1000000000ULL; else if (!strcmp(s, "us")) r->q = 1000000; else if (!strcmp(s, "ms"))