cangen: support ESI bit for CAN FD frame generation
The CAN FD frames support BTR and ESI as special flags. While BTR could be generated by cangen the ESI bit could not be generated so far. Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net>pull/203/head
parent
61dbb56ef6
commit
7729c046c5
18
cangen.c
18
cangen.c
|
|
@ -89,8 +89,10 @@ void print_usage(char *prg)
|
|||
fprintf(stderr, " -f (generate CAN FD CAN frames)\n");
|
||||
fprintf(stderr, " -b (generate CAN FD CAN frames"
|
||||
" with bitrate switch (BRS))\n");
|
||||
fprintf(stderr, " -E (generate CAN FD CAN frames"
|
||||
" with error state (ESI))\n");
|
||||
fprintf(stderr, " -R (send RTR frame)\n");
|
||||
fprintf(stderr, " -m (mix -e -f -b -R frames)\n");
|
||||
fprintf(stderr, " -m (mix -e -f -b -E -R frames)\n");
|
||||
fprintf(stderr, " -I <mode> (CAN ID"
|
||||
" generation mode - see below)\n");
|
||||
fprintf(stderr, " -L <mode> (CAN data length code (dlc)"
|
||||
|
|
@ -145,6 +147,7 @@ int main(int argc, char **argv)
|
|||
unsigned char extended = 0;
|
||||
unsigned char canfd = 0;
|
||||
unsigned char brs = 0;
|
||||
unsigned char esi = 0;
|
||||
unsigned char mix = 0;
|
||||
unsigned char id_mode = MODE_RANDOM;
|
||||
unsigned char data_mode = MODE_RANDOM;
|
||||
|
|
@ -181,7 +184,7 @@ int main(int argc, char **argv)
|
|||
signal(SIGHUP, sigterm);
|
||||
signal(SIGINT, sigterm);
|
||||
|
||||
while ((opt = getopt(argc, argv, "ig:ebfmI:L:D:xp:n:c:vRh?")) != -1) {
|
||||
while ((opt = getopt(argc, argv, "ig:ebEfmI:L:D:xp:n:c:vRh?")) != -1) {
|
||||
switch (opt) {
|
||||
|
||||
case 'i':
|
||||
|
|
@ -205,6 +208,11 @@ int main(int argc, char **argv)
|
|||
canfd = 1;
|
||||
break;
|
||||
|
||||
case 'E':
|
||||
esi = 1; /* error state indicator implies CAN FD */
|
||||
canfd = 1;
|
||||
break;
|
||||
|
||||
case 'm':
|
||||
mix = 1;
|
||||
canfd = 1; /* to switch the socket into CAN FD mode */
|
||||
|
|
@ -379,6 +387,8 @@ int main(int argc, char **argv)
|
|||
maxdlen = CANFD_MAX_DLEN;
|
||||
if (brs)
|
||||
frame.flags |= CANFD_BRS;
|
||||
if (esi)
|
||||
frame.flags |= CANFD_ESI;
|
||||
} else {
|
||||
mtu = CAN_MTU;
|
||||
maxdlen = CAN_MAX_DLEN;
|
||||
|
|
@ -504,8 +514,10 @@ resend:
|
|||
i = random();
|
||||
extended = i&1;
|
||||
canfd = i&2;
|
||||
if (canfd)
|
||||
if (canfd) {
|
||||
brs = i&4;
|
||||
esi = i&8;
|
||||
}
|
||||
rtr_frame = ((i&24) == 24); /* reduce RTR frames to 1/4 */
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue