-/*
- * $Id$
- */
-
/*
* log2long.c - convert compact CAN frame representation into user readable
*
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions, the following disclaimer and
- * the referenced file 'COPYING'.
+ * notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* Alternatively, provided that this notice is retained in full, this
* software may be distributed under the terms of the GNU General
- * Public License ("GPL") version 2 as distributed in the 'COPYING'
- * file from the main directory of the linux kernel source.
+ * Public License ("GPL") version 2, in which case the provisions of the
+ * GPL apply INSTEAD OF those given above.
*
* The provided data structures and external interfaces from this code
* are not restricted to be used by modules with a GPL compatible license.
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*
- * Send feedback to <socketcan-users@lists.berlios.de>
+ * Send feedback to <linux-can@vger.kernel.org>
*
*/
#include "lib.h"
+#define COMMENTSZ 200
+#define BUFSZ (sizeof("(1345212884.318850)") + IFNAMSIZ + 4 + CL_CFSZ + COMMENTSZ) /* for one line in the logfile */
+
int main(int argc, char **argv)
{
- char buf[100], timestamp[100], device[100], ascframe[100];
- struct can_frame cf;
+ char buf[BUFSZ], timestamp[BUFSZ], device[BUFSZ], ascframe[BUFSZ];
+ struct canfd_frame cf;
+ int mtu, maxdlen;
+
+ while (fgets(buf, BUFSZ-1, stdin)) {
+ if (sscanf(buf, "%s %s %s", timestamp, device, ascframe) != 3)
+ return 1;
+
+ mtu = parse_canframe(ascframe, &cf);
+ if (mtu == CAN_MTU)
+ maxdlen = CAN_MAX_DLEN;
+ else if (mtu == CANFD_MTU)
+ maxdlen = CANFD_MAX_DLEN;
+ else {
+ fprintf(stderr, "read: incomplete CAN frame\n");
+ return 1;
+ }
+
+ sprint_long_canframe(ascframe, &cf,
+ (CANLIB_VIEW_INDENT_SFF | CANLIB_VIEW_ASCII),
+ maxdlen); /* with ASCII output */
- while (fgets(buf, 99, stdin)) {
- if (sscanf(buf, "%s %s %s", timestamp, device, ascframe) != 3)
- return 1;
- if (parse_canframe(ascframe, &cf))
- return 1;
- sprint_long_canframe(ascframe, &cf, 1); /* with ASCII output */
- printf("%s %s %s\n", timestamp, device, ascframe);
- }
+ printf("%s %s %s\n", timestamp, device, ascframe);
+ }
- return 0;
+ return 0;
}