/*
- * $Id$
- */
-
-/*
- * can-sniffer.c
+ * cansniffer.c
*
* Copyright (c) 2002-2007 Volkswagen Group Electronic Research
* All rights reserved.
* 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>
*
*/
/* time defaults */
-#define TIMEOUT 50 /* in 100ms */
-#define HOLD 10 /* in 100ms */
-#define LOOP 2 /* in 100ms */
-
-#define MAXANI 8
-const char anichar[MAXANI] = {'|', '/', '-', '\\', '|', '/', '-', '\\'};
+#define TIMEOUT 500 /* in 10ms */
+#define HOLD 100 /* in 10ms */
+#define LOOP 20 /* in 10ms */
#define ATTCOLOR ATTBOLD FGRED
-#define STARTLINESTR "X time ID data ... "
+#define STARTLINESTR "XX delta ID data ... "
struct snif {
int flags;
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, " -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);
+ fprintf(stderr, " -f (filter on CAN-ID only)\n");
+ fprintf(stderr, " -t <time> (timeout for ID display [x10ms] default: %d, 0 = OFF)\n", TIMEOUT);
+ fprintf(stderr, " -h <time> (hold marker on changes [x10ms] default: %d)\n", HOLD);
+ fprintf(stderr, " -l <time> (loop time (display) [x10ms] default: %d)\n", LOOP);
fprintf(stderr, "Use interface name '%s' to receive from all can-interfaces\n", ANYDEV);
fprintf(stderr, "\n");
fprintf(stderr, "%s", manual);
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:qbBcf")) != -1) {
+ while ((opt = getopt(argc, argv, "m:v:r:t:h:l:qbBcf?")) != -1) {
switch (opt) {
case 'm':
sscanf(optarg, "%x", &mask);
return 1;
}
+ interface = argv[optind];
+
if ((s = socket(PF_CAN, SOCK_DGRAM, CAN_BCM)) < 0) {
perror("socket");
return 1;
FD_SET(s, &rdfs);
timeo.tv_sec = 0;
- timeo.tv_usec = 100000 * loop;
+ timeo.tv_usec = 10000 * loop;
if ((ret = select(s+1, &rdfs, NULL, NULL, &timeo)) < 0) {
//perror("select");
}
gettimeofday(&tv, NULL);
- currcms = (tv.tv_sec - start_tv.tv_sec) * 10 + (tv.tv_usec / 100000);
+ currcms = (tv.tv_sec - start_tv.tv_sec) * 100 + (tv.tv_usec / 10000);
if (FD_ISSET(0, &rdfs))
running &= handle_keyb(s);
int i;
int force_redraw = 0;
+ static unsigned int frame_count;
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;
}
printf("%s", CSR_HOME);
- printf("%c\n", anichar[currcms % MAXANI]); /* funny animation */
+ printf("%02d\n", frame_count++); /* rolling display update counter */
+ frame_count %= 100;
for (i=0; i < 2048; i++) {
if (diffsec > 10)
diffsec = 9, diffusec = 999999;
- printf("%ld.%06ld %3x ", diffsec, diffusec, id);
+ printf("%ld.%06ld %3X ", diffsec, diffusec, id);
if (binary) {