Merge branch 'develop2'
[profile/ivi/dlt-daemon.git] / include / dlt / dlt_user_macros.h
1 /*
2  * Dlt- Diagnostic Log and Trace console apps
3  * @licence app begin@
4  *
5  * Copyright (C) 2011, BMW AG - Alexander Wenzel <alexander.wenzel@bmw.de>
6  * 
7  * This program is free software; you can redistribute it and/or modify it under the terms of the 
8  * GNU Lesser General Public License, version 2.1, as published by the Free Software Foundation.
9  * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even 
10  * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General 
11  * Public License, version 2.1, for more details.
12  * 
13  * You should have received a copy of the GNU Lesser General Public License, version 2.1, along 
14  * with this program; if not, see <http://www.gnu.org/licenses/lgpl-2.1.html>.
15  * 
16  * Note that the copyright holders assume that the GNU Lesser General Public License, version 2.1, may 
17  * also be applicable to programs even in cases in which the program is not a library in the technical sense.
18  * 
19  * Linking DLT statically or dynamically with other modules is making a combined work based on DLT. You may 
20  * license such other modules under the GNU Lesser General Public License, version 2.1. If you do not want to 
21  * license your linked modules under the GNU Lesser General Public License, version 2.1, you 
22  * may use the program under the following exception.
23  * 
24  * As a special exception, the copyright holders of DLT give you permission to combine DLT 
25  * with software programs or libraries that are released under any license unless such a combination is not
26  * permitted by the license of such a software program or library. You may copy and distribute such a 
27  * system following the terms of the GNU Lesser General Public License, version 2.1, including this
28  * special exception, for DLT and the licenses of the other code concerned.
29  * 
30  * Note that people who make modified versions of DLT are not obligated to grant this special exception 
31  * for their modified versions; it is their choice whether to do so. The GNU Lesser General Public License, 
32  * version 2.1, gives permission to release a modified version without this exception; this exception 
33  * also makes it possible to release a modified version which carries forward this exception.
34  *
35  * @licence end@
36  */
37
38 /*******************************************************************************
39  **                                                                            **
40  **  SRC-MODULE: dlt_user_macros.h                                             **
41  **                                                                            **
42  **  TARGET    : linux                                                         **
43  **                                                                            **
44  **  PROJECT   : DLT                                                           **
45  **                                                                            **
46  **  AUTHOR    : Alexander Wenzel Alexander.AW.Wenzel@bmw.de                   **
47  **              Markus Klein                                                  **
48  **                                                                            **
49  **  PURPOSE   :                                                               **
50  **                                                                            **
51  **  REMARKS   :                                                               **
52  **                                                                            **
53  **  PLATFORM DEPENDANT [yes/no]: yes                                          **
54  **                                                                            **
55  **  TO BE CHANGED BY USER [yes/no]: no                                        **
56  **                                                                            **
57  *******************************************************************************/
58
59 /*******************************************************************************
60  **                      Author Identity                                       **
61  ********************************************************************************
62  **                                                                            **
63  ** Initials     Name                       Company                            **
64  ** --------     -------------------------  ---------------------------------- **
65  **  aw          Alexander Wenzel           BMW                                **
66  **  mk          Markus Klein               Fraunhofer ESK                     **
67  *******************************************************************************/
68
69 /*******************************************************************************
70  **                      Revision Control History                              **
71  *******************************************************************************/
72
73 /*
74  * $LastChangedRevision: 1515 $
75  * $LastChangedDate: 2010-12-13 09:18:54 +0100 (Mon, 13 Dec 2010) $
76  * $LastChangedBy$
77  Initials    Date         Comment
78  aw          13.01.2010   initial
79  */
80
81 #ifndef DLT_USER_MACROS_H
82 #define DLT_USER_MACORS_H
83
84 #include "dlt_version.h"
85
86 /**
87  \defgroup userapi DLT User API
88  \addtogroup userapi
89  \{
90  */
91
92 /**************************************************************************************************
93  * The folowing macros define a macro interface for DLT
94  **************************************************************************************************/
95
96 /**
97  * Create an object for a new context.
98  * This macro has to be called first for every.
99  * @param CONTEXT object containing information about one special logging context
100  */
101 #define DLT_DECLARE_CONTEXT(CONTEXT) \
102 DltContext CONTEXT;
103
104 /**
105  * Use an object of a new context created in another module.
106  * This macro has to be called first for every.
107  * @param CONTEXT object containing information about one special logging context
108  */
109 #define DLT_IMPORT_CONTEXT(CONTEXT) \
110 extern DltContext CONTEXT;
111
112 /**
113  * Register application.
114  * @param APPID application id with maximal four characters
115  * @param DESCRIPTION ASCII string containing description
116  */
117 #define DLT_REGISTER_APP(APPID,DESCRIPTION) \
118                 dlt_register_app( APPID, DESCRIPTION, PACKAGE_MAJOR_VERSION, PACKAGE_MINOR_VERSION );
119
120
121 /**
122  * Unregister application.
123  */
124 #define DLT_UNREGISTER_APP() \
125         dlt_unregister_app();
126
127 /**
128  * Register context (with default log level and default trace status)
129  * @param CONTEXT object containing information about one special logging context
130  * @param CONTEXTID context id with maximal four characters
131  * @param DESCRIPTION ASCII string containing description
132  */
133 #define DLT_REGISTER_CONTEXT(CONTEXT,CONTEXTID,DESCRIPTION) \
134         dlt_register_context(&(CONTEXT), CONTEXTID, DESCRIPTION);
135
136 /**
137  * Register context with pre-defined log level and pre-defined trace status.
138  * @param CONTEXT object containing information about one special logging context
139  * @param CONTEXTID context id with maximal four characters
140  * @param DESCRIPTION ASCII string containing description
141  * @param LOGLEVEL log level to be pre-set for this context
142  (DLT_LOG_DEFAULT is not allowed here)
143  * @param TRACESTATUS trace status to be pre-set for this context
144  (DLT_TRACE_STATUS_DEFAULT is not allowed here)
145  */
146 #define DLT_REGISTER_CONTEXT_LL_TS(CONTEXT,CONTEXTID,DESCRIPTION,LOGLEVEL,TRACESTATUS) \
147         dlt_register_context_ll_ts(&(CONTEXT), CONTEXTID, DESCRIPTION, LOGLEVEL, TRACESTATUS);
148
149 /**
150  * Unregister context.
151  * @param CONTEXT object containing information about one special logging context
152  */
153 #define DLT_UNREGISTER_CONTEXT(CONTEXT) \
154         dlt_unregister_context(&(CONTEXT));
155
156 /**
157  * Register callback function called when injection message was received
158  * @param CONTEXT object containing information about one special logging context
159  * @param SERVICEID service id of the injection message
160  * @param CALLBACK function pointer to callback function
161  */
162 #define DLT_REGISTER_INJECTION_CALLBACK(CONTEXT, SERVICEID, CALLBACK) \
163         dlt_register_injection_callback(&(CONTEXT),SERVICEID, CALLBACK);
164
165 /**
166  * Send log message with variable list of messages (intended for verbose mode)
167  * @param CONTEXT object containing information about one special logging context
168  * @param LOGLEVEL the log level of the log message
169  * @param ARGS variable list of arguments
170  */
171 #ifdef _MSC_VER
172 /* DLT_LOG is not supported by MS Visual C++ */
173 /* use function interface instead            */
174 #else
175 #define DLT_LOG(CONTEXT,LOGLEVEL,ARGS...) \
176         { \
177                 DltContextData log; \
178                 if (dlt_user_log_write_start(&CONTEXT,&log,LOGLEVEL)) \
179                 { \
180             ARGS; \
181             dlt_user_log_write_finish(&log); \
182                 } \
183         }
184 #endif
185
186 /**
187  * Send log message with variable list of messages (intended for non-verbose mode)
188  * @param CONTEXT object containing information about one special logging context
189  * @param LOGLEVEL the log level of the log message
190  * @param MSGID the message id of log message
191  * @param ARGS variable list of arguments: 
192  calls to DLT_STRING(), DLT_BOOL(), DLT_FLOAT32(), DLT_FLOAT64(),
193  DLT_INT(), DLT_UINT(), DLT_RAW()
194  */
195 #ifdef _MSC_VER
196 /* DLT_LOG_ID is not supported by MS Visual C++ */
197 /* use function interface instead               */
198 #else
199 #define DLT_LOG_ID(CONTEXT,LOGLEVEL,MSGID,ARGS...) \
200         { \
201                 DltContextData log; \
202                 if (dlt_user_log_write_start_id(&CONTEXT,&log,LOGLEVEL,MSGID)) \
203                 { \
204             ARGS; \
205             dlt_user_log_write_finish(&log); \
206                 } \
207         }
208 #endif
209
210 /**
211  * Add string parameter to the log messsage.
212  * @param TEXT ASCII string
213  */
214 #define DLT_STRING(TEXT) ({ \
215         dlt_user_log_write_string(&log,TEXT); \
216         })
217
218 /**
219  * Add boolean parameter to the log messsage.
220  * @param BOOL_VAR Boolean value (mapped to uint8)
221  */
222 #define DLT_BOOL(BOOL_VAR) ({ \
223         dlt_user_log_write_bool(&log,BOOL_VAR); \
224         })
225
226 /**
227  * Add float32 parameter to the log messsage.
228  * @param FLOAT32_VAR Float32 value (mapped to float)
229  */
230 #define DLT_FLOAT32(FLOAT32_VAR) ({ \
231         dlt_user_log_write_float32(&log,FLOAT32_VAR); \
232         })
233
234 /**
235  * Add float64 parameter to the log messsage.
236  * @param FLOAT64_VAR Float64 value (mapped to double)
237  */
238 #define DLT_FLOAT64(FLOAT64_VAR) ({ \
239         dlt_user_log_write_float64(&log,FLOAT64_VAR); \
240         })
241
242 /**
243  * Add integer parameter to the log messsage.
244  * @param INT_VAR integer value
245  */
246 #define DLT_INT(INT_VAR) ({ \
247         dlt_user_log_write_int(&log,INT_VAR); \
248         })
249 #define DLT_INT8(INT_VAR) ({ \
250         dlt_user_log_write_int8(&log,INT_VAR); \
251         })
252 #define DLT_INT16(INT_VAR) ({ \
253         dlt_user_log_write_int16(&log,INT_VAR); \
254         })
255 #define DLT_INT32(INT_VAR) ({ \
256         dlt_user_log_write_int32(&log,INT_VAR); \
257         })
258 #define DLT_INT64(INT_VAR) ({ \
259         dlt_user_log_write_int64(&log,INT_VAR); \
260         })
261
262 /**
263  * Add unsigned integer parameter to the log messsage.
264  * @param UINT_VAR unsigned integer value
265  */
266 #define DLT_UINT(UINT_VAR) ({ \
267         dlt_user_log_write_uint(&log,UINT_VAR); \
268         })
269 #define DLT_UINT8(UINT_VAR) ({ \
270         dlt_user_log_write_uint8(&log,UINT_VAR); \
271         })
272 #define DLT_UINT16(UINT_VAR) ({ \
273         dlt_user_log_write_uint16(&log,UINT_VAR); \
274         })
275 #define DLT_UINT32(UINT_VAR) ({ \
276         dlt_user_log_write_uint32(&log,UINT_VAR); \
277         })
278 #define DLT_UINT64(UINT_VAR) ({ \
279         dlt_user_log_write_uint64(&log,UINT_VAR); \
280         })
281
282 /**
283  * Add binary memory block to the log messages.
284  * @param BUF pointer to memory block
285  * @param LEN length of memory block
286  */
287 #define DLT_RAW(BUF,LEN) ({ \
288         dlt_user_log_write_raw(&log,BUF,LEN); \
289         })
290
291 /**
292  * Trace network message
293  * @param CONTEXT object containing information about one special logging context
294  * @param TYPE type of network trace message
295  * @param HEADERLEN length of network message header
296  * @param HEADER pointer to network message header
297  * @param PAYLOADLEN length of network message payload
298  * @param PAYLOAD pointer to network message payload
299  */
300 #define DLT_TRACE_NETWORK(CONTEXT,TYPE,HEADERLEN,HEADER,PAYLOADLEN,PAYLOAD) \
301     { \
302         dlt_user_trace_network(&(CONTEXT),TYPE,HEADERLEN,HEADER,PAYLOADLEN,PAYLOAD); \
303     }
304
305 /**
306  * Send log message with string parameter.
307  * @param CONTEXT object containing information about one special logging context
308  * @param LOGLEVEL the log level of the log message
309  * @param TEXT ASCII string
310  */
311 #define DLT_LOG_STRING(CONTEXT,LOGLEVEL,TEXT) \
312     { \
313         dlt_log_string(&(CONTEXT), LOGLEVEL, TEXT); \
314     }
315
316 /**
317  * Send log message with string parameter and integer parameter.
318  * @param CONTEXT object containing information about one special logging context
319  * @param LOGLEVEL the log level of the log messages
320  * @param TEXT ASCII string
321  * @param INT_VAR integer value
322  */
323 #define DLT_LOG_STRING_INT(CONTEXT,LOGLEVEL,TEXT,INT_VAR) \
324         { \
325         dlt_log_string_int(&(CONTEXT), LOGLEVEL, TEXT, INT_VAR); \
326         }
327
328 /**
329  * Send log message with string parameter and unsigned integer parameter.
330  * @param CONTEXT object containing information about one special logging context
331  * @param LOGLEVEL the log level of the log message
332  * @param TEXT ASCII string
333  * @param UINT_VAR unsigned integer value
334  */
335 #define DLT_LOG_STRING_UINT(CONTEXT,LOGLEVEL,TEXT,UINT_VAR) \
336         { \
337                 dlt_log_string_uint(&(CONTEXT),LOGLEVEL,TEXT,UINT_VAR); \
338         }
339
340 /**
341  * Send log message with unsigned integer parameter.
342  * @param CONTEXT object containing information about one special logging context
343  * @param LOGLEVEL the log level of the log message
344  * @param UINT_VAR unsigned integer value
345  */
346 #define DLT_LOG_UINT(CONTEXT,LOGLEVEL,UINT_VAR) \
347         { \
348                 dlt_log_uint(&(CONTEXT),LOGLEVEL,UINT_VAR); \
349         }
350
351 /**
352  * Send log message with integer parameter.
353  * @param CONTEXT object containing information about one special logging context
354  * @param LOGLEVEL the log level of the log message
355  * @param INT_VAR integer value
356  */
357 #define DLT_LOG_INT(CONTEXT,LOGLEVEL,INT_VAR) \
358         { \
359                 dlt_log_int(&(CONTEXT),LOGLEVEL,INT_VAR); \
360         }
361
362 /**
363  * Send log message with binary memory block.
364  * @param CONTEXT object containing information about one special logging context
365  * @param LOGLEVEL the log level of the log message
366  * @param BUF pointer to memory block
367  * @param LEN length of memory block
368  */
369 #define DLT_LOG_RAW(CONTEXT,LOGLEVEL,BUF,LEN) \
370         { \
371                 dlt_log_raw(&(CONTEXT),LOGLEVEL,BUF,LEN); \
372         }
373
374 /**
375  * Switch to verbose mode
376  *
377  */
378 #define DLT_VERBOSE_MODE() \
379         dlt_verbose_mode();
380
381 /**
382  * Switch to non-verbose mode
383  *
384  */
385 #define DLT_NONVERBOSE_MODE() \
386         dlt_nonverbose_mode();
387
388 /**
389  * Set maximum logged log level and trace status of application
390  *
391  * @param LOGLEVEL This is the log level to be set for the whole application
392  * @param TRACESTATUS This is the trace status to be set for the whole application
393  */
394 #define DLT_SET_APPLICATION_LL_TS_LIMIT(LOGLEVEL, TRACESTATUS) \
395     dlt_set_application_ll_ts_limit(LOGLEVEL, TRACESTATUS);
396
397 /**
398  * Enable local printing of messages
399  *
400  */
401 #define DLT_ENABLE_LOCAL_PRINT() \
402         dlt_enable_local_print();
403
404 /**
405  * Disable local printing of messages
406  *
407  */
408 #define DLT_DISABLE_LOCAL_PRINT() \
409         dlt_disable_local_print();
410
411 /**
412  \}
413  */
414
415 #endif /* DLT_USER_MACROS_H */