add sigrok_period_string(), MAX_NUM_PROBES

This commit is contained in:
Bert Vermeulen 2011-01-06 00:51:29 +01:00
parent 5e2ddeb098
commit 2a3f9541a4
2 changed files with 45 additions and 1 deletions

View File

@ -58,3 +58,42 @@ char *sigrok_samplerate_string(uint64_t samplerate)
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;
}

View File

@ -49,6 +49,11 @@
#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)
@ -153,6 +158,7 @@ int filter_probes(int in_unitsize, int out_unitsize, int *probelist,
uint64_t *length_out);
char *sigrok_samplerate_string(uint64_t samplerate);
char *sigrok_period_string(uint64_t frequency);
/*--- analyzer.c ------------------------------------------------------------*/
@ -210,7 +216,6 @@ struct device {
struct datastore *datastore;
};
#define MAX_PROBENAME_LEN 32
struct probe {
int index;
gboolean enabled;