From fcbdf71f1af1d2baa7c17a1a009294534da84fac Mon Sep 17 00:00:00 2001 From: Oliver Hartkopp Date: Wed, 14 Nov 2012 19:59:18 +0100 Subject: [PATCH] Add new format option when mixing EFF/SFF frame output Added new view CANLIB_VIEW_INDENT_SFF flags to fix the sloppy output of fprint_long_canframe() when mixing EFF & SFF CAN identifiers. candump: Once an EFF frame is detected the indention is enabled. Signed-off-by: Oliver Hartkopp --- candump.c | 4 ++++ canplayer.c | 4 ++-- lib.c | 9 +++++++-- lib.h | 4 ++++ log2long.c | 2 +- 5 files changed, 18 insertions(+), 5 deletions(-) diff --git a/candump.c b/candump.c index 11be0ae..d6c7c01 100644 --- a/candump.c +++ b/candump.c @@ -673,6 +673,10 @@ int main(int argc, char **argv) idx = idx2dindex(addr.can_ifindex, s[i]); + /* once we detected a EFF frame indent SFF frames accordingly */ + if (frame.can_id & CAN_EFF_FLAG) + view |= CANLIB_VIEW_INDENT_SFF; + if (log) { /* log CAN frame with absolute timestamp & device */ fprintf(logfile, "(%ld.%06ld) ", tv.tv_sec, tv.tv_usec); diff --git a/canplayer.c b/canplayer.c index 7952177..626100c 100644 --- a/canplayer.c +++ b/canplayer.c @@ -455,9 +455,9 @@ int main(int argc, char **argv) printf("%s (%s) ", get_txname(device), device); if (txmtu == CAN_MTU) - fprint_long_canframe(stdout, &frame, "\n", 0, CAN_MAX_DLEN); + fprint_long_canframe(stdout, &frame, "\n", CANLIB_VIEW_INDENT_SFF, CAN_MAX_DLEN); else - fprint_long_canframe(stdout, &frame, "\n", 0, CANFD_MAX_DLEN); + fprint_long_canframe(stdout, &frame, "\n", CANLIB_VIEW_INDENT_SFF, CANFD_MAX_DLEN); } } diff --git a/lib.c b/lib.c index 927f064..c8aa84a 100644 --- a/lib.c +++ b/lib.c @@ -288,8 +288,13 @@ void sprint_long_canframe(char *buf , struct canfd_frame *cf, int view, int maxd sprintf(buf, "%08X ", cf->can_id & CAN_EFF_MASK); offset = 10; } else { - sprintf(buf, "%03X ", cf->can_id & CAN_SFF_MASK); - offset = 5; + if (view & CANLIB_VIEW_INDENT_SFF) { + sprintf(buf, " %03X ", cf->can_id & CAN_SFF_MASK); + offset = 10; + } else { + sprintf(buf, "%03X ", cf->can_id & CAN_SFF_MASK); + offset = 5; + } } if (maxdlen == CAN_MAX_DLEN) { diff --git a/lib.h b/lib.h index 695498b..435a2d0 100644 --- a/lib.h +++ b/lib.h @@ -171,6 +171,7 @@ void sprint_canframe(char *buf , struct canfd_frame *cf, int sep, int maxdlen); #define CANLIB_VIEW_BINARY 0x2 #define CANLIB_VIEW_SWAP 0x4 #define CANLIB_VIEW_ERROR 0x8 +#define CANLIB_VIEW_INDENT_SFF 0x10 #define SWAP_DELIMITER '`' @@ -189,6 +190,9 @@ void sprint_long_canframe(char *buf , struct canfd_frame *cf, int view, int maxd * 20001111 [7] C6 23 7B 32 69 98 3C ERRORFRAME -> (CAN_ERR_FLAG set) * 12345678 [03] 11 22 33 -> CAN FD with exended CAN-Id = 0x12345678, dlc = 3 * + * 123 [3] 11 22 33 -> CANLIB_VIEW_INDENT_SFF == 0 + * 123 [3] 11 22 33 -> CANLIB_VIEW_INDENT_SFF == set + * * Examples: * * // CAN FD frame with eol to STDOUT diff --git a/log2long.c b/log2long.c index 297d43f..04354e5 100644 --- a/log2long.c +++ b/log2long.c @@ -76,7 +76,7 @@ int main(int argc, char **argv) } sprint_long_canframe(ascframe, &cf, - CANLIB_VIEW_ASCII, + (CANLIB_VIEW_INDENT_SFF | CANLIB_VIEW_ASCII), maxdlen); /* with ASCII output */ printf("%s %s %s\n", timestamp, device, ascframe); -- 2.39.2