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