DLT Common API Wrapper.
authorAlexander Wenzel <Alexander.AW.Wenzel@bmw.de>
Fri, 14 Mar 2014 06:49:23 +0000 (07:49 +0100)
committerAlexander Wenzel <Alexander.AW.Wenzel@bmw.de>
Tue, 1 Apr 2014 07:44:46 +0000 (09:44 +0200)
Signed-off-by: Alexander Wenzel <Alexander.AW.Wenzel@bmw.de>
include/dlt/CMakeLists.txt
include/dlt/dlt_common_api.h [new file with mode: 0644]
src/examples/CMakeLists.txt
src/examples/dlt-example-user-common-api.c [new file with mode: 0644]

index 95e764d..76121dd 100644 (file)
@@ -14,6 +14,6 @@
 # @licence end@
 ########
 
-install(FILES dlt.h dlt_user.h dlt_user_macros.h dlt_client.h dlt_protocol.h dlt_common.h dlt_types.h dlt_version.h dlt_shm.h dlt_offline_trace.h dlt_filetransfer.h
+install(FILES dlt.h dlt_user.h dlt_user_macros.h dlt_client.h dlt_protocol.h dlt_common.h dlt_types.h dlt_version.h dlt_shm.h dlt_offline_trace.h dlt_filetransfer.h dlt_common_api.h
         DESTINATION include/dlt
        COMPONENT devel)
diff --git a/include/dlt/dlt_common_api.h b/include/dlt/dlt_common_api.h
new file mode 100644 (file)
index 0000000..83acac5
--- /dev/null
@@ -0,0 +1,241 @@
+/**\r
+ * @licence app begin@\r
+ * Copyright (C) 2014  BMW AG\r
+ *\r
+ * This file is part of GENIVI Project Dlt - Diagnostic Log and Trace console apps.\r
+ *\r
+ * Contributions are licensed to the GENIVI Alliance under one or more\r
+ * Contribution License Agreements.\r
+ *\r
+ * \copyright\r
+ * This Source Code Form is subject to the terms of the\r
+ * Mozilla Public License, v. 2.0. If a  copy of the MPL was not distributed with\r
+ * this file, You can obtain one at http://mozilla.org/MPL/2.0/.\r
+ *\r
+ *\r
+ * \author Alexander Wenzel <alexander.aw.wenzel@bmw.de> BMW 2011-2012\r
+ *\r
+ * \file dlt_common_api.h\r
+ * For further information see http://www.genivi.org/.\r
+ * @licence end@\r
+ */\r
+\r
+/*******************************************************************************\r
+**                                                                            **\r
+**  SRC-MODULE: dlt_commpn_api.h                                              **\r
+**                                                                            **\r
+**  TARGET    : linux                                                         **
+**                                                                            **
+**  PROJECT   : DLT                                                           **
+**                                                                            **
+**  AUTHOR    : Alexander Wenzel Alexander.AW.Wenzel@bmw.de                   **
+**                                                                            **
+**  PURPOSE   :                                                               **
+**                                                                            **
+**  REMARKS   :                                                               **
+**                                                                            **
+**  PLATFORM DEPENDANT [yes/no]: yes                                          **
+**                                                                            **
+**  TO BE CHANGED BY USER [yes/no]: no                                        **
+**                                                                            **
+*******************************************************************************/
+
+/*******************************************************************************
+**                      Author Identity                                       **
+********************************************************************************
+**                                                                            **
+** Initials     Name                       Company                            **
+** --------     -------------------------  ---------------------------------- **
+**  aw          Alexander Wenzel           BMW                                **
+*******************************************************************************/\r
+\r
+#ifndef DLT_COMMON_API_H\r
+#define DLT_COMMON_API_H\r
+
+#include "dlt.h"\r
+\r
+/**\r
+ * Create an object for a new context.\r
+ * Common API with DLT Embedded\r
+ * This macro has to be called first for every.\r
+ * @param CONTEXT object containing information about one special logging context\r
+ */\r
+/* #define DLT_DECLARE_CONTEXT(CONTEXT) */\r
+/* UNCHANGED */\r
+\r
+/**\r
+ * Use an object of a new context created in another module.\r
+ * Common API with DLT Embedded\r
+ * This macro has to be called first for every.\r
+ * @param CONTEXT object containing information about one special logging context\r
+ */\r
+/* #define DLT_IMPORT_CONTEXT(CONTEXT) */\r
+/* UNCHANGED */\r
+\r
+/**\r
+ * Register application.\r
+ * Common API with DLT Embedded\r
+ * @param APPID application id with maximal four characters\r
+ * @param DESCRIPTION ASCII string containing description\r
+ */\r
+/* #define DLT_REGISTER_APP(APPID,DESCRIPTION) */\r
+/* UNCHANGED */\r
+\r
+/**\r
+ * Register context including application (with default log level and default trace status)\r
+ * Common API with DLT Embedded\r
+ * @param CONTEXT object containing information about one special logging context\r
+ * @param CONTEXTID context id with maximal four characters\r
+ * @param APPID context id with maximal four characters\r
+ * @param DESCRIPTION ASCII string containing description\r
+ */\r
+#define DLT_REGISTER_CONTEXT_APP(CONTEXT,CONTEXTID,APPID,DESCRIPTION) \\r
+       DLT_REGISTER_CONTEXT(CONTEXT,CONTEXTID,DESCRIPTION)\r
+\r
+/**\r
+ * Send log message with variable list of messages (intended for verbose mode)\r
+ * Common API with DLT Embedded\r
+ * @param CONTEXT object containing information about one special logging context\r
+ * @param LOGLEVEL the log level of the log message\r
+ * @param ARGS variable list of arguments\r
+ */\r
+/*****************************************/\r
+#define DLT_LOG0(CONTEXT,LOGLEVEL) \\r
+       DLT_LOG(CONTEXT, LOGLEVEL )\r
+/*****************************************/\r
+#define DLT_LOG1(CONTEXT,LOGLEVEL, ARGS1) \\r
+       DLT_LOG(CONTEXT, LOGLEVEL, ARGS1)\r
+/*****************************************/\r
+#define DLT_LOG2(CONTEXT,LOGLEVEL, ARGS1, ARGS2) \\r
+       DLT_LOG(CONTEXT, LOGLEVEL, ARGS1, ARGS2)\r
+/*****************************************/\r
+#define DLT_LOG3(CONTEXT,LOGLEVEL, ARGS1, ARGS2, ARGS3) \\r
+       DLT_LOG(CONTEXT, LOGLEVEL, ARGS1, ARGS2, ARGS3)\r
+/*****************************************/\r
+#define DLT_LOG4(CONTEXT,LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4) \\r
+       DLT_LOG(CONTEXT, LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4)\r
+/*****************************************/\r
+#define DLT_LOG5(CONTEXT,LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5) \\r
+       DLT_LOG(CONTEXT, LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5)\r
+/*****************************************/\r
+#define DLT_LOG6(CONTEXT,LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6) \\r
+       DLT_LOG(CONTEXT, LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6)\r
+/*****************************************/\r
+#define DLT_LOG7(CONTEXT,LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7) \\r
+       DLT_LOG(CONTEXT, LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7)\r
+/*****************************************/\r
+#define DLT_LOG8(CONTEXT,LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8) \\r
+       DLT_LOG(CONTEXT, LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8)\r
+/*****************************************/\r
+#define DLT_LOG9(CONTEXT,LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9) \\r
+       DLT_LOG(CONTEXT, LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9)\r
+/*****************************************/\r
+#define DLT_LOG10(CONTEXT,LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9, ARGS10) \\r
+       DLT_LOG(CONTEXT, LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9, ARGS10)\r
+/*****************************************/\r
+#define DLT_LOG11(CONTEXT,LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9, ARGS10, ARGS11) \\r
+       DLT_LOG(CONTEXT, LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9, ARGS10, ARGS11)\r
+/*****************************************/\r
+#define DLT_LOG12(CONTEXT,LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9, ARGS10, ARGS11, ARGS12) \\r
+       DLT_LOG(CONTEXT, LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9, ARGS10, ARGS11, ARGS12)\r
+/*****************************************/\r
+#define DLT_LOG13(CONTEXT,LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9, ARGS10, ARGS11, ARGS12, ARGS13) \\r
+       DLT_LOG(CONTEXT, LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9, ARGS10, ARGS11, ARGS12, ARGS13)\r
+/*****************************************/\r
+#define DLT_LOG14(CONTEXT,LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9, ARGS10, ARGS11, ARGS12, ARGS13, ARGS14) \\r
+       DLT_LOG(CONTEXT, LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9, ARGS10, ARGS11, ARGS12, ARGS13, ARGS14)\r
+/*****************************************/\r
+#define DLT_LOG15(CONTEXT,LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9, ARGS10, ARGS11, ARGS12, ARGS13, ARGS14, ARGS15) \\r
+       DLT_LOG(CONTEXT, LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9, ARGS10, ARGS11, ARGS12, ARGS13, ARGS14, ARGS15)\r
+/*****************************************/\r
+#define DLT_LOG16(CONTEXT,LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9, ARGS10, ARGS11, ARGS12, ARGS13, ARGS14, ARGS15, ARGS16) \\r
+       DLT_LOG(CONTEXT, LOGLEVEL, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9, ARGS10, ARGS11, ARGS12, ARGS13, ARGS14, ARGS15, ARGS16)\r
+\r
+/**\r
+ * Send log message with variable list of messages (intended for non-verbose mode)\r
+ * Common API with DLT Embedded\r
+ * @param CONTEXT object containing information about one special logging context\r
+ * @param LOGLEVEL the log level of the log message\r
+ * @param MSGID the message id of log message\r
+ * @param ARGS variable list of arguments:\r
+ calls to DLT_STRING(), DLT_BOOL(), DLT_FLOAT32(), DLT_FLOAT64(),\r
+ DLT_INT(), DLT_UINT(), DLT_RAW()\r
+ */\r
+/*****************************************/\r
+#define DLT_LOG_ID0(CONTEXT,LOGLEVEL,MSGID) \\r
+       DLT_LOG_ID(CONTEXT, LOGLEVEL, MSGID )\r
+/*****************************************/\r
+#define DLT_LOG_ID1(CONTEXT,LOGLEVEL,MSGID, ARGS1) \\r
+       DLT_LOG_ID(CONTEXT, LOGLEVEL, MSGID, ARGS1)\r
+/*****************************************/\r
+#define DLT_LOG_ID2(CONTEXT,LOGLEVEL,MSGID, ARGS1, ARGS2) \\r
+       DLT_LOG_ID(CONTEXT, LOGLEVEL, MSGID, ARGS1, ARGS2)\r
+/*****************************************/\r
+#define DLT_LOG_ID3(CONTEXT,LOGLEVEL,MSGID, ARGS1, ARGS2, ARGS3) \\r
+       DLT_LOG_ID(CONTEXT, LOGLEVEL, MSGID, ARGS1, ARGS2, ARGS3)\r
+/*****************************************/\r
+#define DLT_LOG_ID4(CONTEXT,LOGLEVEL,MSGID, ARGS1, ARGS2, ARGS3, ARGS4) \\r
+       DLT_LOG_ID(CONTEXT, LOGLEVEL, MSGID, ARGS1, ARGS2, ARGS3, ARGS4)\r
+/*****************************************/\r
+#define DLT_LOG_ID5(CONTEXT,LOGLEVEL,MSGID, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5) \\r
+       DLT_LOG_ID(CONTEXT, LOGLEVEL, MSGID, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5)\r
+/*****************************************/\r
+#define DLT_LOG_ID6(CONTEXT,LOGLEVEL,MSGID, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6) \\r
+       DLT_LOG_ID(CONTEXT, LOGLEVEL, MSGID, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6)\r
+/*****************************************/\r
+#define DLT_LOG_ID7(CONTEXT,LOGLEVEL,MSGID, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7) \\r
+       DLT_LOG_ID(CONTEXT, LOGLEVEL, MSGID, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7)\r
+/*****************************************/\r
+#define DLT_LOG_ID8(CONTEXT,LOGLEVEL,MSGID, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8) \\r
+       DLT_LOG_ID(CONTEXT, LOGLEVEL, MSGID, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8)\r
+/*****************************************/\r
+#define DLT_LOG_ID9(CONTEXT,LOGLEVEL,MSGID, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9) \\r
+       DLT_LOG_ID(CONTEXT, LOGLEVEL, MSGID, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9)\r
+/*****************************************/\r
+#define DLT_LOG_ID10(CONTEXT,LOGLEVEL,MSGID, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9, ARGS10) \\r
+       DLT_LOG_ID(CONTEXT, LOGLEVEL, MSGID, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9, ARGS10)\r
+/*****************************************/\r
+#define DLT_LOG_ID11(CONTEXT,LOGLEVEL,MSGID, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9, ARGS10, ARGS11) \\r
+       DLT_LOG_ID(CONTEXT, LOGLEVEL, MSGID, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9, ARGS10, ARGS11)\r
+/*****************************************/\r
+#define DLT_LOG_ID12(CONTEXT,LOGLEVEL,MSGID, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9, ARGS10, ARGS11, ARGS12) \\r
+       DLT_LOG_ID(CONTEXT, LOGLEVEL, MSGID, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9, ARGS10, ARGS11, ARGS12)\r
+/*****************************************/\r
+#define DLT_LOG_ID13(CONTEXT,LOGLEVEL,MSGID, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9, ARGS10, ARGS11, ARGS12, ARGS13) \\r
+       DLT_LOG_ID(CONTEXT, LOGLEVEL, MSGID, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9, ARGS10, ARGS11, ARGS12, ARGS13)\r
+/*****************************************/\r
+#define DLT_LOG_ID14(CONTEXT,LOGLEVEL,MSGID, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9, ARGS10, ARGS11, ARGS12, ARGS13, ARGS14) \\r
+       DLT_LOG_ID(CONTEXT, LOGLEVEL, MSGID, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9, ARGS10, ARGS11, ARGS12, ARGS13, ARGS14)\r
+/*****************************************/\r
+#define DLT_LOG_ID15(CONTEXT,LOGLEVEL,MSGID, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9, ARGS10, ARGS11, ARGS12, ARGS13, ARGS14, ARGS15) \\r
+       DLT_LOG_ID(CONTEXT, LOGLEVEL, MSGID, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9, ARGS10, ARGS11, ARGS12, ARGS13, ARGS14, ARGS15)\r
+/*****************************************/\r
+#define DLT_LOG_ID16(CONTEXT,LOGLEVEL,MSGID, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9, ARGS10, ARGS11, ARGS12, ARGS13, ARGS14, ARGS15, ARGS16) \\r
+       DLT_LOG_ID(CONTEXT, LOGLEVEL, MSGID, ARGS1, ARGS2, ARGS3, ARGS4, ARGS5, ARGS6, ARGS7, ARGS8, ARGS9, ARGS10, ARGS11, ARGS12, ARGS13, ARGS14, ARGS15, ARGS16)\r
+\r
+/**\r
+ * Unregister context.\r
+ * Common API with DLT Embedded\r
+ * @param CONTEXT object containing information about one special logging context\r
+ */\r
+/* #define DLT_UNREGISTER_CONTEXT(CONTEXT) */\r
+/* UNCHANGED */\r
+\r
+/**\r
+ * Unregister application.\r
+ * Common API with DLT Embedded\r
+ */\r
+/* #define DLT_UNREGISTER_APP() */\r
+/* UNCHANGED */\r
+\r
+/**\r
+ * Add string parameter to the log messsage.\r
+ * Common API with DLT Embedded\r
+ * In the future in none verbose mode the string will not be sent via DLT message.\r
+ * @param TEXT ASCII string\r
+ */\r
+#define DLT_CSTRING(TEXT) \\r
+        DLT_STRING(TEXT)\r
+\r
+#endif /* DLT_COMMON_API_H */\r
+\r
index a44bd2e..767afc7 100755 (executable)
@@ -19,6 +19,11 @@ add_executable(dlt-example-user ${dlt_example_user_SRCS})
 target_link_libraries(dlt-example-user dlt)
 set_target_properties(dlt-example-user PROPERTIES LINKER_LANGUAGE C)
 
+set(dlt_example_user_common_api_SRCS dlt-example-user-common-api.c)
+add_executable(dlt-example-user-common-api ${dlt_example_user_common_api_SRCS})
+target_link_libraries(dlt-example-user-common-api dlt)
+set_target_properties(dlt-example-user-common-api PROPERTIES LINKER_LANGUAGE C)
+
 set(dlt_example_user_func_SRCS dlt-example-user-func.c)
 add_executable(dlt-example-user-func ${dlt_example_user_func_SRCS})
 target_link_libraries(dlt-example-user-func dlt)
@@ -29,7 +34,7 @@ add_executable(       dlt-example-filetransfer ${dlt_example_filetransfer_SRCS})
 target_link_libraries(dlt-example-filetransfer dlt )
 set_target_properties(dlt-example-filetransfer PROPERTIES LINKER_LANGUAGE C)
 
-install(TARGETS dlt-example-user dlt-example-user-func dlt-example-filetransfer
+install(TARGETS dlt-example-user dlt-example-user-func dlt-example-user-common-api dlt-example-filetransfer
        RUNTIME DESTINATION bin
        COMPONENT base)
 
diff --git a/src/examples/dlt-example-user-common-api.c b/src/examples/dlt-example-user-common-api.c
new file mode 100644 (file)
index 0000000..64ebd97
--- /dev/null
@@ -0,0 +1,291 @@
+/**
+ * @licence app begin@
+ * Copyright (C) 2012  BMW AG
+ *
+ * This file is part of GENIVI Project Dlt - Diagnostic Log and Trace console apps.
+ *
+ * Contributions are licensed to the GENIVI Alliance under one or more
+ * Contribution License Agreements.
+ *
+ * \copyright
+ * This Source Code Form is subject to the terms of the
+ * Mozilla Public License, v. 2.0. If a  copy of the MPL was not distributed with
+ * this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ *
+ * \author Alexander Wenzel <alexander.aw.wenzel@bmw.de> BMW 2011-2012
+ *
+ * \file dlt-example-user.c
+ * For further information see http://www.genivi.org/.
+ * @licence end@
+ */
+
+
+/*******************************************************************************
+**                                                                            **
+**  SRC-MODULE: dlt-example-common-api.c                                      **
+**                                                                            **
+**  TARGET    : linux                                                         **
+**                                                                            **
+**  PROJECT   : DLT                                                           **
+**                                                                            **
+**  AUTHOR    : Alexander Wenzel Alexander.AW.Wenzel@bmw.de                   **
+**                                                                            **
+**  PURPOSE   :                                                               **
+**                                                                            **
+**  REMARKS   :                                                               **
+**                                                                            **
+**  PLATFORM DEPENDANT [yes/no]: yes                                          **
+**                                                                            **
+**  TO BE CHANGED BY USER [yes/no]: no                                        **
+**                                                                            **
+*******************************************************************************/
+
+/*******************************************************************************
+**                      Author Identity                                       **
+********************************************************************************
+**                                                                            **
+** Initials     Name                       Company                            **
+** --------     -------------------------  ---------------------------------- **
+**  aw          Alexander Wenzel           BMW                                **
+*******************************************************************************/
+
+#include <netdb.h>
+#include <ctype.h>
+#include <stdio.h>      /* for printf() and fprintf() */
+#include <stdlib.h>     /* for atoi() and exit() */
+#include <string.h>     /* for memset() */
+#include <unistd.h>     /* for close() */
+
+#include "dlt_common_api.h"
+
+DLT_DECLARE_CONTEXT(mycontext);
+
+/**
+ * Print usage information of tool.
+ */
+void usage()
+{
+    char version[255];
+
+    dlt_get_version(version);
+
+    printf("Usage: dlt-example-common-api [options] message\n");
+    printf("Generate DLT messages and store them to file or send them to daemon.\n");
+    printf("%s \n", version);
+    printf("Options:\n");
+    printf("  -d delay      Milliseconds to wait between sending messages (Default: 500)\n");
+    printf("  -f filename   Use local log file instead of sending to daemon\n");
+    printf("  -n count      Number of messages to be generated (Default: 10)\n");
+    printf("  -g            Switch to non-verbose mode (Default: verbose mode)\n");
+    printf("  -a            Enable local printing of DLT messages (Default: disabled)\n");
+    printf("  -m mode       Set log mode 0=off,1=external,2=internal,3=both\n");
+#ifdef DLT_TEST_ENABLE
+    printf("  -c                       Corrupt user header\n");
+    printf("  -s size       Corrupt message size\n");
+    printf("  -z size          Size of message\n");
+#endif /* DLT_TEST_ENABLE */
+}
+
+/**
+ * Main function of tool.
+ */
+int main(int argc, char* argv[])
+{
+#ifdef DLT_TEST_ENABLE
+    int cflag = 0;    
+    char *svalue = 0;
+    char *zvalue = 0;
+#endif /* DLT_TEST_ENABLE */
+    int gflag = 0;
+    char *dvalue = 0;
+    char *nvalue = 0;
+    char *message = 0;
+
+    int index;
+    int c;
+
+       char *text;
+       int num,maxnum;
+       int delay;
+       
+       int state=-1,newstate;
+
+    opterr = 0;
+#ifdef DLT_TEST_ENABLE
+    while ((c = getopt (argc, argv, "vgcd:n:z:s:")) != -1)
+#else
+    while ((c = getopt (argc, argv, "vgd:n:")) != -1)
+#endif /* DLT_TEST_ENABLE */
+    {
+        switch (c)
+        {
+#ifdef DLT_TEST_ENABLE
+        case 'c':
+        {
+            cflag = 1;
+            break;
+        }
+        case 's':
+        {
+            svalue = optarg;
+            break;
+        }
+        case 'z':
+        {
+            zvalue = optarg;
+            break;
+        }
+#endif /* DLT_TEST_ENABLE */
+        case 'g':
+        {
+            gflag = 1;
+            break;
+        }
+        case 'd':
+        {
+            dvalue = optarg;
+            break;
+        }
+        case 'n':
+        {
+            nvalue = optarg;
+            break;
+        }
+        case '?':
+        {
+            if (optopt == 'd' || optopt == 'f' || optopt == 'n')
+            {
+                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 ();
+            break;//for parasoft
+        }
+        }
+    }
+
+    for (index = optind; index < argc; index++)
+    {
+        message = argv[index];
+    }
+
+    if (message == 0)
+    {
+        /* no message, show usage and terminate */
+        fprintf(stderr,"ERROR: No message selected\n");
+        usage();
+        return -1;
+    }
+
+    DLT_REGISTER_APP("LOG","Test Application for Logging");
+    DLT_REGISTER_CONTEXT_APP(mycontext,"TEST","LOG","Test Context for Logging");
+
+    text = message;
+       
+    if (nvalue)
+    {
+        maxnum = atoi(nvalue);
+    }
+    else
+    {
+               maxnum = 10;
+    }
+
+    if (dvalue)
+    {
+        delay = atoi(dvalue) * 1000;
+    }
+    else
+    {
+        delay = 500 * 1000;
+    }
+
+    if (gflag)
+    {
+        /* DLT messages to test Fibex non-verbose description: dlt-example-non-verbose.xml */
+        DLT_LOG_ID0(mycontext,DLT_LOG_INFO,10);
+        DLT_LOG_ID1(mycontext,DLT_LOG_INFO,11,DLT_UINT16(1011));
+        DLT_LOG_ID2(mycontext,DLT_LOG_INFO,12,DLT_UINT32(1012),DLT_UINT32(1013));
+        DLT_LOG_ID2(mycontext,DLT_LOG_INFO,13,DLT_UINT8(123),DLT_FLOAT32(1.12));
+        DLT_LOG_ID1(mycontext,DLT_LOG_INFO,14,DLT_STRING("DEAD BEEF"));
+    }
+
+#ifdef DLT_TEST_ENABLE
+    if (cflag)
+    {
+               dlt_user_test_corrupt_user_header(1);
+    }
+    if (svalue)
+    {
+               dlt_user_test_corrupt_message_size(1,atoi(svalue));
+    }
+       if (zvalue)
+       {
+               char* buffer = malloc(atoi(zvalue));
+        DLT_LOG2(mycontext,DLT_LOG_WARN,DLT_STRING(text),DLT_RAW(buffer,atoi(zvalue)));
+               free(buffer);
+       }
+#endif /* DLT_TEST_ENABLE */
+
+    for (num=0;num<maxnum;num++)
+    {
+        printf("Send %d %s\n",num,text);
+
+               newstate = dlt_get_log_state();
+               if(state!=newstate)
+               {
+                       state = newstate;
+                       if(state == -1) {
+                               printf("Client unknown state!\n");
+                       }
+                       else if(state == 0) {
+                               printf("Client disconnected!\n");
+                       }
+                       else if(state == 1) {
+                               printf("Client connected!\n");
+                       }
+               }
+                               
+        if (gflag)
+        {
+            /* Non-verbose mode */
+            DLT_LOG_ID2(mycontext,DLT_LOG_WARN,num,DLT_INT(num),DLT_STRING(text));
+        }
+        else
+        {
+            /* Verbose mode */
+            DLT_LOG2(mycontext,DLT_LOG_WARN,DLT_INT(num),DLT_STRING(text));
+        }
+
+        if (delay>0)
+        {
+            usleep(delay);
+        }
+    }
+
+    sleep(1);
+
+    DLT_UNREGISTER_CONTEXT(mycontext);
+
+    DLT_UNREGISTER_APP();
+
+    return 0;
+
+}
+
+