• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2012-2018, 2023 NXP
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #if !defined(NXPLOG__H_INCLUDED)
18 #define NXPLOG__H_INCLUDED
19 #include <log/log.h>
20 #include <thread>
21 
22 typedef struct uci_log_level {
23   uint8_t global_log_level;
24   uint8_t extns_log_level;
25   uint8_t hal_log_level;
26   uint8_t dnld_log_level;
27   uint8_t tml_log_level;
28   uint8_t ucix_log_level;
29   uint8_t ucir_log_level;
30 } uci_log_level_t;
31 
32 typedef struct {
33   std::thread log_thread_handler;
34   FILE *FwCrashLogFile;
35 } phNxpUciHalLog_Control_t;
36 
37 typedef struct uci_debug_log_file {
38   FILE *debuglogFile;
39   bool is_log_file_required;
40   uint32_t fileSize;
41   bool init_sequence_started;
42 } uci_debug_log_file_t;
43 
44 /* global log level Ref */
45 extern uci_log_level_t gLog_level;
46 extern uci_debug_log_file_t gLogFile;
47 
48 void phNxpLog_printErrorLogsTime(const char *format, ...);
49 
50 /* define log module included when compile */
51 #define ENABLE_EXTNS_TRACES TRUE
52 #define ENABLE_HAL_TRACES TRUE
53 #define ENABLE_TML_TRACES TRUE
54 #define ENABLE_FWDNLD_TRACES TRUE
55 #define ENABLE_UCIX_TRACES TRUE
56 #define ENABLE_UCIR_TRACES TRUE
57 
58 #define ENABLE_HCPX_TRACES FALSE
59 #define ENABLE_HCPR_TRACES FALSE
60 
61 /* ####################### Set the log module name in .conf file
62  * ########################## */
63 #define NAME_NXPLOG_EXTNS_LOGLEVEL "NXP_LOG_EXTNS_LOGLEVEL"
64 #define NAME_NXPLOG_HAL_LOGLEVEL "NXP_LOG_UCIHAL_LOGLEVEL"
65 #define NAME_NXPLOG_UCIX_LOGLEVEL "NXP_LOG_UCIX_LOGLEVEL"
66 #define NAME_NXPLOG_UCIR_LOGLEVEL "NXP_LOG_UCIR_LOGLEVEL"
67 #define NAME_NXPLOG_FWDNLD_LOGLEVEL "NXP_LOG_FWDNLD_LOGLEVEL"
68 #define NAME_NXPLOG_TML_LOGLEVEL "NXP_LOG_TML_LOGLEVEL"
69 
70 /* ####################### Set the log module name by Android property
71  * ########################## */
72 #define PROP_NAME_NXPLOG_GLOBAL_LOGLEVEL  "persist.vendor.uwb.nxp_log_level_global"
73 #define PROP_NAME_NXPLOG_EXTNS_LOGLEVEL   "persist.vendor.uwb.nxp_log_level_extns"
74 #define PROP_NAME_NXPLOG_HAL_LOGLEVEL     "persist.vendor.uwb.nxp_log_level_hal"
75 #define PROP_NAME_NXPLOG_UCI_LOGLEVEL     "persist.vendor.uwb.nxp_log_level_uci"
76 #define PROP_NAME_NXPLOG_FWDNLD_LOGLEVEL  "persist.vendor.uwb.nxp_log_level_dnld"
77 #define PROP_NAME_NXPLOG_TML_LOGLEVEL     "persist.vendor.uwb.nxp_log_level_tml"
78 
79 /* ####################### Set the logging level for EVERY COMPONENT here
80  * ######################## :START: */
81 #define NXPLOG_LOG_SILENT_LOGLEVEL 0x00
82 #define NXPLOG_LOG_ERROR_LOGLEVEL 0x01
83 #define NXPLOG_LOG_WARN_LOGLEVEL 0x02
84 #define NXPLOG_LOG_DEBUG_LOGLEVEL 0x03
85 #define NXPLOG_LOG_VERBOSE_LOGLEVEL 0x04
86 /* ####################### Set the default logging level for EVERY COMPONENT
87  * here ########################## :END: */
88 
89 /* The Default log level for all the modules. */
90 #define NXPLOG_DEFAULT_LOGLEVEL NXPLOG_LOG_ERROR_LOGLEVEL
91 
92 /* ################################################################################################################
93  */
94 /* ############################################### Component Names
95  * ################################################ */
96 /* ################################################################################################################
97  */
98 
99 extern const char* NXPLOG_ITEM_EXTNS;  /* Android logging tag for NxpExtns  */
100 extern const char* NXPLOG_ITEM_UCIHAL; /* Android logging tag for NxpUciHal */
101 extern const char* NXPLOG_ITEM_UCIX;   /* Android logging tag for NxpUciX   */
102 extern const char* NXPLOG_ITEM_UCIR;   /* Android logging tag for NxpUciR   */
103 extern const char* NXPLOG_ITEM_FWDNLD; /* Android logging tag for NxpFwDnld */
104 extern const char* NXPLOG_ITEM_TML;    /* Android logging tag for NxpTml    */
105 
106 #ifdef NXP_HCI_REQ
107 extern const char* NXPLOG_ITEM_HCPX; /* Android logging tag for NxpHcpX   */
108 extern const char* NXPLOG_ITEM_HCPR; /* Android logging tag for NxpHcpR   */
109 #endif                               /*NXP_HCI_REQ*/
110 
111 /* ######################################## Defines used for Logging data
112  * ######################################### */
113 #ifdef NXP_VRBS_REQ
114 #define NXPLOG_FUNC_ENTRY(COMP) \
115   LOG_PRI(ANDROID_LOG_VERBOSE, (COMP), "+:%s", (__func__))
116 #define NXPLOG_FUNC_EXIT(COMP) \
117   LOG_PRI(ANDROID_LOG_VERBOSE, (COMP), "-:%s", (__func__))
118 #endif /*NXP_VRBS_REQ*/
119 
120 /* ################################################################################################################
121  */
122 /* ######################################## Logging APIs of actual modules
123  * ######################################## */
124 /* ################################################################################################################
125  */
126 /* Logging APIs used by NxpExtns module */
127 #if (ENABLE_EXTNS_TRACES == TRUE)
128 #define NXPLOG_EXTNS_D(...)                                        \
129   {                                                                \
130     if ((gLog_level.extns_log_level >= NXPLOG_LOG_DEBUG_LOGLEVEL)) \
131       LOG_PRI(ANDROID_LOG_DEBUG, NXPLOG_ITEM_EXTNS, __VA_ARGS__);  \
132   }
133 #define NXPLOG_EXTNS_W(...)                                       \
134   {                                                               \
135     if ((gLog_level.extns_log_level >= NXPLOG_LOG_WARN_LOGLEVEL)) \
136       LOG_PRI(ANDROID_LOG_WARN, NXPLOG_ITEM_EXTNS, __VA_ARGS__);  \
137   }
138 #define NXPLOG_EXTNS_E(...)                                       \
139   {                                                               \
140     if (gLog_level.extns_log_level >= NXPLOG_LOG_ERROR_LOGLEVEL)  \
141       LOG_PRI(ANDROID_LOG_ERROR, NXPLOG_ITEM_EXTNS, __VA_ARGS__); \
142   }
143 #else
144 #define NXPLOG_EXTNS_D(...)
145 #define NXPLOG_EXTNS_W(...)
146 #define NXPLOG_EXTNS_E(...)
147 #endif /* Logging APIs used by NxpExtns module */
148 
149 /* Logging APIs used by NxpUciHal module */
150 #if (ENABLE_HAL_TRACES == TRUE)
151 #define NXPLOG_UCIHAL_V(...)                                       \
152   {                                                                \
153     if ((gLog_level.hal_log_level >= NXPLOG_LOG_VERBOSE_LOGLEVEL))   \
154       LOG_PRI(ANDROID_LOG_VERBOSE, NXPLOG_ITEM_UCIHAL, __VA_ARGS__); \
155   }
156 #define NXPLOG_UCIHAL_D(...)                                       \
157   {                                                                \
158     if ((gLog_level.hal_log_level >= NXPLOG_LOG_DEBUG_LOGLEVEL))   \
159       LOG_PRI(ANDROID_LOG_DEBUG, NXPLOG_ITEM_UCIHAL, __VA_ARGS__); \
160   }
161 #define NXPLOG_UCIHAL_W(...)                                      \
162   {                                                               \
163     if ((gLog_level.hal_log_level >= NXPLOG_LOG_WARN_LOGLEVEL))   \
164       LOG_PRI(ANDROID_LOG_WARN, NXPLOG_ITEM_UCIHAL, __VA_ARGS__); \
165   }
166 #define NXPLOG_UCIHAL_E(...)                                                   \
167   {                                                                            \
168     if (gLog_level.hal_log_level >= NXPLOG_LOG_ERROR_LOGLEVEL)                 \
169       LOG_PRI(ANDROID_LOG_ERROR, NXPLOG_ITEM_UCIHAL, __VA_ARGS__);             \
170     phNxpLog_printErrorLogsTime(__VA_ARGS__);                                  \
171   }
172 #else
173 #define NXPLOG_UCIHAL_V(...)
174 #define NXPLOG_UCIHAL_D(...)
175 #define NXPLOG_UCIHAL_W(...)
176 #define NXPLOG_UCIHAL_E(...)
177 #endif /* Logging APIs used by HAL module */
178 
179 /* Logging APIs used by NxpUciX module */
180 #if (ENABLE_UCIX_TRACES == TRUE)
181 #define NXPLOG_UCIX_D(...)                                        \
182   {                                                               \
183     if ((gLog_level.ucix_log_level >= NXPLOG_LOG_DEBUG_LOGLEVEL)) \
184       LOG_PRI(ANDROID_LOG_DEBUG, NXPLOG_ITEM_UCIX, __VA_ARGS__);  \
185   }
186 #define NXPLOG_UCIX_W(...)                                       \
187   {                                                              \
188     if ((gLog_level.ucix_log_level >= NXPLOG_LOG_WARN_LOGLEVEL)) \
189       LOG_PRI(ANDROID_LOG_WARN, NXPLOG_ITEM_UCIX, __VA_ARGS__);  \
190   }
191 #define NXPLOG_UCIX_E(...)                                       \
192   {                                                              \
193     if (gLog_level.ucix_log_level >= NXPLOG_LOG_ERROR_LOGLEVEL)  \
194       LOG_PRI(ANDROID_LOG_ERROR, NXPLOG_ITEM_UCIX, __VA_ARGS__); \
195   }
196 #else
197 #define NXPLOG_UCIX_D(...)
198 #define NXPLOG_UCIX_W(...)
199 #define NXPLOG_UCIX_E(...)
200 #endif /* Logging APIs used by UCIx module */
201 
202 /* Logging APIs used by NxpUciR module */
203 #if (ENABLE_UCIR_TRACES == TRUE)
204 #define NXPLOG_UCIR_D(...)                                        \
205   {                                                               \
206     if ((gLog_level.ucir_log_level >= NXPLOG_LOG_DEBUG_LOGLEVEL)) \
207       LOG_PRI(ANDROID_LOG_DEBUG, NXPLOG_ITEM_UCIR, __VA_ARGS__);  \
208   }
209 #define NXPLOG_UCIR_W(...)                                       \
210   {                                                              \
211     if ((gLog_level.ucir_log_level >= NXPLOG_LOG_WARN_LOGLEVEL)) \
212       LOG_PRI(ANDROID_LOG_WARN, NXPLOG_ITEM_UCIR, __VA_ARGS__);  \
213   }
214 #define NXPLOG_UCIR_E(...)                                       \
215   {                                                              \
216     if (gLog_level.ucir_log_level >= NXPLOG_LOG_ERROR_LOGLEVEL)  \
217       LOG_PRI(ANDROID_LOG_ERROR, NXPLOG_ITEM_UCIR, __VA_ARGS__); \
218   }
219 #else
220 #define NXPLOG_UCIR_D(...)
221 #define NXPLOG_UCIR_W(...)
222 #define NXPLOG_UCIR_E(...)
223 #endif /* Logging APIs used by UCIR module */
224 
225 /* Logging APIs used by NxpFwDnld module */
226 #if (ENABLE_FWDNLD_TRACES == TRUE)
227 #define NXPLOG_FWDNLD_D(...)                                       \
228   {                                                                \
229     if ((gLog_level.dnld_log_level >= NXPLOG_LOG_DEBUG_LOGLEVEL))  \
230       LOG_PRI(ANDROID_LOG_DEBUG, NXPLOG_ITEM_FWDNLD, __VA_ARGS__); \
231   }
232 #define NXPLOG_FWDNLD_W(...)                                      \
233   {                                                               \
234     if ((gLog_level.dnld_log_level >= NXPLOG_LOG_WARN_LOGLEVEL))  \
235       LOG_PRI(ANDROID_LOG_WARN, NXPLOG_ITEM_FWDNLD, __VA_ARGS__); \
236   }
237 #define NXPLOG_FWDNLD_E(...)                                       \
238   {                                                                \
239     if (gLog_level.dnld_log_level >= NXPLOG_LOG_ERROR_LOGLEVEL)    \
240       LOG_PRI(ANDROID_LOG_ERROR, NXPLOG_ITEM_FWDNLD, __VA_ARGS__); \
241   }
242 #else
243 #define NXPLOG_FWDNLD_D(...)
244 #define NXPLOG_FWDNLD_W(...)
245 #define NXPLOG_FWDNLD_E(...)
246 #endif /* Logging APIs used by NxpFwDnld module */
247 
248 /* Logging APIs used by NxpTml module */
249 #if (ENABLE_TML_TRACES == TRUE)
250 #define NXPLOG_TML_V(...)                                        \
251   {                                                              \
252     if ((gLog_level.tml_log_level >= NXPLOG_LOG_VERBOSE_LOGLEVEL)) \
253       LOG_PRI(ANDROID_LOG_VERBOSE, NXPLOG_ITEM_TML, __VA_ARGS__);  \
254   }
255 #define NXPLOG_TML_D(...)                                        \
256   {                                                              \
257     if ((gLog_level.tml_log_level >= NXPLOG_LOG_DEBUG_LOGLEVEL)) \
258       LOG_PRI(ANDROID_LOG_DEBUG, NXPLOG_ITEM_TML, __VA_ARGS__);  \
259   }
260 #define NXPLOG_TML_W(...)                                       \
261   {                                                             \
262     if ((gLog_level.tml_log_level >= NXPLOG_LOG_WARN_LOGLEVEL)) \
263       LOG_PRI(ANDROID_LOG_WARN, NXPLOG_ITEM_TML, __VA_ARGS__);  \
264   }
265 #define NXPLOG_TML_E(...)                                       \
266   {                                                             \
267     if (gLog_level.tml_log_level >= NXPLOG_LOG_ERROR_LOGLEVEL)  \
268       LOG_PRI(ANDROID_LOG_ERROR, NXPLOG_ITEM_TML, __VA_ARGS__); \
269   }
270 #else
271 #define NXPLOG_TML_V(...)
272 #define NXPLOG_TML_D(...)
273 #define NXPLOG_TML_W(...)
274 #define NXPLOG_TML_E(...)
275 #endif /* Logging APIs used by NxpTml module */
276 
277 #ifdef NXP_HCI_REQ
278 /* Logging APIs used by NxpHcpX module */
279 #if (ENABLE_HCPX_TRACES == TRUE)
280 #define NXPLOG_HCPX_D(...)                                         \
281   {                                                                \
282     if ((gLog_level.dnld_log_level >= NXPLOG_LOG_DEBUG_LOGLEVEL))  \
283       LOG_PRI(ANDROID_LOG_DEBUG, NXPLOG_ITEM_FWDNLD, __VA_ARGS__); \
284   }
285 #define NXPLOG_HCPX_W(...)                                        \
286   {                                                               \
287     if ((gLog_level.dnld_log_level >= NXPLOG_LOG_WARN_LOGLEVEL))  \
288       LOG_PRI(ANDROID_LOG_WARN, NXPLOG_ITEM_FWDNLD, __VA_ARGS__); \
289   }
290 #define NXPLOG_HCPX_E(...)                                         \
291   {                                                                \
292     if (gLog_level.dnld_log_level >= NXPLOG_LOG_ERROR_LOGLEVEL)    \
293       LOG_PRI(ANDROID_LOG_ERROR, NXPLOG_ITEM_FWDNLD, __VA_ARGS__); \
294   }
295 #else
296 #define NXPLOG_HCPX_D(...)
297 #define NXPLOG_HCPX_W(...)
298 #define NXPLOG_HCPX_E(...)
299 #endif /* Logging APIs used by NxpHcpX module */
300 
301 /* Logging APIs used by NxpHcpR module */
302 #if (ENABLE_HCPR_TRACES == TRUE)
303 #define NXPLOG_HCPR_D(...)                                         \
304   {                                                                \
305     if ((gLog_level.dnld_log_level >= NXPLOG_LOG_DEBUG_LOGLEVEL))  \
306       LOG_PRI(ANDROID_LOG_DEBUG, NXPLOG_ITEM_FWDNLD, __VA_ARGS__); \
307   }
308 #define NXPLOG_HCPR_W(...)                                        \
309   {                                                               \
310     if ((gLog_level.dnld_log_level >= NXPLOG_LOG_WARN_LOGLEVEL))  \
311       LOG_PRI(ANDROID_LOG_WARN, NXPLOG_ITEM_FWDNLD, __VA_ARGS__); \
312   }
313 #define NXPLOG_HCPR_E(...)                                         \
314   {                                                                \
315     if (gLog_level.dnld_log_level >= NXPLOG_LOG_ERROR_LOGLEVEL)    \
316       LOG_PRI(ANDROID_LOG_ERROR, NXPLOG_ITEM_FWDNLD, __VA_ARGS__); \
317   }
318 #else
319 #define NXPLOG_HCPR_D(...)
320 #define NXPLOG_HCPR_W(...)
321 #define NXPLOG_HCPR_E(...)
322 #endif /* Logging APIs used by NxpHcpR module */
323 #endif /* NXP_HCI_REQ */
324 
325 #ifdef NXP_VRBS_REQ
326 #if (ENABLE_EXTNS_TRACES == TRUE)
327 #define NXPLOG_EXTNS_ENTRY() NXPLOG_FUNC_ENTRY(NXPLOG_ITEM_EXTNS)
328 #define NXPLOG_EXTNS_EXIT() NXPLOG_FUNC_EXIT(NXPLOG_ITEM_EXTNS)
329 #else
330 #define NXPLOG_EXTNS_ENTRY()
331 #define NXPLOG_EXTNS_EXIT()
332 #endif
333 
334 #if (ENABLE_HAL_TRACES == TRUE)
335 #define NXPLOG_UCIHAL_ENTRY() NXPLOG_FUNC_ENTRY(NXPLOG_ITEM_UCIHAL)
336 #define NXPLOG_UCIHAL_EXIT() NXPLOG_FUNC_EXIT(NXPLOG_ITEM_UCIHAL)
337 #else
338 #define NXPLOG_UCIHAL_ENTRY()
339 #define NXPLOG_UCIHAL_EXIT()
340 #endif
341 
342 #if (ENABLE_UCIX_TRACES == TRUE)
343 #define NXPLOG_UCIX_ENTRY() NXPLOG_FUNC_ENTRY(NXPLOG_ITEM_UCIX)
344 #define NXPLOG_UCIX_EXIT() NXPLOG_FUNC_EXIT(NXPLOG_ITEM_UCIX)
345 #else
346 #define NXPLOG_UCIX_ENTRY()
347 #define NXPLOG_UCIX_EXIT()
348 #endif
349 
350 #if (ENABLE_UCIR_TRACES == TRUE)
351 #define NXPLOG_UCIR_ENTRY() NXPLOG_FUNC_ENTRY(NXPLOG_ITEM_UCIR)
352 #define NXPLOG_UCIR_EXIT() NXPLOG_FUNC_EXIT(NXPLOG_ITEM_UCIR)
353 #else
354 #define NXPLOG_UCIR_ENTRY()
355 #define NXPLOG_UCIR_EXIT()
356 #endif
357 
358 #ifdef NXP_HCI_REQ
359 
360 #if (ENABLE_HCPX_TRACES == TRUE)
361 #define NXPLOG_HCPX_ENTRY() NXPLOG_FUNC_ENTRY(NXPLOG_ITEM_HCPX)
362 #define NXPLOG_HCPX_EXIT() NXPLOG_FUNC_EXIT(NXPLOG_ITEM_HCPX)
363 #else
364 #define NXPLOG_HCPX_ENTRY()
365 #define NXPLOG_HCPX_EXIT()
366 #endif
367 
368 #if (ENABLE_HCPR_TRACES == TRUE)
369 #define NXPLOG_HCPR_ENTRY() NXPLOG_FUNC_ENTRY(NXPLOG_ITEM_HCPR)
370 #define NXPLOG_HCPR_EXIT() NXPLOG_FUNC_EXIT(NXPLOG_ITEM_HCPR)
371 #else
372 #define NXPLOG_HCPR_ENTRY()
373 #define NXPLOG_HCPR_EXIT()
374 #endif
375 #endif /* NXP_HCI_REQ */
376 
377 #endif /* NXP_VRBS_REQ */
378 
379 void phNxpLog_InitializeLogLevel(void);
380 /* Log functions */
381 void phNxpUciHalProp_trigger_fw_crash_log_dump();
382 bool phNxpUciHal_dump_log(size_t data_len, const uint8_t *p_rx_data);
383 void phNxpUciLog_initialize();
384 void phNxpUciLog_deinitialize();
385 void phNxpUciHalProp_print_log(uint8_t what, const uint8_t *p_data,
386                                uint16_t len);
387 
388 #endif /* NXPLOG__H_INCLUDED */
389