On 11/3/20 5:51 PM, Vincent Mailhol wrote: > 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; nitpick: please use { } on the else side, too > } > } > > @@ -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; > } > } > Marc -- Pengutronix e.K. | Marc Kleine-Budde | Embedded Linux | https://www.pengutronix.de | Vertretung West/Dortmund | Phone: +49-231-2826-924 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
Attachment:
signature.asc
Description: OpenPGP digital signature