On 03.11.20 18:01, Marc Kleine-Budde wrote:
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 };
I've omitted this change as a static variable is initialized with zero
by default.
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
Added the {}'s and committed the patch on
https://github.com/hartkopp/can-utils.
Also added some stuff to support 'fixed' raw DLC values in combination
with the '-8' option.
Thanks,
Oliver
}
}
@@ -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