From 1463ee4ce48f638edef69ee430a3ef4dc9acc17e Mon Sep 17 00:00:00 2001 From: Oliver Hartkopp Date: Fri, 24 Sep 2010 18:23:42 +0000 Subject: [PATCH] Added support for inverted CAN ID filters. --- cangw.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/cangw.c b/cangw.c index ee063e9..d6e9668 100644 --- a/cangw.c +++ b/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); -- 2.39.2