cangen: added -b switch enabling bitrate switch in canfd frames.

Signed-off-by: Sven Schmitt <sven.schmitt@gmx.net>
Acked-by: Oliver Hartkopp <socketcan@hartkopp.net>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
pull/16/head
Sven Schmitt 2015-10-11 21:08:45 +02:00 committed by Marc Kleine-Budde
parent 3f04e8a1fe
commit 4a154cf3c4
1 changed files with 15 additions and 3 deletions

View File

@ -84,8 +84,10 @@ void print_usage(char *prg)
fprintf(stderr, " -e (generate extended frame mode " fprintf(stderr, " -e (generate extended frame mode "
"(EFF) CAN frames)\n"); "(EFF) CAN frames)\n");
fprintf(stderr, " -f (generate CAN FD CAN frames)\n"); fprintf(stderr, " -f (generate CAN FD CAN frames)\n");
fprintf(stderr, " -b (generate CAN FD CAN frames"
" with bitrate switch (BRS))\n");
fprintf(stderr, " -R (send RTR frame)\n"); fprintf(stderr, " -R (send RTR frame)\n");
fprintf(stderr, " -m (mix -e -f -R frames)\n"); fprintf(stderr, " -m (mix -e -f -b -R frames)\n");
fprintf(stderr, " -I <mode> (CAN ID" fprintf(stderr, " -I <mode> (CAN ID"
" generation mode - see below)\n"); " generation mode - see below)\n");
fprintf(stderr, " -L <mode> (CAN data length code (dlc)" fprintf(stderr, " -L <mode> (CAN data length code (dlc)"
@ -136,6 +138,7 @@ int main(int argc, char **argv)
unsigned char ignore_enobufs = 0; unsigned char ignore_enobufs = 0;
unsigned char extended = 0; unsigned char extended = 0;
unsigned char canfd = 0; unsigned char canfd = 0;
unsigned char brs = 0;
unsigned char mix = 0; unsigned char mix = 0;
unsigned char id_mode = MODE_RANDOM; unsigned char id_mode = MODE_RANDOM;
unsigned char data_mode = MODE_RANDOM; unsigned char data_mode = MODE_RANDOM;
@ -170,7 +173,7 @@ int main(int argc, char **argv)
signal(SIGHUP, sigterm); signal(SIGHUP, sigterm);
signal(SIGINT, sigterm); signal(SIGINT, sigterm);
while ((opt = getopt(argc, argv, "ig:efmI:L:D:xp:n:vRh?")) != -1) { while ((opt = getopt(argc, argv, "ig:ebfmI:L:D:xp:n:vRh?")) != -1) {
switch (opt) { switch (opt) {
case 'i': case 'i':
@ -189,6 +192,11 @@ int main(int argc, char **argv)
canfd = 1; canfd = 1;
break; break;
case 'b':
brs = 1; /* bitrate switch implies CAN FD */
canfd = 1;
break;
case 'm': case 'm':
mix = 1; mix = 1;
canfd = 1; /* to switch the socket into CAN FD mode */ canfd = 1; /* to switch the socket into CAN FD mode */
@ -356,6 +364,8 @@ int main(int argc, char **argv)
if (canfd){ if (canfd){
mtu = CANFD_MTU; mtu = CANFD_MTU;
maxdlen = CANFD_MAX_DLEN; maxdlen = CANFD_MAX_DLEN;
if (brs)
frame.flags |= CANFD_BRS;
} else { } else {
mtu = CAN_MTU; mtu = CAN_MTU;
maxdlen = CAN_MAX_DLEN; maxdlen = CAN_MAX_DLEN;
@ -476,7 +486,9 @@ resend:
i = random(); i = random();
extended = i&1; extended = i&1;
canfd = i&2; canfd = i&2;
rtr_frame = ((i&12) == 12); /* reduce RTR frames to 1/4 */ if (canfd)
brs = i&4;
rtr_frame = ((i&24) == 24); /* reduce RTR frames to 1/4 */
} }
} }