]> rtime.felk.cvut.cz Git - can-utils.git/blobdiff - cansniffer.c
Add license to canframelen.h
[can-utils.git] / cansniffer.c
index c2b593083cd111c500b63dfdb0194c3fbde97237..c8ee58e47c7ce9bfc85015c11d9ba26647e48557 100644 (file)
@@ -1,9 +1,5 @@
 /*
- *  $Id$
- */
-
-/*
- * can-sniffer.c
+ * cansniffer.c
  *
  * Copyright (c) 2002-2007 Volkswagen Group Electronic Research
  * All rights reserved.
@@ -41,7 +37,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
  * DAMAGE.
  *
- * Send feedback to <socketcan-users@lists.berlios.de>
+ * Send feedback to <linux-can@vger.kernel.org>
  *
  */
 
@@ -118,13 +114,15 @@ extern int optind, opterr, optopt;
 
 static int running = 1;
 static int clearscreen = 1;
-static int notch = 0;
+static int notch;
+static int filter_id_only;
 static long timeout = TIMEOUT;
 static long hold = HOLD;
 static long loop = LOOP;
-static unsigned char binary = 0;
-static unsigned char binary_gap = 0;
-static unsigned char color  = 0;
+static unsigned char binary;
+static unsigned char binary_gap;
+static unsigned char color;
+static char *interface;
 
 void rx_setup (int fd, int id);
 void rx_delete (int fd, int id);
@@ -173,6 +171,7 @@ void print_usage(char *prg)
        fprintf(stderr, "         -b         (start with binary mode)\n");
        fprintf(stderr, "         -B         (start with binary mode with gap - exceeds 80 chars!)\n");
        fprintf(stderr, "         -c         (color changes)\n");
+       fprintf(stderr, "         -f         (filter on CAN-ID only)\n");
        fprintf(stderr, "         -t <time>  (timeout for ID display [x100ms] default: %d, 0 = OFF)\n", TIMEOUT);
        fprintf(stderr, "         -h <time>  (hold marker on changes [x100ms] default: %d)\n", HOLD);
        fprintf(stderr, "         -l <time>  (loop time (display) [x100ms] default: %d)\n", LOOP);
@@ -195,7 +194,6 @@ int main(int argc, char **argv)
        long currcms = 0;
        long lastcms = 0;
        unsigned char quiet = 0;
-
        int opt, ret;
        struct timeval timeo, start_tv, tv;
        struct sockaddr_can addr;
@@ -210,7 +208,7 @@ int main(int argc, char **argv)
        for (i=0; i < 2048 ;i++) /* default: check all CAN-IDs */
                do_set(i, ENABLE);
 
-       while ((opt = getopt(argc, argv, "m:v:r:t:h:l:qbBc")) != -1) {
+       while ((opt = getopt(argc, argv, "m:v:r:t:h:l:qbBcf?")) != -1) {
                switch (opt) {
                case 'm':
                        sscanf(optarg, "%x", &mask);
@@ -254,6 +252,10 @@ int main(int argc, char **argv)
                        color = 1;
                        break;
 
+               case 'f':
+                       filter_id_only = 1;
+                       break;
+
                case '?':
                        break;
 
@@ -286,6 +288,8 @@ int main(int argc, char **argv)
                return 1;
        }
 
+       interface = argv[optind];
+
        if ((s = socket(PF_CAN, SOCK_DGRAM, CAN_BCM)) < 0) {
                perror("socket");
                return 1;
@@ -371,6 +375,9 @@ void rx_setup (int fd, int id){
        txmsg.msg_head.nframes = 1;
        U64_DATA(&txmsg.frame) = (__u64) 0xFFFFFFFFFFFFFFFFULL;
 
+       if (filter_id_only)
+               txmsg.msg_head.flags |= RX_FILTER_ID;
+
        if (write(fd, &txmsg, sizeof(txmsg)) < 0)
                perror("write");
 };
@@ -535,7 +542,7 @@ int handle_timeo(int fd, long currcms){
        if (clearscreen) {
                char startline[80];
                printf("%s%s", CLR_SCREEN, CSR_HOME);
-               snprintf(startline, 79, "< can-sniffer parameters: l=%ld h=%ld t=%ld >", loop, hold, timeout);
+               snprintf(startline, 79, "< cansniffer %s # l=%ld h=%ld t=%ld >", interface, loop, hold, timeout);
                printf("%s%*s",STARTLINESTR, 79-(int)strlen(STARTLINESTR), startline);
                force_redraw = 1;
                clearscreen = 0;