]> rtime.felk.cvut.cz Git - sojka/can-utils.git/commitdiff
cangen: Added '-n <count>' commandline option analogue to candump tool.
authorOliver Hartkopp <socketcan@hartkopp.net>
Mon, 29 Nov 2010 18:58:12 +0000 (18:58 +0000)
committerOliver Hartkopp <socketcan@hartkopp.net>
Mon, 29 Nov 2010 18:58:12 +0000 (18:58 +0000)
Inspired by Uwe Bonnes.

cangen.c

index 898068b9829e4d1a9589f4639e5419be9bc29ec1..9009c0501701f9d55f861a35c984ff06bc8fb390 100644 (file)
--- a/cangen.c
+++ b/cangen.c
@@ -95,6 +95,8 @@ void print_usage(char *prg)
                " generation mode - see below)\n");
        fprintf(stderr, "         -p <timeout>  (poll on -ENOBUFS to write frames"
                " with <timeout> ms)\n");
+       fprintf(stderr, "         -n <count>    (terminate after <count> CAN frames "
+               "- default infinite)\n");
        fprintf(stderr, "         -i            (ignore -ENOBUFS return values on"
                " write() syscalls)\n");
        fprintf(stderr, "         -x            (disable local loopback of "
@@ -139,6 +141,7 @@ int main(int argc, char **argv)
        unsigned char dlc_mode = MODE_RANDOM;
        unsigned char loopback_disable = 0;
        unsigned char verbose = 0;
+       int count = 0;
        uint64_t incdata = 0;
 
        int opt;
@@ -157,7 +160,7 @@ int main(int argc, char **argv)
        signal(SIGHUP, sigterm);
        signal(SIGINT, sigterm);
 
-       while ((opt = getopt(argc, argv, "ig:eI:L:D:xp:vh?")) != -1) {
+       while ((opt = getopt(argc, argv, "ig:eI:L:D:xp:n:vh?")) != -1) {
                switch (opt) {
 
                case 'i':
@@ -220,6 +223,14 @@ int main(int argc, char **argv)
                        polltimeout = strtoul(optarg, NULL, 10);
                        break;
 
+               case 'n':
+                       count = atoi(optarg);
+                       if (count < 1) {
+                               print_usage(basename(argv[0]));
+                               return 1;
+                       }
+                       break;
+
                case '?':
                case 'h':
                default:
@@ -302,6 +313,9 @@ int main(int argc, char **argv)
 
        while (running) {
 
+               if (count && (--count == 0))
+                       running = 0;
+
                if (id_mode == MODE_RANDOM) {
 
                        frame.can_id = random();