From: hartkopp Date: Fri, 24 Sep 2010 18:23:42 +0000 (+0000) Subject: Added support for inverted CAN ID filters. X-Git-Url: http://rtime.felk.cvut.cz/gitweb/socketcan-devel.git/commitdiff_plain/369f9e23b0a2e24260f23504ab9d40a520e98587 Added support for inverted CAN ID filters. git-svn-id: svn://svn.berlios.de//socketcan/trunk@1196 030b6a49-0b11-0410-94ab-b0dab22257f2 --- diff --git a/can-utils/cangw.c b/can-utils/cangw.c index ee063e9..d6e9668 100644 --- a/can-utils/cangw.c +++ b/can-utils/cangw.c @@ -203,7 +203,9 @@ void print_usage(char *prg) fprintf(stderr, " -p :[] (CRC8 checksum profile & parameters)\n"); fprintf(stderr, "\nValues are given and expected in hexadecimal values. Leading 0s can be omitted.\n"); fprintf(stderr, "\n"); - fprintf(stderr, " is a : CAN identifier filter\n"); + fprintf(stderr, " is a CAN identifier filter\n"); + fprintf(stderr, " : (matches when & mask == can_id & mask)\n"); + fprintf(stderr, " ~ (matches when & mask != can_id & mask)\n"); fprintf(stderr, "\n"); fprintf(stderr, " is a CAN frame modification instruction consisting of\n"); fprintf(stderr, "::..\n"); @@ -595,6 +597,11 @@ int main(int argc, char **argv) (long unsigned int *)&filter.can_id, (long unsigned int *)&filter.can_mask) == 2) { have_filter = 1; + } else if (sscanf(optarg, "%lx~%lx", + (long unsigned int *)&filter.can_id, + (long unsigned int *)&filter.can_mask) == 2) { + filter.can_id |= CAN_INV_FILTER; + have_filter = 1; } else { printf("Bad filter definition '%s'.\n", optarg); exit(1);