ad036928f9533c5bc62920d74daf5d6e962caa99
[profile/ivi/audiomanager.git] / AudioManagerDaemon / src / DLTWrapper.cpp
1 /**
2  * Copyright (C) 2011, BMW AG
3  *
4  * GeniviAudioMananger AudioManagerDaemon
5  *
6  * \file DLTWrapper.cpp
7  *
8  * \date 20-Oct-2011 3:42:04 PM
9  * \author Christian Mueller (christian.ei.mueller@bmw.de)
10  *
11  * \section License
12  * GNU Lesser General Public License, version 2.1, with special exception (GENIVI clause)
13  * Copyright (C) 2011, BMW AG Christian Mueller  Christian.ei.mueller@bmw.de
14  *
15  * 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.
16  * 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.
17  * 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>.
18  * 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.
19  * Linking AudioManager statically or dynamically with other modules is making a combined work based on AudioManager. 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.
20  * As a special exception, the copyright holders of AudioManager give you permission to combine AudioManager 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 AudioManager and the licenses of the other code concerned.
21  * Note that people who make modified versions of AudioManager 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.
22  *
23  */
24
25
26 #include "DLTWrapper.h"
27 #include <string.h>
28 #include <sstream>
29 #include <iostream>
30
31 DLTWrapper* DLTWrapper::mDLTWrapper = NULL;
32
33 DLTWrapper *DLTWrapper::instance(const bool enableNoDLTDebug)
34 {
35     if (!mDLTWrapper)
36         mDLTWrapper = new DLTWrapper(enableNoDLTDebug);
37 #ifndef WITH_DLT
38     if(enableNoDLTDebug)
39         mDLTWrapper->enableNoDLTDebug(true);
40 #endif        
41     return mDLTWrapper;
42 }
43
44 void DLTWrapper::unregisterContext(DltContext & handle)
45 {
46 #ifdef WITH_DLT
47     dlt_unregister_context(&handle);
48 #endif
49 }
50
51 DLTWrapper::DLTWrapper(const bool enableNoDLTDebug) :
52 #ifndef WITH_DLT
53         mEnableNoDLTDebug(enableNoDLTDebug),
54 #endif
55         mDltContext(), //
56         mDltContextData()
57 {
58 #ifndef WITH_DLT
59     std::cout << "[DLT] Running without DLT-support" << std::endl;
60 #endif
61 }
62
63 void DLTWrapper::registerApp(const char *appid, const char *description)
64 {
65 #ifdef WITH_DLT
66     dlt_register_app(appid, description);
67     //register a default context
68     dlt_register_context(&mDltContext, "def", "default Context registered by DLTWrapper CLass");
69 #endif
70 }
71
72 void DLTWrapper::registerContext(DltContext& handle, const char *contextid, const char *description)
73 {
74 #ifdef WITH_DLT
75     dlt_register_context(&handle, contextid, description);
76 #else
77     memcpy(&mDltContext.contextID,contextid,4);
78     strlen(description);
79     const size_t str_len = strlen(description);
80     if(str_len < 2000)
81     {
82         mDltContextData.context_description = new char[str_len + 1];
83         (void) strcpy(mDltContextData.context_description,description);
84     }
85 #endif
86 }
87
88 void DLTWrapper::init(DltLogLevelType loglevel, DltContext* context)
89 {
90     if (!context)
91         context = &mDltContext;
92 #ifdef WITH_DLT
93     dlt_user_log_write_start(context, &mDltContextData, loglevel);
94 #endif
95
96 }
97
98 void DLTWrapper::send()
99 {
100 #ifdef WITH_DLT
101     dlt_user_log_write_finish(&mDltContextData);
102 #else
103     if(mEnableNoDLTDebug)
104         std::cout << "[" << mDltContext.contextID << "] " << std::string(mDltContextData.buffer) << std::endl;
105
106     mDltContextData.size = 0;
107 #endif
108 }
109
110 void DLTWrapper::append(const int8_t value)
111 {
112 #ifdef WITH_DLT
113     dlt_user_log_write_int8(&mDltContextData, value);
114 #else
115     appendNoDLT(value);
116 #endif
117 }
118
119 void DLTWrapper::append(const uint8_t value)
120 {
121 #ifdef WITH_DLT
122     dlt_user_log_write_uint8(&mDltContextData, value);
123 #else
124     appendNoDLT(value);
125 #endif
126 }
127
128 void DLTWrapper::append(const int16_t value)
129 {
130 #ifdef WITH_DLT
131     dlt_user_log_write_int16(&mDltContextData, value);
132 #else
133     appendNoDLT(value);
134 #endif
135 }
136
137 void DLTWrapper::append(const uint16_t value)
138 {
139 #ifdef WITH_DLT
140     dlt_user_log_write_uint16(&mDltContextData, value);
141 #else
142     appendNoDLT(value);
143 #endif
144 }
145
146 void DLTWrapper::append(const int32_t value)
147 {
148 #ifdef WITH_DLT
149     dlt_user_log_write_int32(&mDltContextData, value);
150 #else
151     appendNoDLT(value);
152 #endif
153 }
154
155 void DLTWrapper::append(const uint32_t value)
156 {
157 #ifdef WITH_DLT
158     dlt_user_log_write_uint32(&mDltContextData, value);
159 #else
160     appendNoDLT(value);
161 #endif
162 }
163
164 void DLTWrapper::append(const char*& value)
165 {
166 #ifdef WITH_DLT
167     dlt_user_log_write_string(&mDltContextData, value);
168 #else
169     memcpy((mDltContextData.buffer+mDltContextData.size),value,strlen(value));
170     mDltContextData.size += strlen(value);
171 #endif
172 }
173
174 void DLTWrapper::append(const std::string& value)
175 {
176 #ifdef WITH_DLT
177     dlt_user_log_write_string(&mDltContextData, value.c_str());
178 #else
179     memcpy((mDltContextData.buffer+mDltContextData.size),value.c_str(),value.size());
180     mDltContextData.size += value.size();
181 #endif
182 }
183
184 void DLTWrapper::append(const bool value)
185 {
186 #ifdef WITH_DLT
187     dlt_user_log_write_bool(&mDltContextData, static_cast<uint8_t>(value));
188 #else
189     appendNoDLT(value);
190 #endif
191 }
192
193 #ifndef WITH_DLT
194 template<class T> void DLTWrapper::appendNoDLT(T value)
195 {
196     if((mDltContextData.size + sizeof(value)) < DLT_USER_BUF_MAX_SIZE)
197     {
198         memcpy((mDltContextData.buffer+mDltContextData.size),&(value),sizeof(value));
199         mDltContextData.size += sizeof(value);
200     }
201 }
202
203 void DLTWrapper::enableNoDLTDebug(const bool enableNoDLTDebug)
204 {
205     mEnableNoDLTDebug = enableNoDLTDebug;
206 }
207 #endif
208
209 DLTWrapper::~DLTWrapper()
210 {
211     if (mDLTWrapper)
212         delete mDLTWrapper;
213 }
214