summaryrefslogtreecommitdiff
path: root/src/console
diff options
context:
space:
mode:
authorChristian Muck <christian.muck@bmw.de>2011-04-11 15:41:05 +0200
committerChristian Muck <christian.muck@bmw.de>2011-04-11 15:41:05 +0200
commit760fb8a4daba3e403376099ce38aca8f88d695d3 (patch)
tree36b6f428cee8ba0af0fd50b3e44a3d4da9083a44 /src/console
parent5394c6fa5bf40d9bc8619026cbc4c306211a8499 (diff)
downloadDLT-daemon-760fb8a4daba3e403376099ce38aca8f88d695d3.tar.gz
Init of dlt daemon
Diffstat (limited to 'src/console')
-rwxr-xr-xsrc/console/CMakeLists.txt51
-rwxr-xr-xsrc/console/dlt-convert.c417
-rwxr-xr-xsrc/console/dlt-receive.c423
-rwxr-xr-xsrc/console/filter.txt3
4 files changed, 894 insertions, 0 deletions
diff --git a/src/console/CMakeLists.txt b/src/console/CMakeLists.txt
new file mode 100755
index 0000000..6cc03ac
--- /dev/null
+++ b/src/console/CMakeLists.txt
@@ -0,0 +1,51 @@
+#######
+# Dlt - Diagnostic Log and Trace
+# @licence make begin@
+ #
+ # Copyright (C) 2011, BMW AG - Alexander Wenzel <alexander.wenzel@bmw.de>
+ #
+ # This program is free software; you can redistribute it and/or modify it under the terms of the
+ # GNU Lesser General Public License, version 2.1, as published by the Free Software Foundation.
+ # This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
+ # the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
+ # Public License, version 2.1, for more details.
+ #
+ # You should have received a copy of the GNU Lesser General Public License, version 2.1, along
+ # with this program; if not, see <http://www.gnu.org/licenses/lgpl-2.1.html>.
+ #
+ # Note that the copyright holders assume that the GNU Lesser General Public License, version 2.1, may
+ # also be applicable to programs even in cases in which the program is not a library in the technical sense.
+ #
+ # Linking DLT statically or dynamically with other modules is making a combined work based on DLT. You may
+ # license such other modules under the GNU Lesser General Public License, version 2.1. If you do not want to
+ # license your linked modules under the GNU Lesser General Public License, version 2.1, you
+ # may use the program under the following exception.
+ #
+ # As a special exception, the copyright holders of DLT give you permission to combine DLT
+ # with software programs or libraries that are released under any license unless such a combination is not
+ # permitted by the license of such a software program or library. You may copy and distribute such a
+ # system following the terms of the GNU Lesser General Public License, version 2.1, including this
+ # special exception, for DLT and the licenses of the other code concerned.
+ #
+ # Note that people who make modified versions of DLT are not obligated to grant this special exception
+ # for their modified versions; it is their choice whether to do so. The GNU Lesser General Public License,
+ # version 2.1, gives permission to release a modified version without this exception; this exception
+ # also makes it possible to release a modified version which carries forward this exception.
+ #
+ # @licence end@
+########
+
+set(dlt_convert_SRCS dlt-convert)
+add_executable(dlt-convert ${dlt_convert_SRCS} ${dlt_most_SRCS})
+target_link_libraries(dlt-convert dlt ${EXPAT_LIBRARIES})
+set_target_properties(dlt-convert PROPERTIES LINKER_LANGUAGE C)
+
+set(dlt_receive_SRCS dlt-receive)
+add_executable(dlt-receive ${dlt_receive_SRCS} ${dlt_most_SRCS})
+target_link_libraries(dlt-receive dlt ${EXPAT_LIBRARIES})
+set_target_properties(dlt-receive PROPERTIES LINKER_LANGUAGE C)
+
+install(TARGETS dlt-convert dlt-receive
+ RUNTIME DESTINATION bin
+ COMPONENT base)
+
diff --git a/src/console/dlt-convert.c b/src/console/dlt-convert.c
new file mode 100755
index 0000000..e86912a
--- /dev/null
+++ b/src/console/dlt-convert.c
@@ -0,0 +1,417 @@
+/*
+ * Dlt Client console utilities - Diagnostic Log and Trace
+ * @licence app begin@
+ *
+ * Copyright (C) 2011, BMW AG - Alexander Wenzel <alexander.wenzel@bmw.de>
+ *
+ * This program is free software; you can redistribute it and/or modify it under the terms of the
+ * GNU Lesser General Public License, version 2.1, as published by the Free Software Foundation.
+ * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
+ * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
+ * Public License, version 2.1, for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License, version 2.1, along
+ * with this program; if not, see <http://www.gnu.org/licenses/lgpl-2.1.html>.
+ *
+ * Note that the copyright holders assume that the GNU Lesser General Public License, version 2.1, may
+ * also be applicable to programs even in cases in which the program is not a library in the technical sense.
+ *
+ * Linking DLT statically or dynamically with other modules is making a combined work based on DLT. You may
+ * license such other modules under the GNU Lesser General Public License, version 2.1. If you do not want to
+ * license your linked modules under the GNU Lesser General Public License, version 2.1, you
+ * may use the program under the following exception.
+ *
+ * As a special exception, the copyright holders of DLT give you permission to combine DLT
+ * with software programs or libraries that are released under any license unless such a combination is not
+ * permitted by the license of such a software program or library. You may copy and distribute such a
+ * system following the terms of the GNU Lesser General Public License, version 2.1, including this
+ * special exception, for DLT and the licenses of the other code concerned.
+ *
+ * Note that people who make modified versions of DLT are not obligated to grant this special exception
+ * for their modified versions; it is their choice whether to do so. The GNU Lesser General Public License,
+ * version 2.1, gives permission to release a modified version without this exception; this exception
+ * also makes it possible to release a modified version which carries forward this exception.
+ *
+ * @licence end@
+ */
+
+
+/*******************************************************************************
+** **
+** SRC-MODULE: dlt-convert.cpp **
+** **
+** TARGET : linux **
+** **
+** PROJECT : DLT **
+** **
+** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de **
+** Markus Klein **
+** **
+** PURPOSE : **
+** **
+** REMARKS : **
+** **
+** PLATFORM DEPENDANT [yes/no]: yes **
+** **
+** TO BE CHANGED BY USER [yes/no]: no **
+** **
+*******************************************************************************/
+
+/*******************************************************************************
+** Author Identity **
+********************************************************************************
+** **
+** Initials Name Company **
+** -------- ------------------------- ---------------------------------- **
+** aw Alexander Wenzel BMW **
+** mk Markus Klein Fraunhofer ESK **
+*******************************************************************************/
+
+/*******************************************************************************
+** Author Identity **
+********************************************************************************
+** **
+** Initials Name Company **
+** -------- ------------------------- ---------------------------------- **
+** aw Alexander Wenzel BMW **
+*******************************************************************************/
+
+/*******************************************************************************
+** Revision Control History **
+*******************************************************************************/
+
+/*
+ * $LastChangedRevision: 1670 $
+ * $LastChangedDate: 2011-04-08 15:12:06 +0200 (Fr, 08. Apr 2011) $
+ * $LastChangedBy$
+ Initials Date Comment
+ aw 13.01.2010 initial
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <ctype.h>
+
+#include <sys/stat.h>
+#include <fcntl.h>
+
+#include <sys/uio.h> /* writev() */
+
+#include "dlt_common.h"
+
+#define DLT_CONVERT_TEXTBUFSIZE 10024 /* Size of buffer for text output */
+
+/**
+ * Print usage information of tool.
+ */
+void usage()
+{
+ char version[DLT_CONVERT_TEXTBUFSIZE];
+
+ dlt_get_version(version);
+
+ printf("Usage: dlt-convert [options] [commands] file1 [file2]\n");
+ printf("Read DLT files, print DLT messages as ASCII and store the messages again.\n");
+ printf("Use filters to filter DLT messages.\n");
+ printf("Use Ranges and Output file to cut DLT files.\n");
+ printf("Use two files and Output file to join DLT files.\n");
+ printf("%s \n", version);
+ printf("Commands:\n");
+ printf(" -h Usage\n");
+ printf(" -a Print DLT file; payload as ASCII\n");
+ printf(" -x Print DLT file; payload as hex\n");
+ printf(" -m Print DLT file; payload as hex and ASCII\n");
+ printf(" -s Print DLT file; only headers\n");
+ printf(" -o filename Output messages in new DLT file\n");
+ printf("Options:\n");
+ printf(" -v Verbose mode\n");
+ printf(" -c Count number of messages\n");
+ printf(" -f filename Enable filtering of messages\n");
+ printf(" -b number First messages to be handled\n");
+ printf(" -e number Last message to be handled\n");
+ printf(" -w Follow dlt file while file is increasing\n");
+}
+
+/**
+ * Main function of tool.
+ */
+int main(int argc, char* argv[])
+{
+ int vflag = 0;
+ int cflag = 0;
+ int aflag = 0;
+ int sflag = 0;
+ int xflag = 0;
+ int mflag = 0;
+ int wflag = 0;
+ char *fvalue = 0;
+ char *bvalue = 0;
+ char *evalue = 0;
+ char *ovalue = 0;
+
+ int index;
+ int c;
+
+ DltFile file;
+ DltFilter filter;
+
+ int ohandle=-1;
+
+ int num, begin, end;
+
+ char text[DLT_CONVERT_TEXTBUFSIZE];
+
+ struct iovec iov[2];
+ int bytes_written;
+
+ opterr = 0;
+
+ while ((c = getopt (argc, argv, "vcashxmwf:b:e:o:")) != -1)
+ switch (c)
+ {
+ case 'v':
+ {
+ vflag = 1;
+ break;
+ }
+ case 'c':
+ {
+ cflag = 1;
+ break;
+ }
+ case 'a':
+ {
+ aflag = 1;
+ break;
+ }
+ case 's':
+ {
+ sflag = 1;
+ break;
+ }
+ case 'x':
+ {
+ xflag = 1;
+ break;
+ }
+ case 'm':
+ {
+ mflag = 1;
+ break;
+ }
+ case 'w':
+ {
+ wflag = 1;
+ break;
+ }
+ case 'h':
+ {
+ usage();
+ return -1;
+ }
+ case 'f':
+ {
+ fvalue = optarg;
+ break;
+ }
+ case 'b':
+ {
+ bvalue = optarg;
+ break;
+ }
+ case 'e':
+ {
+ evalue = optarg;
+ break;
+ }
+ case 'o':
+ {
+ ovalue = optarg;
+ break;
+ }
+ case '?':
+ {
+ if (optopt == 'f' || optopt == 'b' || optopt == 'e' || optopt == 'o')
+ {
+ fprintf (stderr, "Option -%c requires an argument.\n", optopt);
+ }
+ else if (isprint (optopt))
+ {
+ fprintf (stderr, "Unknown option `-%c'.\n", optopt);
+ }
+ else
+ {
+ fprintf (stderr, "Unknown option character `\\x%x'.\n",optopt);
+ }
+ /* unknown or wrong option used, show usage information and terminate */
+ usage();
+ return -1;
+ }
+ default:
+ {
+ abort();
+ }
+ }
+
+ /* initialise structure to use DLT file */
+ dlt_file_init(&file,vflag);
+
+ /* first parse filter file if filter parameter is used */
+ if (fvalue)
+ {
+ if (dlt_filter_load(&filter,fvalue,vflag)<0)
+ {
+ dlt_file_free(&file,vflag);
+ return -1;
+ }
+
+ dlt_file_set_filter(&file,&filter,vflag);
+ }
+
+ if (ovalue)
+ {
+ ohandle = open(ovalue,O_WRONLY|O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); /* mode: wb */
+ if (ohandle == -1)
+ {
+ dlt_file_free(&file,vflag);
+ fprintf(stderr,"ERROR: Output file %s cannot be opened!\n",ovalue);
+ return -1;
+ }
+
+ }
+
+ for (index = optind; index < argc; index++)
+ {
+ /* load, analyse data file and create index list */
+ if (dlt_file_open(&file,argv[index],vflag)>=0)
+ {
+ while (dlt_file_read(&file,vflag)>=0)
+ {
+ }
+ }
+
+ if (aflag || sflag || xflag || mflag || ovalue)
+ {
+ if (bvalue)
+ {
+ begin = atoi(bvalue);
+ }
+ else
+ {
+ begin = 0;
+ }
+
+ if (evalue && (wflag==0))
+ {
+ end = atoi(evalue);
+ }
+ else
+ {
+ end = file.counter-1;
+ }
+
+ if (begin<0 || begin>=file.counter)
+ {
+ fprintf(stderr,"ERROR: Selected first message %d is out of range!\n",begin);
+ return -1;
+ }
+ if (end<0 || end>=file.counter || end<begin)
+ {
+ fprintf(stderr,"ERROR: Selected end message %d is out of range!\n",end);
+ return -1;
+ }
+ for (num = begin; num <= end ;num++)
+ {
+ dlt_file_message(&file,num,vflag);
+
+ if (xflag)
+ {
+ printf("%d ",num);
+ dlt_message_print_hex(&(file.msg),text,DLT_CONVERT_TEXTBUFSIZE,vflag);
+ }
+ else if (aflag)
+ {
+ printf("%d ",num);
+
+ dlt_message_header(&(file.msg),text,DLT_CONVERT_TEXTBUFSIZE,vflag);
+
+ printf("%s ",text);
+
+ dlt_message_payload(&file.msg,text,DLT_CONVERT_TEXTBUFSIZE,DLT_OUTPUT_ASCII,vflag);
+
+ printf("[%s]\n",text);
+ }
+ else if (mflag)
+ {
+ printf("%d ",num);
+ dlt_message_print_mixed_plain(&(file.msg),text,DLT_CONVERT_TEXTBUFSIZE,vflag);
+ }
+ else if (sflag)
+ {
+ printf("%d ",num);
+
+ dlt_message_header(&(file.msg),text,DLT_CONVERT_TEXTBUFSIZE,vflag);
+
+ printf("%s \n",text);
+ }
+
+ /* if file output enabled write message */
+ if (ovalue)
+ {
+ iov[0].iov_base = file.msg.headerbuffer;
+ iov[0].iov_len = file.msg.headersize;
+ iov[1].iov_base = file.msg.databuffer;
+ iov[1].iov_len = file.msg.datasize;
+
+ bytes_written = writev(ohandle, iov, 2);
+ }
+
+ /* check for new messages if follow flag set */
+ if (wflag && num==end)
+ {
+ while (1)
+ {
+ while (dlt_file_read(&file,0)>=0)
+ {
+ }
+ if (end == (file.counter-1))
+ {
+ /* Sleep if no new message was received */
+ sleep(1);
+ }
+ else
+ {
+ /* set new end of log file and continue reading */
+ end = file.counter-1;
+ break;
+ }
+ }
+ }
+ }
+ }
+ if (cflag)
+ {
+ printf("Total number of messages: %d\n",file.counter_total);
+ if (file.filter)
+ {
+ printf("Filtered number of messages: %d\n",file.counter);
+ }
+ }
+ }
+ if (ovalue)
+ {
+ close(ohandle);
+ }
+ if (index == optind)
+ {
+ /* no file selected, show usage and terminate */
+ fprintf(stderr,"ERROR: No file selected\n");
+ usage();
+ return -1;
+ }
+
+ dlt_file_free(&file,vflag);
+
+ return 0;
+}
diff --git a/src/console/dlt-receive.c b/src/console/dlt-receive.c
new file mode 100755
index 0000000..e078d7d
--- /dev/null
+++ b/src/console/dlt-receive.c
@@ -0,0 +1,423 @@
+/*
+ * Dlt Client console utilities - Diagnostic Log and Trace
+ * @licence app begin@
+ *
+ * Copyright (C) 2011, BMW AG - Alexander Wenzel <alexander.wenzel@bmw.de>
+ *
+ * This program is free software; you can redistribute it and/or modify it under the terms of the
+ * GNU Lesser General Public License, version 2.1, as published by the Free Software Foundation.
+ * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
+ * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
+ * Public License, version 2.1, for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License, version 2.1, along
+ * with this program; if not, see <http://www.gnu.org/licenses/lgpl-2.1.html>.
+ *
+ * Note that the copyright holders assume that the GNU Lesser General Public License, version 2.1, may
+ * also be applicable to programs even in cases in which the program is not a library in the technical sense.
+ *
+ * Linking DLT statically or dynamically with other modules is making a combined work based on DLT. You may
+ * license such other modules under the GNU Lesser General Public License, version 2.1. If you do not want to
+ * license your linked modules under the GNU Lesser General Public License, version 2.1, you
+ * may use the program under the following exception.
+ *
+ * As a special exception, the copyright holders of DLT give you permission to combine DLT
+ * with software programs or libraries that are released under any license unless such a combination is not
+ * permitted by the license of such a software program or library. You may copy and distribute such a
+ * system following the terms of the GNU Lesser General Public License, version 2.1, including this
+ * special exception, for DLT and the licenses of the other code concerned.
+ *
+ * Note that people who make modified versions of DLT are not obligated to grant this special exception
+ * for their modified versions; it is their choice whether to do so. The GNU Lesser General Public License,
+ * version 2.1, gives permission to release a modified version without this exception; this exception
+ * also makes it possible to release a modified version which carries forward this exception.
+ *
+ * @licence end@
+ */
+
+
+/*******************************************************************************
+** **
+** SRC-MODULE: dlt-receive.cpp **
+** **
+** TARGET : linux **
+** **
+** PROJECT : DLT **
+** **
+** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de **
+** Markus Klein **
+** **
+** PURPOSE : **
+** **
+** REMARKS : **
+** **
+** PLATFORM DEPENDANT [yes/no]: yes **
+** **
+** TO BE CHANGED BY USER [yes/no]: no **
+** **
+*******************************************************************************/
+
+/*******************************************************************************
+** Author Identity **
+********************************************************************************
+** **
+** Initials Name Company **
+** -------- ------------------------- ---------------------------------- **
+** aw Alexander Wenzel BMW **
+** mk Markus Klein Fraunhofer ESK **
+*******************************************************************************/
+
+/*******************************************************************************
+** Revision Control History **
+*******************************************************************************/
+
+/*
+ * $LastChangedRevision: 1670 $
+ * $LastChangedDate: 2011-04-08 15:12:06 +0200 (Fr, 08. Apr 2011) $
+ * $LastChangedBy$
+ Initials Date Comment
+ aw 13.01.2010 initial
+ */
+
+#include <ctype.h> /* for isprint() */
+#include <stdlib.h> /* for atoi() */
+#include <sys/stat.h> /* for S_IRUSR, S_IWUSR, S_IRGRP, S_IROTH */
+#include <fcntl.h> /* for open() */
+#include <sys/uio.h> /* for writev() */
+
+#include "dlt_client.h"
+
+#define DLT_RECEIVE_TEXTBUFSIZE 10024 /* Size of buffer for text output */
+
+#define DLT_RECEIVE_ECU_ID "RECV"
+
+/* Function prototypes */
+int dlt_receive_message_callback(DltMessage *message, void *data);
+
+typedef struct {
+ int aflag;
+ int sflag;
+ int xflag;
+ int mflag;
+ int vflag;
+ int yflag;
+ char *ovalue;
+ char *fvalue;
+ char *evalue;
+ int bvalue;
+ char ecuid[4];
+ int ohandle;
+ DltFile file;
+ DltFilter filter;
+} DltReceiveData;
+
+/**
+ * Print usage information of tool.
+ */
+void usage()
+{
+ char version[255];
+
+ dlt_get_version(version);
+
+ printf("Usage: dlt-receive [options] hostname/serial_device_name\n");
+ printf("Receive DLT messages from DLT daemon and print or store the messages.\n");
+ printf("Use filters to filter received messages.\n");
+ printf("%s \n", version);
+ printf("Options:\n");
+ printf(" -a Print DLT messages; payload as ASCII\n");
+ printf(" -x Print DLT messages; payload as hex\n");
+ printf(" -m Print DLT messages; payload as hex and ASCII\n");
+ printf(" -s Print DLT messages; only headers\n");
+ printf(" -v Verbose mode\n");
+ printf(" -h Usage\n");
+ printf(" -y Serial device mode\n");
+ printf(" -b baudrate Serial device baudrate (Default: 115200)\n");
+ printf(" -e ecuid Set ECU ID (Default: RECV)\n");
+ printf(" -o filename Output messages in new DLT file\n");
+ printf(" -f filename Enable filtering of messages\n");
+}
+
+/**
+ * Main function of tool.
+ */
+int main(int argc, char* argv[])
+{
+ DltClient dltclient;
+ DltReceiveData dltdata;
+ int c;
+ int index;
+
+ /* Initialize dltdata */
+ dltdata.aflag = 0;
+ dltdata.sflag = 0;
+ dltdata.xflag = 0;
+ dltdata.mflag = 0;
+ dltdata.vflag = 0;
+ dltdata.yflag = 0;
+ dltdata.ovalue = 0;
+ dltdata.fvalue = 0;
+ dltdata.evalue = 0;
+ dltdata.bvalue = 0;
+ dltdata.ohandle=-1;
+
+ /* Fetch command line arguments */
+ opterr = 0;
+
+ while ((c = getopt (argc, argv, "vashyxmf:o:e:b:")) != -1)
+ switch (c)
+ {
+ case 'v':
+ {
+ dltdata.vflag = 1;
+ break;
+ }
+ case 'a':
+ {
+ dltdata.aflag = 1;
+ break;
+ }
+ case 's':
+ {
+ dltdata.sflag = 1;
+ break;
+ }
+ case 'x':
+ {
+ dltdata.xflag = 1;
+ break;
+ }
+ case 'm':
+ {
+ dltdata.mflag = 1;
+ break;
+ }
+ case 'h':
+ {
+ usage();
+ return -1;
+ }
+ case 'y':
+ {
+ dltdata.yflag = 1;
+ break;
+ }
+ case 'f':
+ {
+ dltdata.fvalue = optarg;
+ break;
+ }
+ case 'o':
+ {
+ dltdata.ovalue = optarg;
+ break;
+ }
+ case 'e':
+ {
+ dltdata.evalue = optarg;
+ break;
+ }
+ case 'b':
+ {
+ dltdata.bvalue = atoi(optarg);
+ break;
+ }
+ case '?':
+ {
+ if (optopt == 'o' || optopt == 'f')
+ {
+ fprintf (stderr, "Option -%c requires an argument.\n", optopt);
+ }
+ else if (isprint (optopt))
+ {
+ fprintf (stderr, "Unknown option `-%c'.\n", optopt);
+ }
+ else
+ {
+ fprintf (stderr, "Unknown option character `\\x%x'.\n",optopt);
+ }
+ /* unknown or wrong option used, show usage information and terminate */
+ usage();
+ return -1;
+ }
+ default:
+ {
+ abort ();
+ }
+ }
+
+ /* Initialize DLT Client */
+ dlt_client_init(&dltclient, dltdata.vflag);
+
+ /* Register callback to be called when message was received */
+ dlt_client_register_message_callback(dlt_receive_message_callback);
+
+ /* Setup DLT Client structure */
+ dltclient.serial_mode = dltdata.yflag;
+
+ if (dltclient.serial_mode==0)
+ {
+ for (index = optind; index < argc; index++)
+ {
+ dltclient.servIP = argv[index];
+ }
+
+ if (dltclient.servIP == 0)
+ {
+ /* no hostname selected, show usage and terminate */
+ fprintf(stderr,"ERROR: No hostname selected\n");
+ usage();
+ dlt_client_cleanup(&dltclient,dltdata.vflag);
+ return -1;
+ }
+ }
+ else
+ {
+ for (index = optind; index < argc; index++)
+ {
+ dltclient.serialDevice = argv[index];
+ }
+
+ if (dltclient.serialDevice == 0)
+ {
+ /* no serial device name selected, show usage and terminate */
+ fprintf(stderr,"ERROR: No serial device name specified\n");
+ usage();
+ return -1;
+ }
+
+ dlt_client_setbaudrate(&dltclient,dltdata.bvalue);
+ }
+
+ /* initialise structure to use DLT file */
+ dlt_file_init(&(dltdata.file),dltdata.vflag);
+
+ /* first parse filter file if filter parameter is used */
+ dlt_filter_init(&(dltdata.filter),dltdata.vflag);
+
+ if (dltdata.fvalue)
+ {
+ if (dlt_filter_load(&(dltdata.filter),dltdata.fvalue,dltdata.vflag)<0)
+ {
+ dlt_file_free(&(dltdata.file),dltdata.vflag);
+ return -1;
+ }
+
+ dlt_file_set_filter(&(dltdata.file),&(dltdata.filter),dltdata.vflag);
+ }
+
+ /* open DLT output file */
+ if (dltdata.ovalue)
+ {
+ dltdata.ohandle = open(dltdata.ovalue,O_WRONLY|O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); /* mode: wb */
+
+ if (dltdata.ohandle == -1)
+ {
+ dlt_file_free(&(dltdata.file),dltdata.vflag);
+ fprintf(stderr,"ERROR: Output file %s cannot be opened!\n",dltdata.ovalue);
+ return -1;
+ }
+ }
+
+ if (dltdata.evalue)
+ {
+ dlt_set_id(dltdata.ecuid,dltdata.evalue);
+ }
+ else
+ {
+ dlt_set_id(dltdata.ecuid,DLT_RECEIVE_ECU_ID);
+ }
+
+ /* Connect to TCP socket or open serial device */
+ if (dlt_client_connect(&dltclient, dltdata.vflag)!=-1)
+ {
+
+ /* Dlt Client Main Loop */
+ dlt_client_main_loop(&dltclient, &dltdata, dltdata.vflag);
+
+ /* Dlt Client Cleanup */
+ dlt_client_cleanup(&dltclient,dltdata.vflag);
+ }
+
+ /* dlt-receive cleanup */
+ if (dltdata.ovalue)
+ {
+ close(dltdata.ohandle);
+ }
+
+ dlt_file_free(&(dltdata.file),dltdata.vflag);
+
+ dlt_filter_free(&(dltdata.filter),dltdata.vflag);
+
+ return 0;
+}
+
+int dlt_receive_message_callback(DltMessage *message, void *data)
+{
+ DltReceiveData *dltdata;
+ static char text[DLT_RECEIVE_TEXTBUFSIZE];
+
+ struct iovec iov[2];
+ int bytes_written;
+
+ if ((message==0) || (data==0))
+ {
+ return -1;
+ }
+
+ dltdata = (DltReceiveData*)data;
+
+ /* prepare storage header */
+ if (DLT_IS_HTYP_WEID(message->standardheader->htyp))
+ {
+ dlt_set_storageheader(message->storageheader,message->headerextra.ecu);
+ }
+ else
+ {
+ dlt_set_storageheader(message->storageheader,dltdata->ecuid);
+ }
+
+ if ((dltdata->fvalue==0) || (dltdata->fvalue && dlt_message_filter_check(message,&(dltdata->filter),dltdata->vflag)==1))
+ {
+ /* if no filter set or filter is matching display message */
+ if (dltdata->xflag)
+ {
+ dlt_message_print_hex(message,text,DLT_RECEIVE_TEXTBUFSIZE,dltdata->vflag);
+ }
+ else if (dltdata->aflag)
+ {
+
+ dlt_message_header(message,text,DLT_RECEIVE_TEXTBUFSIZE,dltdata->vflag);
+
+ printf("%s ",text);
+
+ dlt_message_payload(message,text,DLT_RECEIVE_TEXTBUFSIZE,DLT_OUTPUT_ASCII,dltdata->vflag);
+
+ printf("[%s]\n",text);
+ }
+ else if (dltdata->mflag)
+ {
+ dlt_message_print_mixed_plain(message,text,DLT_RECEIVE_TEXTBUFSIZE,dltdata->vflag);
+ }
+ else if (dltdata->sflag)
+ {
+
+ dlt_message_header(message,text,DLT_RECEIVE_TEXTBUFSIZE,dltdata->vflag);
+
+ printf("%s \n",text);
+ }
+
+ /* if file output enabled write message */
+ if (dltdata->ovalue)
+ {
+ iov[0].iov_base = message->headerbuffer;
+ iov[0].iov_len = message->headersize;
+ iov[1].iov_base = message->databuffer;
+ iov[1].iov_len = message->datasize;
+
+ bytes_written = writev(dltdata->ohandle, iov, 2);
+ }
+ }
+
+ return 0;
+}
diff --git a/src/console/filter.txt b/src/console/filter.txt
new file mode 100755
index 0000000..0086b17
--- /dev/null
+++ b/src/console/filter.txt
@@ -0,0 +1,3 @@
+ABCD IJKL
+TEST LOG
+