summaryrefslogtreecommitdiff
path: root/ao-tools
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2018-05-06 21:16:25 -0700
committerKeith Packard <keithp@keithp.com>2018-05-07 09:21:56 -0700
commitab65e9f257493da5282d8933d8f0dcb716c1f41f (patch)
treefcbbe43f5adb723ce0cc79da8e19b9444d256417 /ao-tools
parentbea42e45952df85d61428662caefbb100465a585 (diff)
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 <keithp@keithp.com>
Diffstat (limited to 'ao-tools')
-rw-r--r--ao-tools/ao-chaosread/ao-chaosread.16
-rw-r--r--ao-tools/ao-chaosread/ao-chaosread.c9
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=<serial>] [--length=<length>[kMG]] [--infinite] [--bytes] [--cooked] [--raw]\n", program);
+ fprintf(stderr, "usage: %s [--serial=<serial>] [--length=<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;