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);
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);
long currcms = 0;
long lastcms = 0;
unsigned char quiet = 0;
-
int opt, ret;
struct timeval timeo, start_tv, tv;
struct sockaddr_can addr;
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);
color = 1;
break;
+ case 'f':
+ filter_id_only = 1;
+ break;
+
case '?':
break;
return 1;
}
+ interface = argv[optind];
+
if ((s = socket(PF_CAN, SOCK_DGRAM, CAN_BCM)) < 0) {
perror("socket");
return 1;
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");
};
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;