2 * Dlt- Diagnostic Log and Trace daemon
\r
5 * Copyright (C) 2011, BMW AG - Alexander Wenzel <alexander.wenzel@bmw.de>
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.
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>.
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.
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.
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.
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.
39 /*******************************************************************************
\r
41 ** SRC-MODULE: dlt_daemon_common.h **
\r
43 ** TARGET : linux **
\r
47 ** AUTHOR : Alexander Wenzel Alexander.AW.Wenzel@bmw.de **
\r
54 ** PLATFORM DEPENDANT [yes/no]: yes **
\r
56 ** TO BE CHANGED BY USER [yes/no]: no **
\r
58 *******************************************************************************/
\r
60 /*******************************************************************************
\r
61 ** Author Identity **
\r
62 ********************************************************************************
\r
64 ** Initials Name Company **
\r
65 ** -------- ------------------------- ---------------------------------- **
\r
66 ** aw Alexander Wenzel BMW **
\r
67 ** mk Markus Klein Fraunhofer ESK **
\r
68 *******************************************************************************/
\r
70 /*******************************************************************************
\r
71 ** Revision Control History **
\r
72 *******************************************************************************/
\r
75 * $LastChangedRevision: 1670 $
\r
76 * $LastChangedDate: 2011-04-08 15:12:06 +0200 (Fr, 08. Apr 2011) $
\r
78 Initials Date Comment
\r
79 aw 15.02.2010 initial
\r
82 #ifndef DLT_DAEMON_COMMON_H
\r
83 #define DLT_DAEMON_COMMON_H
\r
86 \defgroup daemonapi DLT Daemon API
\r
87 \addtogroup daemonapi
\r
91 #include <semaphore.h>
\r
92 #include "dlt_common.h"
\r
93 #include "dlt_user.h"
\r
99 #define DLT_DAEMON_RINGBUFFER_SIZE 100000 /**< Ring buffer size for storing log messages while no client is connected */
\r
101 #define DLT_DAEMON_STORE_TO_BUFFER -2 /**< Constant value to identify the command "store to buffer" */
\r
103 /* Use a semaphore or mutex from your OS to prevent concurrent access to the DLT buffer. */
\r
105 #define DLT_DAEMON_SEM_LOCK() { sem_wait(&dlt_daemon_mutex); }
\r
106 #define DLT_DAEMON_SEM_FREE() { sem_post(&dlt_daemon_mutex); }
\r
107 extern sem_t dlt_daemon_mutex;
\r
111 * The parameters of a daemon application.
\r
115 char apid[DLT_ID_SIZE]; /**< application id */
\r
116 pid_t pid; /**< process id of user application */
\r
117 int user_handle; /**< connection handle for connection to user application */
\r
118 char *application_description; /**< context description */
\r
119 int num_contexts; /**< number of contexts for this application */
\r
120 } DltDaemonApplication;
\r
123 * The parameters of a daemon context.
\r
127 char apid[DLT_ID_SIZE]; /**< application id */
\r
128 char ctid[DLT_ID_SIZE]; /**< context id */
\r
129 int8_t log_level; /**< the current log level of the context */
\r
130 int8_t trace_status; /**< the current trace status of the context */
\r
131 int log_level_pos; /**< offset of context in context field on user application */
\r
132 int user_handle; /**< connection handle for connection to user application */
\r
133 char *context_description; /**< context description */
\r
134 } DltDaemonContext;
\r
137 * The parameters of a daemon.
\r
141 int num_contexts; /**< Total number of all contexts in all applications */
\r
142 DltDaemonContext *contexts; /**< Pointer to contexts */
\r
143 int num_applications; /**< Number of available application */
\r
144 DltDaemonApplication *applications; /**< Pointer to applications */
\r
145 int8_t default_log_level; /**< Default log level (of daemon) */
\r
146 int8_t default_trace_status; /**< Default trace status (of daemon) */
\r
147 int message_buffer_overflow; /**< Set to one, if buffer overflow has occured, zero otherwise */
\r
148 int runtime_context_cfg_loaded; /**< Set to one, if runtime context configuration has been loaded, zero otherwise */
\r
149 char ecuid[DLT_ID_SIZE]; /**< ECU ID of daemon */
\r
150 int sendserialheader; /**< 1: send serial header; 0 don't send serial header */
\r
151 int timingpackets; /**< 1: send continous timing packets; 0 don't send continous timing packets */
\r
152 DltRingBuffer client_ringbuffer; /**< Ring-buffer for storing received logs while no client connection is available */
\r
153 char runtime_application_cfg[256]; /**< Path and filename of persistent application configuration */
\r
154 char runtime_context_cfg[256]; /**< Path and filename of persistent context configuration */
\r
155 char runtime_configuration[256]; /**< Path and filename of persistent configuration */
\r
156 DltUserLogMode mode; /**< Mode used for tracing: off, external, internal, both */
\r
157 char state; /**< state for tracing: 0 = no client connected, 1 = client connected */
\r
161 * Initialise the dlt daemon structure
\r
162 * This function must be called before using further dlt daemon structure
\r
163 * @param daemon pointer to dlt daemon structure
\r
164 * @param runtime_directory Directory of persistent configuration
\r
165 * @param verbose if set to true verbose information is printed out.
\r
166 * @return negative value if there was an error
\r
168 int dlt_daemon_init(DltDaemon *daemon,const char *runtime_directory,int verbose);
\r
170 * De-Initialise the dlt daemon structure
\r
171 * @param daemon pointer to dlt daemon structure
\r
172 * @param verbose if set to true verbose information is printed out.
\r
173 * @return negative value if there was an error
\r
175 int dlt_daemon_free(DltDaemon *daemon,int verbose);
\r
178 * Add (new) application to internal application management
\r
179 * @param daemon pointer to dlt daemon structure
\r
180 * @param apid pointer to application id
\r
181 * @param pid process id of user application
\r
182 * @param description description of application
\r
183 * @param verbose if set to true verbose information is printed out.
\r
184 * @return Pointer to added context, null pointer on error
\r
186 DltDaemonApplication* dlt_daemon_application_add(DltDaemon *daemon,char *apid,pid_t pid,char *description, int verbose);
\r
188 * Delete application from internal application management
\r
189 * @param daemon pointer to dlt daemon structure
\r
190 * @param application pointer to application to be deleted
\r
191 * @param verbose if set to true verbose information is printed out.
\r
192 * @return negative value if there was an error
\r
194 int dlt_daemon_application_del(DltDaemon *daemon, DltDaemonApplication *application, int verbose);
\r
196 * Find application with specific application id
\r
197 * @param daemon pointer to dlt daemon structure
\r
198 * @param apid pointer to application id
\r
199 * @param verbose if set to true verbose information is printed out.
\r
200 * @return Pointer to application, null pointer on error or not found
\r
202 DltDaemonApplication* dlt_daemon_application_find(DltDaemon *daemon,char *apid,int verbose);
\r
204 * Load applications from file to internal context management
\r
205 * @param daemon pointer to dlt daemon structure
\r
206 * @param filename name of file to be used for loading
\r
207 * @param verbose if set to true verbose information is printed out.
\r
208 * @return negative value if there was an error
\r
210 int dlt_daemon_applications_load(DltDaemon *daemon,const char *filename, int verbose);
\r
212 * Save applications from internal context management to file
\r
213 * @param daemon pointer to dlt daemon structure
\r
214 * @param filename name of file to be used for saving
\r
215 * @param verbose if set to true verbose information is printed out.
\r
216 * @return negative value if there was an error
\r
218 int dlt_daemon_applications_save(DltDaemon *daemon,const char *filename, int verbose);
\r
220 * Clear all applications in internal application management
\r
221 * @param daemon pointer to dlt daemon structure
\r
222 * @param verbose if set to true verbose information is printed out.
\r
223 * @return negative value if there was an error
\r
225 int dlt_daemon_applications_clear(DltDaemon *daemon,int verbose);
\r
228 * Add (new) context to internal context management
\r
229 * @param daemon pointer to dlt daemon structure
\r
230 * @param apid pointer to application id
\r
231 * @param ctid pointer to context id
\r
232 * @param log_level log level of context
\r
233 * @param trace_status trace status of context
\r
234 * @param log_level_pos offset of context in context field on user application
\r
235 * @param user_handle connection handle for connection to user application
\r
236 * @param description description of context
\r
237 * @param verbose if set to true verbose information is printed out.
\r
238 * @return Pointer to added context, null pointer on error
\r
240 DltDaemonContext* dlt_daemon_context_add(DltDaemon *daemon,char *apid,char *ctid,int8_t log_level,int8_t trace_status,int log_level_pos, int user_handle,char *description,int verbose);
\r
242 * Delete context from internal context management
\r
243 * @param daemon pointer to dlt daemon structure
\r
244 * @param context pointer to context to be deleted
\r
245 * @param verbose if set to true verbose information is printed out.
\r
246 * @return negative value if there was an error
\r
248 int dlt_daemon_context_del(DltDaemon *daemon, DltDaemonContext* context, int verbose);
\r
250 * Find context with specific application id and context id
\r
251 * @param daemon pointer to dlt daemon structure
\r
252 * @param apid pointer to application id
\r
253 * @param ctid pointer to context id
\r
254 * @param verbose if set to true verbose information is printed out.
\r
255 * @return Pointer to context, null pointer on error or not found
\r
257 DltDaemonContext* dlt_daemon_context_find(DltDaemon *daemon,char *apid,char *ctid,int verbose);
\r
259 * Clear all contexts in internal context management
\r
260 * @param daemon pointer to dlt daemon structure
\r
261 * @param verbose if set to true verbose information is printed out.
\r
262 * @return negative value if there was an error
\r
264 int dlt_daemon_contexts_clear(DltDaemon *daemon,int verbose);
\r
266 * Load contexts from file to internal context management
\r
267 * @param daemon pointer to dlt daemon structure
\r
268 * @param filename name of file to be used for loading
\r
269 * @param verbose if set to true verbose information is printed out.
\r
270 * @return negative value if there was an error
\r
272 int dlt_daemon_contexts_load(DltDaemon *daemon,const char *filename, int verbose);
\r
274 * Save contexts from internal context management to file
\r
275 * @param daemon pointer to dlt daemon structure
\r
276 * @param filename name of file to be used for saving
\r
277 * @param verbose if set to true verbose information is printed out.
\r
278 * @return negative value if there was an error
\r
280 int dlt_daemon_contexts_save(DltDaemon *daemon,const char *filename, int verbose);
\r
282 * Load persistant configuration
\r
283 * @param daemon pointer to dlt daemon structure
\r
284 * @param filename name of file to be used for loading
\r
285 * @param verbose if set to true verbose information is printed out.
\r
286 * @return negative value if there was an error
\r
288 int dlt_daemon_configuration_load(DltDaemon *daemon,const char *filename, int verbose);
\r
290 * Save configuration persistantly
\r
291 * @param daemon pointer to dlt daemon structure
\r
292 * @param filename name of file to be used for saving
\r
293 * @param verbose if set to true verbose information is printed out.
\r
294 * @return negative value if there was an error
\r
296 int dlt_daemon_configuration_save(DltDaemon *daemon,const char *filename, int verbose);
\r
300 * Send user message DLT_USER_MESSAGE_LOG_LEVEL to user application
\r
301 * @param daemon pointer to dlt daemon structure
\r
302 * @param context pointer to context for response
\r
303 * @param verbose if set to true verbose information is printed out.
\r
304 * @return negative value if there was an error
\r
306 int dlt_daemon_user_send_log_level(DltDaemon *daemon,DltDaemonContext *context, int verbose);
\r
309 * Send user message DLT_USER_MESSAGE_LOG_STATE to user application
\r
310 * @param daemon pointer to dlt daemon structure
\r
311 * @param app pointer to application for response
\r
312 * @param verbose if set to true verbose information is printed out.
\r
313 * @return negative value if there was an error
\r
315 int dlt_daemon_user_send_log_state(DltDaemon *daemon,DltDaemonApplication *app,int verbose);
\r
318 * Send user messages to all user applications using default context, or trace status
\r
319 * to update those values
\r
320 * @param daemon pointer to dlt daemon structure
\r
321 * @param verbose if set to true verbose information is printed out.
\r
323 void dlt_daemon_user_send_default_update(DltDaemon *daemon, int verbose);
\r
326 * Send user messages to all user applications the log status
\r
327 * everytime the client is connected or disconnected.
\r
328 * @param daemon pointer to dlt daemon structure
\r
329 * @param verbose if set to true verbose information is printed out.
\r
331 void dlt_daemon_user_send_all_log_state(DltDaemon *daemon, int verbose);
\r
334 * Process received control message from dlt client
\r
335 * @param sock connection handle used for sending response
\r
336 * @param daemon pointer to dlt daemon structure
\r
337 * @param msg pointer to received control message
\r
338 * @param verbose if set to true verbose information is printed out.
\r
340 int dlt_daemon_control_process_control(int sock, DltDaemon *daemon, DltMessage *msg, int verbose);
\r
342 * Generate response to control message from dlt client
\r
343 * @param sock connection handle used for sending response
\r
344 * @param daemon pointer to dlt daemon structure
\r
345 * @param service_id service id of control message
\r
346 * @param status status of response (e.g. ok, not supported, error)
\r
347 * @param verbose if set to true verbose information is printed out.
\r
349 void dlt_daemon_control_service_response(int sock, DltDaemon *daemon, uint32_t service_id, int8_t status, int verbose);
\r
351 * Send out response message to dlt client
\r
352 * @param sock connection handle used for sending response
\r
353 * @param daemon pointer to dlt daemon structure
\r
354 * @param msg pointer to response message
\r
355 * @param appid pointer to application id to be used in response message
\r
356 * @param contid pointer to context id to be used in response message
\r
357 * @param verbose if set to true verbose information is printed out.
\r
359 void dlt_daemon_control_send_control_message(int sock, DltDaemon *daemon, DltMessage *msg, char* appid, char* contid, int verbose);
\r
362 * Process and generate response to received sw injection control message
\r
363 * @param sock connection handle used for sending response
\r
364 * @param daemon pointer to dlt daemon structure
\r
365 * @param msg pointer to received sw injection control message
\r
366 * @param verbose if set to true verbose information is printed out.
\r
368 void dlt_daemon_control_callsw_cinjection(int sock, DltDaemon *daemon, DltMessage *msg, int verbose);
\r
370 * Process and generate response to received set log level control message
\r
371 * @param sock connection handle used for sending response
\r
372 * @param daemon pointer to dlt daemon structure
\r
373 * @param msg pointer to received control message
\r
374 * @param verbose if set to true verbose information is printed out.
\r
376 void dlt_daemon_control_set_log_level(int sock, DltDaemon *daemon, DltMessage *msg, int verbose);
\r
378 * Process and generate response to received set trace status control message
\r
379 * @param sock connection handle used for sending response
\r
380 * @param daemon pointer to dlt daemon structure
\r
381 * @param msg pointer to received control message
\r
382 * @param verbose if set to true verbose information is printed out.
\r
384 void dlt_daemon_control_set_trace_status(int sock, DltDaemon *daemon, DltMessage *msg, int verbose);
\r
386 * Process and generate response to received set default log level control message
\r
387 * @param sock connection handle used for sending response
\r
388 * @param daemon pointer to dlt daemon structure
\r
389 * @param msg pointer to received control message
\r
390 * @param verbose if set to true verbose information is printed out.
\r
392 void dlt_daemon_control_set_default_log_level(int sock, DltDaemon *daemon, DltMessage *msg, int verbose);
\r
394 * Process and generate response to received set default trace status control message
\r
395 * @param sock connection handle used for sending response
\r
396 * @param daemon pointer to dlt daemon structure
\r
397 * @param msg pointer to received control message
\r
398 * @param verbose if set to true verbose information is printed out.
\r
400 void dlt_daemon_control_set_default_trace_status(int sock, DltDaemon *daemon, DltMessage *msg, int verbose);
\r
402 * Process and generate response to set timing packets control message
\r
403 * @param sock connection handle used for sending response
\r
404 * @param daemon pointer to dlt daemon structure
\r
405 * @param msg pointer to received control message
\r
406 * @param verbose if set to true verbose information is printed out.
\r
408 void dlt_daemon_control_set_timing_packets(int sock, DltDaemon *daemon, DltMessage *msg, int verbose);
\r
410 * Process and generate response to received get software version control message
\r
411 * @param sock connection handle used for sending response
\r
412 * @param daemon pointer to dlt daemon structure
\r
413 * @param verbose if set to true verbose information is printed out.
\r
415 void dlt_daemon_control_get_software_version(int sock, DltDaemon *daemon, int verbose);
\r
417 * Process and generate response to received get default log level control message
\r
418 * @param sock connection handle used for sending response
\r
419 * @param daemon pointer to dlt daemon structure
\r
420 * @param verbose if set to true verbose information is printed out.
\r
422 void dlt_daemon_control_get_default_log_level(int sock, DltDaemon *daemon, int verbose);
\r
424 * Process and generate response to received get log info control message
\r
425 * @param sock connection handle used for sending response
\r
426 * @param daemon pointer to dlt daemon structure
\r
427 * @param msg pointer to received control message
\r
428 * @param verbose if set to true verbose information is printed out.
\r
430 void dlt_daemon_control_get_log_info(int sock, DltDaemon *daemon, DltMessage *msg, int verbose);
\r
432 * Process and generate response to message buffer overflow control message
\r
433 * @param sock connection handle used for sending response
\r
434 * @param daemon pointer to dlt daemon structure
\r
435 * @param verbose if set to true verbose information is printed out.
\r
437 void dlt_daemon_control_message_buffer_overflow(int sock, DltDaemon *daemon, int verbose);
\r
439 * Process reset to factory default control message
\r
440 * @param daemon pointer to dlt daemon structure
\r
441 * @param filename name of file containing the runtime defaults for applications
\r
442 * @param filename1 name of file containing the runtime defaults for contexts
\r
443 * @param verbose if set to true verbose information is printed out.
\r
445 void dlt_daemon_control_reset_to_factory_default(DltDaemon *daemon,const char *filename, const char *filename1, int verbose);
\r
447 * Send time control message
\r
448 * @param sock connection handle used for sending response
\r
449 * @param daemon pointer to dlt daemon structure
\r
450 * @param verbose if set to true verbose information is printed out.
\r
452 void dlt_daemon_control_message_time(int sock, DltDaemon *daemon, int verbose);
\r
462 #endif /* DLT_DAEMON_COMMON_H */
\r