* fixed typo in addpackagedependencies.sh used for package management
[profile/ivi/audiomanager.git] / AudioManagerDaemon / src / CAmDltWrapper.cpp
1 /**
2  * Copyright (C) 2012, BMW AG
3  *
4  * This file is part of GENIVI Project AudioManager.
5  *
6  * Contributions are licensed to the GENIVI Alliance under one or more
7  * Contribution License Agreements.
8  *
9  * \copyright
10  * This Source Code Form is subject to the terms of the
11  * Mozilla Public License, v. 2.0. If a  copy of the MPL was not distributed with
12  * this file, You can obtain one at http://mozilla.org/MPL/2.0/.
13  *
14  *
15  * \author Christian Mueller, christian.ei.mueller@bmw.de BMW 2011,2012
16  *
17  * \file CAmDltWrapper.cpp
18  * For further information see http://www.genivi.org/.
19  *
20  */
21
22
23 #include "shared/CAmDltWrapper.h"
24 #include <string>
25 #include <sstream>
26 #include <iostream>
27 #include <string.h>
28
29 namespace am
30 {
31
32 CAmDltWrapper* CAmDltWrapper::mpDLTWrapper = NULL;
33
34 CAmDltWrapper *CAmDltWrapper::instance(const bool enableNoDLTDebug)
35 {
36     if (!mpDLTWrapper)
37         mpDLTWrapper = new CAmDltWrapper(enableNoDLTDebug);
38 #ifndef WITH_DLT
39     if(enableNoDLTDebug)
40         mpDLTWrapper->enableNoDLTDebug(true);
41 #endif        
42     return (mpDLTWrapper);
43 }
44
45 void CAmDltWrapper::unregisterContext(DltContext & handle)
46 {
47 #ifdef WITH_DLT
48     dlt_unregister_context(&handle);
49 #else
50     (void) handle;
51 #endif
52 }
53
54 CAmDltWrapper::CAmDltWrapper(const bool enableNoDLTDebug) :
55 #ifndef WITH_DLT
56         mEnableNoDLTDebug(enableNoDLTDebug),
57 #endif
58         mDltContext(), //
59         mDltContextData()
60 {
61     (void) enableNoDLTDebug;
62 #ifndef WITH_DLT
63     std::cout << "[DLT] Running without DLT-support" << std::endl;
64 #endif
65 }
66
67 void CAmDltWrapper::registerApp(const char *appid, const char *description)
68 {
69 #ifdef WITH_DLT
70     dlt_register_app(appid, description);
71     //register a default context
72     dlt_register_context(&mDltContext, "def", "default Context registered by DLTWrapper CLass");
73 #else
74     (void) appid;
75     (void) description;
76 #endif
77 }
78
79 void CAmDltWrapper::registerContext(DltContext& handle, const char *contextid, const char *description)
80 {
81 #ifdef WITH_DLT
82     dlt_register_context(&handle, contextid, description);
83 #else
84     (void) handle;
85     memcpy(&mDltContext.contextID,contextid,4);
86     const size_t str_len = strlen(description);
87     if(str_len < 2000)
88     {
89         mDltContextData.context_description = new char[str_len + 1];
90         (void) strcpy(mDltContextData.context_description,description);
91     }
92 #endif
93 }
94
95 void CAmDltWrapper::init(DltLogLevelType loglevel, DltContext* context)
96 {
97     (void) loglevel;
98     if (!context)
99         context = &mDltContext;
100 #ifdef WITH_DLT
101     dlt_user_log_write_start(context, &mDltContextData, loglevel);
102 #endif
103
104 }
105
106 void CAmDltWrapper::send()
107 {
108 #ifdef WITH_DLT
109     dlt_user_log_write_finish(&mDltContextData);
110 #else
111     if(mEnableNoDLTDebug)
112         std::cout << "[" << mDltContext.contextID << "] " << mDltContextData.buffer.str().c_str() << std::endl;
113
114     mDltContextData.buffer.str("");
115     mDltContextData.buffer.clear();
116 #endif
117 }
118
119 void CAmDltWrapper::append(const int8_t value)
120 {
121 #ifdef WITH_DLT
122     dlt_user_log_write_int8(&mDltContextData, value);
123 #else
124     appendNoDLT(value);
125 #endif
126 }
127
128 void CAmDltWrapper::append(const uint8_t value)
129 {
130 #ifdef WITH_DLT
131     dlt_user_log_write_uint8(&mDltContextData, value);
132 #else
133     appendNoDLT(value);
134 #endif
135 }
136
137 void CAmDltWrapper::append(const int16_t value)
138 {
139 #ifdef WITH_DLT
140     dlt_user_log_write_int16(&mDltContextData, value);
141 #else
142     appendNoDLT(value);
143 #endif
144 }
145
146 void CAmDltWrapper::append(const uint16_t value)
147 {
148 #ifdef WITH_DLT
149     dlt_user_log_write_uint16(&mDltContextData, value);
150 #else
151     appendNoDLT(value);
152 #endif
153 }
154
155 void CAmDltWrapper::append(const int32_t value)
156 {
157 #ifdef WITH_DLT
158     dlt_user_log_write_int32(&mDltContextData, value);
159 #else
160     appendNoDLT(value);
161 #endif
162 }
163
164 void CAmDltWrapper::append(const uint32_t value)
165 {
166 #ifdef WITH_DLT
167     dlt_user_log_write_uint32(&mDltContextData, value);
168 #else
169     appendNoDLT(value);
170 #endif
171 }
172
173 void CAmDltWrapper::append(const char*& value)
174 {
175 #ifdef WITH_DLT
176     dlt_user_log_write_string(&mDltContextData, value);
177 #else
178     mDltContextData.buffer << value;
179 #endif
180 }
181
182 void CAmDltWrapper::append(const std::string& value)
183 {
184 #ifdef WITH_DLT
185     dlt_user_log_write_string(&mDltContextData, value.c_str());
186 #else
187     mDltContextData.buffer << value;
188 #endif
189 }
190
191 void CAmDltWrapper::append(const bool value)
192 {
193 #ifdef WITH_DLT
194     dlt_user_log_write_bool(&mDltContextData, static_cast<uint8_t>(value));
195 #else
196     appendNoDLT(value);
197 #endif
198 }
199
200 #ifndef WITH_DLT
201 template<class T> void CAmDltWrapper::appendNoDLT(T value)
202 {
203     mDltContextData.buffer << value;
204 }
205
206 void CAmDltWrapper::enableNoDLTDebug(const bool enableNoDLTDebug)
207 {
208     mEnableNoDLTDebug = enableNoDLTDebug;
209 }
210 #endif
211
212 CAmDltWrapper::~CAmDltWrapper()
213 {
214     if (mpDLTWrapper)
215         delete mpDLTWrapper;
216 }
217 }
218