From: Keith Packard Date: Mon, 8 Jan 2018 05:43:22 +0000 (-0800) Subject: ao-chaosread: add --raw and --cooked flags X-Git-Tag: 1.8.5~1^2~2^2~10 X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=commitdiff_plain;h=db7f7c6c7f956058250b8057c6c27284f6f22e53 ao-chaosread: add --raw and --cooked flags Allow reading from the cooked endpoint as well as the raw one. Signed-off-by: Keith Packard --- diff --git a/ao-tools/ao-chaosread/ao-chaosread.1 b/ao-tools/ao-chaosread/ao-chaosread.1 index ead8afb2..e6ed2fac 100644 --- a/ao-tools/ao-chaosread/ao-chaosread.1 +++ b/ao-tools/ao-chaosread/ao-chaosread.1 @@ -33,6 +33,20 @@ one found. \-l length | --length length Set the amount of data to read. Suffixes 'k', 'M' and 'G' are supported. The default is 1k. +.TP +\-i | --infinite +Read an unlimited amount of data. +.TP +\-b | --bytes +For each 16-bit value read, output bits 1-8 as a byte, don't output +bit 0 or bits 9-15 at all. +.TP +\-c | --cooked +Read whitened data from the device. The default is to read raw data +from the noise source. +.TP +\-r | --raw +Read raw data from the noise source. This is the default. .SH USAGE .I ao-chaosread reads noise data. diff --git a/ao-tools/ao-chaosread/ao-chaosread.c b/ao-tools/ao-chaosread/ao-chaosread.c index 6d860139..8a814a00 100644 --- a/ao-tools/ao-chaosread/ao-chaosread.c +++ b/ao-tools/ao-chaosread/ao-chaosread.c @@ -172,10 +172,11 @@ chaoskey_close(struct chaoskey *ck) free(ck); } -#define ENDPOINT 0x86 +#define COOKED_ENDPOINT 0x85 +#define RAW_ENDPOINT 0x86 int -chaoskey_read(struct chaoskey *ck, void *buffer, int len) +chaoskey_read(struct chaoskey *ck, int endpoint, void *buffer, int len) { uint8_t *buf = buffer; int total = 0; @@ -184,7 +185,7 @@ chaoskey_read(struct chaoskey *ck, void *buffer, int len) int ret; int transferred; - ret = libusb_bulk_transfer(ck->handle, ENDPOINT, buf, len, &transferred, 10000); + ret = libusb_bulk_transfer(ck->handle, endpoint, buf, len, &transferred, 10000); if (ret) { if (total) return total; @@ -205,12 +206,14 @@ static const struct option options[] = { { .name = "length", .has_arg = 1, .val = 'l' }, { .name = "infinite", .has_arg = 0, .val = 'i' }, { .name = "bytes", .has_arg = 0, .val = 'b' }, + { .name = "cooked", .has_arg = 0, .val = 'c' }, + { .name = "raw", .has_arg = 0, .val = 'r' }, { 0, 0, 0, 0}, }; static void usage(char *program) { - fprintf(stderr, "usage: %s [--serial=] [--length=[kMG]] [--infinite] [--bytes]\n", program); + fprintf(stderr, "usage: %s [--serial=] [--length=[kMG]] [--infinite] [--bytes] [--cooked] [--raw]\n", program); exit(1); } @@ -228,8 +231,9 @@ main (int argc, char **argv) int this_time; int infinite = 0; int bytes = 0; + int endpoint = RAW_ENDPOINT; - while ((c = getopt_long(argc, argv, "s:l:ib", options, NULL)) != -1) { + while ((c = getopt_long(argc, argv, "s:l:ibcr", options, NULL)) != -1) { switch (c) { case 's': serial = optarg; @@ -252,6 +256,12 @@ main (int argc, char **argv) case 'b': bytes = 1; break; + case 'c': + endpoint = COOKED_ENDPOINT; + break; + case 'r': + endpoint = RAW_ENDPOINT; + break; default: usage(argv[0]); break; @@ -269,7 +279,7 @@ main (int argc, char **argv) this_time = sizeof(buf); if (!infinite && length < sizeof(buf)) this_time = (int) length; - got = chaoskey_read(ck, buf, this_time); + got = chaoskey_read(ck, endpoint, buf, this_time); if (got < 0) { perror("read"); exit(1);