-/*
- * $Id$
- */
-
/*
* lib.c - library for command line tools
*
if((cs[idx] == 'R') || (cs[idx] == 'r')){ /* RTR frame */
cf->can_id |= CAN_RTR_FLAG;
+
+ /* check for optional DLC value for CAN 2.0B frames */
+ if(cs[++idx] && (tmp = asc2nibble(cs[idx])) <= CAN_MAX_DLC)
+ cf->len = tmp;
+
return ret;
}
for (i=0, dlen=0; i < maxdlen; i++){
- if(cs[idx] == DATA_SEPERATOR) /* skip (optional) seperator */
+ if(cs[idx] == DATA_SEPERATOR) /* skip (optional) separator */
idx++;
if(idx >= len) /* end of string => end of data */
/* standard CAN frames may have RTR enabled. There are no ERR frames with RTR */
if (maxdlen == CAN_MAX_DLEN && cf->can_id & CAN_RTR_FLAG) {
- sprintf(buf+offset, "R");
+
+ /* print a given CAN 2.0B DLC if it's not zero */
+ if (cf->len && cf->len <= CAN_MAX_DLC)
+ sprintf(buf+offset, "R%d", cf->len);
+ else
+ sprintf(buf+offset, "R");
+
return;
}
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) {