Added continuous output option to ao-usbtrng
authorTom Marble <tmarble@info9.net>
Wed, 11 Feb 2015 14:21:27 +0000 (08:21 -0600)
committerTom Marble <tmarble@info9.net>
Wed, 11 Feb 2015 14:21:27 +0000 (08:21 -0600)
ao-tools/ao-usbtrng/ao-usbtrng.1
ao-tools/ao-usbtrng/ao-usbtrng.c

index b4a3e5eca99fae60e889a570b58ab3d0e188f657..eabdd8a1d45b57c9b2435e56b683db8248c73ec9 100644 (file)
 .SH NAME
 ao-usbtrng \- dump random numbers from USBtrng
 .SH SYNOPSIS
-.B "ao-usbtrng"
-[\-T \fItty-device\fP]
-[\--tty \fItty-device\fP]
-[\-D \fIaltos-device\fP]
-[\--device \fIaltos-device\fP]
-\fIkbytes\fP
+.B "ao-usbtrng" [OPTION...] [KBYTES]
 .SH DESCRIPTION
 .I ao-usbtrng
-dumps random numbers from a USBtrng device
+dumps random numbers from a USBtrng device. If provided KBYTES specifies the number of 1024 byte blocks to produce on standard output. Without KBYTES
+.I ao-usbtrng
+produces random bytes continuously until killed.
 .SH OPTIONS
 .TP
-\-T tty-device | --tty tty-device
+\-v, --verbose
+increase verbosity
+.TP
+\-T, -tty=TTYDEVICE
 This selects which tty device the debugger uses to communicate with
 the target device. The special name 'BITBANG' directs ao-dbg to use
 the cp2103 connection, otherwise this should be a usb serial port
 connected to a suitable cc1111 debug node.
 .TP
-\-D AltOS-device | --device AltOS-device
+\-D, --device=ALTOSDEVICE
 Search for a connected device. This requires an argument of one of the
 following forms:
 .IP
@@ -52,7 +52,7 @@ product, leaving out the serial number will cause the tool to match
 one of the available devices.
 .SH USAGE
 .I ao-usbtrng
-opens the target device and reads the specified number of kbytes of
+opens the target device and reads the specified number of KBYTES of
 random data.
 .SH AUTHOR
 Keith Packard
index 232f4e3e6a345a61e8ae1d3130cd8e92eff88a40..456885d9b4871b205d3d5cad13e8f7c2921fb7ec 100644 (file)
 static const struct option options[] = {
        { .name = "tty", .has_arg = 1, .val = 'T' },
        { .name = "device", .has_arg = 1, .val = 'D' },
-       { .name = "raw", .has_arg = 0, .val = 'r' },
-       { .name = "verbose", .has_arg = 1, .val = 'v' },
+       { .name = "verbose", .has_arg = 0, .val = 'v' },
        { 0, 0, 0, 0},
 };
 
 static void usage(char *program)
 {
-       fprintf(stderr, "usage: %s [--verbose=<verbose>] [--device=<device>] [-tty=<tty>] <kbytes>\n", program);
+       fprintf(stderr, "usage: %s [--verbose] [--device=<AltOS-device>] [-tty=<tty>] [<kbytes>]\n", program);
        exit(1);
 }
 
@@ -58,21 +57,17 @@ main (int argc, char **argv)
 {
        char                    *device = NULL;
        char                    *filename;
-       Elf                     *e;
-       unsigned int            s;
        int                     i;
        int                     c;
-       int                     tries;
        struct cc_usb           *cc = NULL;
        char                    *tty = NULL;
-       int                     success;
        int                     verbose = 0;
        int                     ret = 0;
-       int                     expected_size;
-       int                     kbytes;
+       int                     kbytes = 0; /* 0 == continuous */
+       int                     written;
        uint8_t                 bits[1024];
 
-       while ((c = getopt_long(argc, argv, "rT:D:c:s:v:", options, NULL)) != -1) {
+       while ((c = getopt_long(argc, argv, "vT:D:", options, NULL)) != -1) {
                switch (c) {
                case 'T':
                        tty = optarg;
@@ -89,12 +84,8 @@ main (int argc, char **argv)
                }
        }
 
-       if (!argv[optind])
-               usage(argv[0]);
-
-       kbytes = atoi(argv[optind]);
-       if (kbytes < 1)
-               kbytes = 1;
+       if (optind < argc)
+               kbytes = atoi(argv[optind]);
 
        ao_verbose = verbose;
 
@@ -113,13 +104,22 @@ main (int argc, char **argv)
        if (!cc)
                exit(1);
 
-       cc_usb_printf(cc, "f %d\n", kbytes);
+       if (kbytes) {
+               cc_usb_printf(cc, "f %d\n", kbytes);
 
-       while (kbytes--) {
-               int     i;
-               for (i = 0; i < 1024; i++)
-                       bits[i] = cc_usb_getchar(cc);
-               write(1, bits, 1024);
+               while (kbytes--) {
+                       for (i = 0; i < 1024; i++)
+                               bits[i] = cc_usb_getchar(cc);
+                       write(1, bits, 1024);
+               }
+       } else { /* 0 == continuous */
+               written = 0;
+               while (written >= 0) {
+                       cc_usb_printf(cc, "f 1\n");
+                       for (i = 0; i < 1024; i++)
+                               bits[i] = cc_usb_getchar(cc);
+                       written = write(1, bits, 1024);
+               }
        }
 
        done(cc, ret);