From: Alexander Stein Date: Tue, 12 Feb 2013 16:50:51 +0000 (+0100) Subject: candump: Add timeout option if no message has been received X-Git-Url: https://rtime.felk.cvut.cz/gitweb/sojka/can-utils.git/commitdiff_plain/e5c81aa2218001f9adbc435f1358e25fcb4839c9 candump: Add timeout option if no message has been received Signed-off-by: Alexander Stein Signed-off-by: Marc Kleine-Budde --- diff --git a/candump.c b/candump.c index bf3e8bb..b489cd9 100644 --- a/candump.c +++ b/candump.c @@ -49,6 +49,7 @@ #include #include #include +#include #include #include @@ -121,6 +122,7 @@ void print_usage(char *prg) fprintf(stderr, " -d (monitor dropped CAN frames)\n"); fprintf(stderr, " -e (dump CAN error frames in human-readable format)\n"); fprintf(stderr, " -x (print extra message infos, rx/tx brs esi)\n"); + fprintf(stderr, " -T (terminate after without any reception)\n"); fprintf(stderr, "\n"); fprintf(stderr, "Up to %d CAN interfaces with optional filter sets can be specified\n", MAXSOCK); fprintf(stderr, "on the commandline in the form: [,filter]*\n"); @@ -227,6 +229,7 @@ int main(int argc, char **argv) int nbytes, i, maxdlen; struct ifreq ifr; struct timeval tv, last_tv; + struct timeval timeout, timeout_config = { 0, 0 }, *timeout_current = NULL; FILE *logfile = NULL; signal(SIGTERM, sigterm); @@ -236,7 +239,7 @@ int main(int argc, char **argv) last_tv.tv_sec = 0; last_tv.tv_usec = 0; - while ((opt = getopt(argc, argv, "t:ciaSs:b:B:u:ldxLn:r:he?")) != -1) { + while ((opt = getopt(argc, argv, "t:ciaSs:b:B:u:ldxLn:r:heT:?")) != -1) { switch (opt) { case 't': timestamp = optarg[0]; @@ -351,6 +354,17 @@ int main(int argc, char **argv) } break; + case 'T': + errno = 0; + timeout_config.tv_usec = strtol(optarg, NULL, 0); + if (errno != 0) { + print_usage(basename(argv[0])); + exit(1); + } + timeout_config.tv_sec = timeout_config.tv_usec / 1000; + timeout_config.tv_usec = (timeout_config.tv_usec % 1000) * 1000; + timeout_current = &timeout; + break; default: print_usage(basename(argv[0])); exit(1); @@ -594,7 +608,10 @@ int main(int argc, char **argv) for (i=0; i