]> rtime.felk.cvut.cz Git - can-utils.git/commitdiff
cangen: added -b switch enabling bitrate switch in canfd frames.
authorSven Schmitt <sven.schmitt@gmx.net>
Sun, 11 Oct 2015 19:08:45 +0000 (21:08 +0200)
committerMarc Kleine-Budde <mkl@pengutronix.de>
Wed, 14 Oct 2015 19:22:35 +0000 (21:22 +0200)
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>
cangen.c

index eb898f15f626e7e53732c7e4f4e6a97554d1a6ee..cd2228e1949c7f63fde814142a86c25e11b737c3 100644 (file)
--- a/cangen.c
+++ b/cangen.c
@@ -84,8 +84,10 @@ void print_usage(char *prg)
        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)"
@@ -136,6 +138,7 @@ int main(int argc, char **argv)
        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;
@@ -170,7 +173,7 @@ int main(int argc, char **argv)
        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':
@@ -189,6 +192,11 @@ int main(int argc, char **argv)
                        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 */
@@ -356,6 +364,8 @@ int main(int argc, char **argv)
                if (canfd){
                        mtu = CANFD_MTU;
                        maxdlen = CANFD_MAX_DLEN;
+                       if (brs)
+                               frame.flags |= CANFD_BRS;
                } else {
                        mtu = CAN_MTU;
                        maxdlen = CAN_MAX_DLEN;
@@ -476,7 +486,9 @@ resend:
                        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 */
                }
        }