[PATCH] cangen: allow DLC > 8 in increment generation mode if -8 option is given

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [Automotive Discussions]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]     [CAN Bus]

  Powered by Linux