fprintf(stderr, " -e (generate extended frame mode "
"(EFF) 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, " -m (mix -e -f -R frames)\n");
+ fprintf(stderr, " -m (mix -e -f -b -R frames)\n");
fprintf(stderr, " -I <mode> (CAN ID"
" generation mode - see below)\n");
fprintf(stderr, " -L <mode> (CAN data length code (dlc)"
unsigned char ignore_enobufs = 0;
unsigned char extended = 0;
unsigned char canfd = 0;
+ unsigned char brs = 0;
unsigned char mix = 0;
unsigned char id_mode = MODE_RANDOM;
unsigned char data_mode = MODE_RANDOM;
signal(SIGHUP, 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) {
case 'i':
canfd = 1;
break;
+ case 'b':
+ brs = 1; /* bitrate switch implies CAN FD */
+ canfd = 1;
+ break;
+
case 'm':
mix = 1;
canfd = 1; /* to switch the socket into CAN FD mode */
}
while (running) {
+ frame.flags = 0;
if (count && (--count == 0))
running = 0;
if (canfd){
mtu = CANFD_MTU;
maxdlen = CANFD_MAX_DLEN;
+ if (brs)
+ frame.flags |= CANFD_BRS;
} else {
mtu = CAN_MTU;
maxdlen = CAN_MAX_DLEN;
i = random();
extended = i&1;
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 */
}
}