cangen: add possibility to generate random ID odd/even

Use this for stress testing, when sending with two CAN controllers on
the same CAN bus to avoid broken CAN frames due sending the same
CAN-id.
pull/276/head
Thomas Kopp 2020-04-30 22:14:37 +02:00 committed by Marc Kleine-Budde
parent eb66451df2
commit 9378b91c50
1 changed files with 12 additions and 0 deletions

View File

@ -72,6 +72,8 @@
#define MODE_RANDOM 0 #define MODE_RANDOM 0
#define MODE_INCREMENT 1 #define MODE_INCREMENT 1
#define MODE_FIX 2 #define MODE_FIX 2
#define MODE_RANDOM_EVEN 3
#define MODE_RANDOM_ODD 4
extern int optind, opterr, optopt; extern int optind, opterr, optopt;
@ -115,6 +117,8 @@ void print_usage(char *prg)
"printing sent CAN frames)\n\n"); "printing sent CAN frames)\n\n");
fprintf(stderr, "Generation modes:\n"); fprintf(stderr, "Generation modes:\n");
fprintf(stderr, " 'r' => random values (default)\n"); fprintf(stderr, " 'r' => random values (default)\n");
fprintf(stderr, " 'e' => random values, even ID\n");
fprintf(stderr, " 'o' => random values, odd ID\n");
fprintf(stderr, " 'i' => increment values\n"); fprintf(stderr, " 'i' => increment values\n");
fprintf(stderr, " <value> => fixed value (in hexadecimal for -I and -D)\n\n"); fprintf(stderr, " <value> => fixed value (in hexadecimal for -I and -D)\n\n");
fprintf(stderr, "When incrementing the CAN data the data length code " fprintf(stderr, "When incrementing the CAN data the data length code "
@ -227,6 +231,10 @@ int main(int argc, char **argv)
id_mode = MODE_RANDOM; id_mode = MODE_RANDOM;
} else if (optarg[0] == 'i') { } else if (optarg[0] == 'i') {
id_mode = MODE_INCREMENT; id_mode = MODE_INCREMENT;
} else if (optarg[0] == 'e') {
id_mode = MODE_RANDOM_EVEN;
} else if (optarg[0] == 'o') {
id_mode = MODE_RANDOM_ODD;
} else { } else {
id_mode = MODE_FIX; id_mode = MODE_FIX;
frame.can_id = strtoul(optarg, NULL, 16); frame.can_id = strtoul(optarg, NULL, 16);
@ -412,6 +420,10 @@ int main(int argc, char **argv)
if (id_mode == MODE_RANDOM) if (id_mode == MODE_RANDOM)
frame.can_id = random(); frame.can_id = random();
else if (id_mode == MODE_RANDOM_EVEN)
frame.can_id = random() & ~0x1;
else if (id_mode == MODE_RANDOM_ODD)
frame.can_id = random() | 0x1;
if (extended) { if (extended) {
frame.can_id &= CAN_EFF_MASK; frame.can_id &= CAN_EFF_MASK;