From ab65e9f257493da5282d8933d8f0dcb716c1f41f Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sun, 6 May 2018 21:16:25 -0700 Subject: [PATCH] ao-chaosread: Add support for the new flash endpoint in chaoskey This adds support for endpoint 0x87, which streams the contents of the onboard flash to the host for firmware verification. Signed-off-by: Keith Packard --- ao-tools/ao-chaosread/ao-chaosread.1 | 6 ++++++ ao-tools/ao-chaosread/ao-chaosread.c | 9 +++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/ao-tools/ao-chaosread/ao-chaosread.1 b/ao-tools/ao-chaosread/ao-chaosread.1 index e6ed2fac..94ca5ce9 100644 --- a/ao-tools/ao-chaosread/ao-chaosread.1 +++ b/ao-tools/ao-chaosread/ao-chaosread.1 @@ -47,6 +47,12 @@ from the noise source. .TP \-r | --raw Read raw data from the noise source. This is the default. +.TP +\-f | --flash +Read the contents of flash memory on the device. This loops through +flash memory, so you can read the contents more than once, but there's +no way to reset the pointer back to the start other than making sure +you read the whole contents. .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 8a814a00..5c0de125 100644 --- a/ao-tools/ao-chaosread/ao-chaosread.c +++ b/ao-tools/ao-chaosread/ao-chaosread.c @@ -174,6 +174,7 @@ chaoskey_close(struct chaoskey *ck) #define COOKED_ENDPOINT 0x85 #define RAW_ENDPOINT 0x86 +#define FLASH_ENDPOINT 0x87 int chaoskey_read(struct chaoskey *ck, int endpoint, void *buffer, int len) @@ -208,12 +209,13 @@ static const struct option options[] = { { .name = "bytes", .has_arg = 0, .val = 'b' }, { .name = "cooked", .has_arg = 0, .val = 'c' }, { .name = "raw", .has_arg = 0, .val = 'r' }, + { .name = "flash", .has_arg = 0, .val = 'f' }, { 0, 0, 0, 0}, }; static void usage(char *program) { - fprintf(stderr, "usage: %s [--serial=] [--length=[kMG]] [--infinite] [--bytes] [--cooked] [--raw]\n", program); + fprintf(stderr, "usage: %s [--serial=] [--length=[kMG]] [--infinite] [--bytes] [--cooked] [--raw] [--flash]\n", program); exit(1); } @@ -233,7 +235,7 @@ main (int argc, char **argv) int bytes = 0; int endpoint = RAW_ENDPOINT; - while ((c = getopt_long(argc, argv, "s:l:ibcr", options, NULL)) != -1) { + while ((c = getopt_long(argc, argv, "s:l:ibcrf", options, NULL)) != -1) { switch (c) { case 's': serial = optarg; @@ -262,6 +264,9 @@ main (int argc, char **argv) case 'r': endpoint = RAW_ENDPOINT; break; + case 'f': + endpoint = FLASH_ENDPOINT; + break; default: usage(argv[0]); break; -- 2.30.2