X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=strutil.c;h=b7b0af16d72bc9df0af4f78c658690150229a36d;hb=d406dccd6a7486d3a2913338d4d023aa93322de3;hp=5b14f51afc74741d767e5f3ebdf863d8da44daf4;hpb=003595ac375fac61ed9ef45b13119c80e7c1ade3;p=libsigrok.git diff --git a/strutil.c b/strutil.c index 5b14f51a..b7b0af16 100644 --- a/strutil.c +++ b/strutil.c @@ -1,5 +1,5 @@ /* - * This file is part of the sigrok project. + * This file is part of the libsigrok project. * * Copyright (C) 2010 Uwe Hermann * @@ -24,14 +24,14 @@ #include "libsigrok.h" #include "libsigrok-internal.h" -/* Message logging helpers with driver-specific prefix string. */ -#define DRIVER_LOG_DOMAIN "strutil: " -#define sr_log(l, s, args...) sr_log(l, DRIVER_LOG_DOMAIN s, ## args) -#define sr_spew(s, args...) sr_spew(DRIVER_LOG_DOMAIN s, ## args) -#define sr_dbg(s, args...) sr_dbg(DRIVER_LOG_DOMAIN s, ## args) -#define sr_info(s, args...) sr_info(DRIVER_LOG_DOMAIN s, ## args) -#define sr_warn(s, args...) sr_warn(DRIVER_LOG_DOMAIN s, ## args) -#define sr_err(s, args...) sr_err(DRIVER_LOG_DOMAIN s, ## args) +/* Message logging helpers with subsystem-specific prefix string. */ +#define LOG_PREFIX "strutil: " +#define sr_log(l, s, args...) sr_log(l, LOG_PREFIX s, ## args) +#define sr_spew(s, args...) sr_spew(LOG_PREFIX s, ## args) +#define sr_dbg(s, args...) sr_dbg(LOG_PREFIX s, ## args) +#define sr_info(s, args...) sr_info(LOG_PREFIX s, ## args) +#define sr_warn(s, args...) sr_warn(LOG_PREFIX s, ## args) +#define sr_err(s, args...) sr_err(LOG_PREFIX s, ## args) /** * @file @@ -151,19 +151,20 @@ SR_API char *sr_period_string(uint64_t frequency) } /** - * Convert a numeric frequency value to the "natural" string representation - * of its voltage value. + * Convert a numeric voltage value to the "natural" string representation + * of its voltage value. The voltage is specified as a rational number's + * numerator and denominator. * * 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. + * @param v_p The voltage numerator. + * @param v_q The voltage denominator. * * @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) +SR_API char *sr_voltage_string(uint64_t v_p, uint64_t v_q) { int r; char *o; @@ -173,12 +174,12 @@ SR_API char *sr_voltage_string(struct sr_rational *voltage) 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); + if (v_q == 1000) + r = snprintf(o, 30, "%" PRIu64 "mV", v_p); + else if (v_q == 1) + r = snprintf(o, 30, "%" PRIu64 "V", v_p); else - r = snprintf(o, 30, "%gV", (float)voltage->p / (float)voltage->q); + r = snprintf(o, 30, "%gV", (float)v_p / (float)v_q); if (r < 0) { /* Something went wrong... */ @@ -393,12 +394,12 @@ SR_API gboolean sr_parse_boolstring(const char *boolstr) return FALSE; } -SR_API int sr_parse_period(const char *periodstr, struct sr_rational *r) +SR_API int sr_parse_period(const char *periodstr, uint64_t *p, uint64_t *q) { char *s; - r->p = strtoull(periodstr, &s, 10); - if (r->p == 0 && s == periodstr) + *p = strtoull(periodstr, &s, 10); + if (*p == 0 && s == periodstr) /* No digits found. */ return SR_ERR_ARG; @@ -406,17 +407,17 @@ SR_API int sr_parse_period(const char *periodstr, struct sr_rational *r) while (*s == ' ') s++; if (!strcmp(s, "fs")) - r->q = 1000000000000000ULL; + *q = 1000000000000000ULL; else if (!strcmp(s, "ps")) - r->q = 1000000000000ULL; + *q = 1000000000000ULL; else if (!strcmp(s, "ns")) - r->q = 1000000000ULL; + *q = 1000000000ULL; else if (!strcmp(s, "us")) - r->q = 1000000; + *q = 1000000; else if (!strcmp(s, "ms")) - r->q = 1000; + *q = 1000; else if (!strcmp(s, "s")) - r->q = 1; + *q = 1; else /* Must have a time suffix. */ return SR_ERR_ARG; @@ -426,12 +427,12 @@ 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) +SR_API int sr_parse_voltage(const char *voltstr, uint64_t *p, uint64_t *q) { char *s; - r->p = strtoull(voltstr, &s, 10); - if (r->p == 0 && s == voltstr) + *p = strtoull(voltstr, &s, 10); + if (*p == 0 && s == voltstr) /* No digits found. */ return SR_ERR_ARG; @@ -439,9 +440,9 @@ SR_API int sr_parse_voltage(const char *voltstr, struct sr_rational *r) while (*s == ' ') s++; if (!strcasecmp(s, "mv")) - r->q = 1000L; + *q = 1000L; else if (!strcasecmp(s, "v")) - r->q = 1; + *q = 1; else /* Must have a base suffix. */ return SR_ERR_ARG;