fprintf(stderr, " -c (increment color mode level)\n");
fprintf(stderr, " -i (binary output - may exceed 80 chars/line)\n");
fprintf(stderr, " -a (enable additional ASCII output)\n");
+ fprintf(stderr, " -S (swap byte order in printed CAN data[] - marked with '%c' )\n", SWAP_DELIMITER);
fprintf(stderr, " -s <level> (silent mode - %d: off (default) %d: animation %d: silent)\n", SILENT_OFF, SILENT_ANI, SILENT_ON);
fprintf(stderr, " -b <can> (bridge mode - send received frames to <can>)\n");
fprintf(stderr, " -B <can> (bridge mode - like '-b' with disabled loopback)\n");
last_tv.tv_sec = 0;
last_tv.tv_usec = 0;
- while ((opt = getopt(argc, argv, "t:cias:b:B:lLh?")) != -1) {
+ while ((opt = getopt(argc, argv, "t:ciaSs:b:B:lLh?")) != -1) {
switch (opt) {
case 't':
timestamp = optarg[0];
view |= CANLIB_VIEW_ASCII;
break;
+ case 'S':
+ view |= CANLIB_VIEW_SWAP;
+ break;
+
case 's':
silent = atoi(optarg);
if (silent > SILENT_ON) {
exit(0);
}
+ if (logfrmt && view) {
+ fprintf(stderr, "Log file format selected: Please disable ASCII/BINARY/SWAP options!\n");
+ exit(0);
+ }
+
if (silent == SILENT_INI) {
if (log) {
printf("\nDisabled standard output while logging.");
if (view & CANLIB_VIEW_BINARY) {
dlen = 9; /* _10101010 */
- for (i = 0; i < dlc; i++) {
- buf[offset++] = ' ';
- for (j = 7; j >= 0; j--)
- buf[offset++] = (1<<j & cf->data[i])?'1':'0';
+ if (view & CANLIB_VIEW_SWAP) {
+ for (i = dlc - 1; i >= 0; i--) {
+ buf[offset++] = (i == dlc-1)?' ':SWAP_DELIMITER;
+ for (j = 7; j >= 0; j--)
+ buf[offset++] = (1<<j & cf->data[i])?'1':'0';
+ }
+ } else {
+ for (i = 0; i < dlc; i++) {
+ buf[offset++] = ' ';
+ for (j = 7; j >= 0; j--)
+ buf[offset++] = (1<<j & cf->data[i])?'1':'0';
+ }
}
buf[offset] = 0; /* terminate string */
} else {
dlen = 3; /* _AA */
- for (i = 0; i < dlc; i++) {
- sprintf(buf+offset, " %02X", cf->data[i]);
- offset += dlen;
+ if (view & CANLIB_VIEW_SWAP) {
+ for (i = dlc - 1; i >= 0; i--) {
+ sprintf(buf+offset, "%c%02X",
+ (i == dlc-1)?' ':SWAP_DELIMITER,
+ cf->data[i]);
+ offset += dlen;
+ }
+ } else {
+ for (i = 0; i < dlc; i++) {
+ sprintf(buf+offset, " %02X", cf->data[i]);
+ offset += dlen;
+ }
}
}
sprintf(buf+offset, "%*s", dlen*(8-dlc)+13, "ERRORFRAME");
else if (view & CANLIB_VIEW_ASCII) {
j = dlen*(8-dlc)+4;
- sprintf(buf+offset, "%*s", j, "'");
- offset += j;
-
- for (i = 0; i < dlc; i++)
- if ((cf->data[i] > 0x1F) && (cf->data[i] < 0x7F))
- buf[offset++] = cf->data[i];
- else
- buf[offset++] = '.';
-
- sprintf(buf+offset, "'");
+ if (view & CANLIB_VIEW_SWAP) {
+ sprintf(buf+offset, "%*s", j, "`");
+ offset += j;
+ for (i = dlc - 1; i >= 0; i--)
+ if ((cf->data[i] > 0x1F) && (cf->data[i] < 0x7F))
+ buf[offset++] = cf->data[i];
+ else
+ buf[offset++] = '.';
+
+ sprintf(buf+offset, "`");
+ } else {
+ sprintf(buf+offset, "%*s", j, "'");
+ offset += j;
+ for (i = 0; i < dlc; i++)
+ if ((cf->data[i] > 0x1F) && (cf->data[i] < 0x7F))
+ buf[offset++] = cf->data[i];
+ else
+ buf[offset++] = '.';
+
+ sprintf(buf+offset, "'");
+ }
}
}
* Examples:
*
* 123# -> standard CAN-Id = 0x123, dlc = 0
- * 12345678# -> exended CAN-Id = 0x12345678, dlc = 0
+ * 12345678# -> extended CAN-Id = 0x12345678, dlc = 0
* 123#R -> standard CAN-Id = 0x123, dlc = 0, RTR-frame
* 7A1#r -> standard CAN-Id = 0x7A1, dlc = 0, RTR-frame
*
#define CANLIB_VIEW_ASCII 0x1
#define CANLIB_VIEW_BINARY 0x2
+#define CANLIB_VIEW_SWAP 0x4
+
+#define SWAP_DELIMITER '`'
void fprint_long_canframe(FILE *stream , struct can_frame *cf, char *eol, int view);
void sprint_long_canframe(char *buf , struct can_frame *cf, int view);