X-Git-Url: http://rtime.felk.cvut.cz/gitweb/socketcan-devel.git/blobdiff_plain/5d98b9d3cc77c81e2b36c481d39d459ef40f7790..369f9e23b0a2e24260f23504ab9d40a520e98587:/can-utils/cangw.c 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);