Currently, the -8 option allows DLCs greater than 8 in mix mode only. Add the option to also generate such DLCs in increment mode. e.g.: 'cangen -8 -Li can0' Signed-off-by: Vincent Mailhol <mailhol.vincent@xxxxxxxxxx> --- cangen.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/cangen.c b/cangen.c index 5c86f26..06a1931 100644 --- a/cangen.c +++ b/cangen.c @@ -171,7 +171,7 @@ int main(int argc, char **argv) struct pollfd fds; struct sockaddr_can addr; - static struct canfd_frame frame; + static struct canfd_frame frame = { 0 }; struct can_frame *ccf = (struct can_frame *)&frame; int nbytes; int i; @@ -386,7 +386,6 @@ int main(int argc, char **argv) while (running) { frame.flags = 0; - ccf->len8_dlc = 0; if (count && (--count == 0)) running = 0; @@ -428,7 +427,8 @@ int main(int argc, char **argv) ccf->len8_dlc = frame.len; frame.len = 8; /* for about 50% of the frames */ - } + } else + ccf->len8_dlc = 0; } } @@ -507,12 +507,20 @@ resend: if (dlc_mode == MODE_INCREMENT) { incdlc++; + incdlc %= CAN_MAX_RAW_DLC + 1; - if (canfd && !mix) { - incdlc &= 0xF; + if (canfd && !mix) frame.len = can_dlc2len(incdlc); + else if (len8_dlc) { + if (incdlc > CAN_MAX_DLEN) { + frame.len = CAN_MAX_DLEN; + ccf->len8_dlc = incdlc; + } else { + frame.len = incdlc; + ccf->len8_dlc = 0; + } } else { - incdlc %= 9; + incdlc %= CAN_MAX_DLEN + 1; frame.len = incdlc; } } -- 2.26.2