1/****************************************************************************** 2 * 3 * Copyright (C) 1999-2012 Broadcom Corporation 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at: 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 ******************************************************************************/ 18 19#pragma once 20 21#include <stdint.h> 22 23#ifdef __cplusplus 24extern "C" { 25#endif 26 27static const char BTE_LOGMSG_MODULE[] = "bte_logmsg_module"; 28 29/* BTE tracing IDs for debug purposes */ 30/* LayerIDs for stack */ 31#define BTTRC_ID_STK_GKI 1 32#define BTTRC_ID_STK_BTU 2 33#define BTTRC_ID_STK_HCI 3 34#define BTTRC_ID_STK_L2CAP 4 35#define BTTRC_ID_STK_RFCM_MX 5 36#define BTTRC_ID_STK_RFCM_PRT 6 37#define BTTRC_ID_STK_OBEX_C 7 38#define BTTRC_ID_STK_OBEX_S 8 39#define BTTRC_ID_STK_AVCT 9 40#define BTTRC_ID_STK_AVDT 10 41#define BTTRC_ID_STK_AVRC 11 42#define BTTRC_ID_STK_BIC 12 43#define BTTRC_ID_STK_BIS 13 44#define BTTRC_ID_STK_BNEP 14 45#define BTTRC_ID_STK_BPP 15 46#define BTTRC_ID_STK_BTM_ACL 16 47#define BTTRC_ID_STK_BTM_PM 17 48#define BTTRC_ID_STK_BTM_DEV_CTRL 18 49#define BTTRC_ID_STK_BTM_SVC_DSC 19 50#define BTTRC_ID_STK_BTM_INQ 20 51#define BTTRC_ID_STK_BTM_SCO 21 52#define BTTRC_ID_STK_BTM_SEC 22 53#define BTTRC_ID_STK_HID 24 54#define BTTRC_ID_STK_HSP2 25 55#define BTTRC_ID_STK_CTP 26 56#define BTTRC_ID_STK_FTC 27 57#define BTTRC_ID_STK_FTS 28 58#define BTTRC_ID_STK_GAP 29 59#define BTTRC_ID_STK_HCRP 31 60#define BTTRC_ID_STK_ICP 32 61#define BTTRC_ID_STK_OPC 33 62#define BTTRC_ID_STK_OPS 34 63#define BTTRC_ID_STK_PAN 35 64#define BTTRC_ID_STK_SAP 36 65#define BTTRC_ID_STK_SDP 37 66#define BTTRC_ID_STK_SLIP 38 67#define BTTRC_ID_STK_SPP 39 68#define BTTRC_ID_STK_TCS 40 69#define BTTRC_ID_STK_VDP 41 70#define BTTRC_ID_STK_MCAP 42 71#define BTTRC_ID_STK_GATT 43 72#define BTTRC_ID_STK_SMP 44 73#define BTTRC_ID_STK_NFC 45 74#define BTTRC_ID_STK_NCI 46 75#define BTTRC_ID_STK_IDEP 47 76#define BTTRC_ID_STK_NDEP 48 77#define BTTRC_ID_STK_LLCP 49 78#define BTTRC_ID_STK_RW 50 79#define BTTRC_ID_STK_CE 51 80#define BTTRC_ID_STK_SNEP 52 81#define BTTRC_ID_STK_NDEF 53 82#define BTTRC_ID_STK_HIDD 54 83 84/* LayerIDs for BTA */ 85#define BTTRC_ID_BTA_ACC 55 /* Advanced Camera Client */ 86#define BTTRC_ID_BTA_AG 56 /* audio gateway */ 87#define BTTRC_ID_BTA_AV 57 /* Advanced audio */ 88#define BTTRC_ID_BTA_BIC 58 /* Basic Imaging Client */ 89#define BTTRC_ID_BTA_BIS 59 /* Basic Imaging Server */ 90#define BTTRC_ID_BTA_BP 60 /* Basic Printing Client */ 91#define BTTRC_ID_BTA_CG 61 92#define BTTRC_ID_BTA_CT 62 /* cordless telephony terminal */ 93#define BTTRC_ID_BTA_DG 63 /* data gateway */ 94#define BTTRC_ID_BTA_DM 64 /* device manager */ 95#define BTTRC_ID_BTA_DM_SRCH 65 /* device manager search */ 96#define BTTRC_ID_BTA_DM_SEC 66 /* device manager security */ 97#define BTTRC_ID_BTA_FM 67 98#define BTTRC_ID_BTA_FTC 68 /* file transfer client */ 99#define BTTRC_ID_BTA_FTS 69 /* file transfer server */ 100#define BTTRC_ID_BTA_HIDH 70 101#define BTTRC_ID_BTA_HIDD 71 102#define BTTRC_ID_BTA_JV 72 103#define BTTRC_ID_BTA_OPC 73 /* object push client */ 104#define BTTRC_ID_BTA_OPS 74 /* object push server */ 105#define BTTRC_ID_BTA_PAN 75 /* Personal Area Networking */ 106#define BTTRC_ID_BTA_PR 76 /* Printer client */ 107#define BTTRC_ID_BTA_SC 77 /* SIM Card Access server */ 108#define BTTRC_ID_BTA_SS 78 /* synchronization server */ 109#define BTTRC_ID_BTA_SYS 79 /* system manager */ 110#define BTTRC_ID_AVDT_SCB 80 /* avdt scb */ 111#define BTTRC_ID_AVDT_CCB 81 /* avdt ccb */ 112 113/* LayerIDs added for BTL-A. Probably should modify bte_logmsg.cc in future. */ 114#define BTTRC_ID_STK_RFCOMM 82 115#define BTTRC_ID_STK_RFCOMM_DATA 83 116#define BTTRC_ID_STK_OBEX 84 117#define BTTRC_ID_STK_A2DP 85 118#define BTTRC_ID_STK_BIP 86 119 120/* LayerIDs for BT APP */ 121#define BTTRC_ID_BTAPP 87 122/* this is a temporary solution to allow dynamic enable/disable of 123 * BT_PROTOCOL_TRACE */ 124#define BTTRC_ID_BT_PROTOCOL 88 125#define BTTRC_ID_MAX_ID BTTRC_ID_BT_PROTOCOL 126#define BTTRC_ID_ALL_LAYERS 0xFF /* all trace layers */ 127 128/****************************************************************************** 129 * 130 * Trace Levels 131 * 132 * The following values may be used for different levels: 133 * BT_TRACE_LEVEL_NONE 0 * No trace messages to be generated 134 * BT_TRACE_LEVEL_ERROR 1 * Error condition trace messages 135 * BT_TRACE_LEVEL_WARNING 2 * Warning condition trace messages 136 * BT_TRACE_LEVEL_API 3 * API traces 137 * BT_TRACE_LEVEL_EVENT 4 * Debug messages for events 138 * BT_TRACE_LEVEL_DEBUG 5 * Debug messages (general) 139 *****************************************************************************/ 140 141/* Core Stack default trace levels */ 142#ifndef HCI_INITIAL_TRACE_LEVEL 143#define HCI_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_WARNING 144#endif 145 146#ifndef BTM_INITIAL_TRACE_LEVEL 147#define BTM_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_WARNING 148#endif 149 150#ifndef L2CAP_INITIAL_TRACE_LEVEL 151#define L2CAP_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_WARNING 152#endif 153 154#ifndef RFCOMM_INITIAL_TRACE_LEVEL 155#define RFCOMM_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_WARNING 156#endif 157 158#ifndef SDP_INITIAL_TRACE_LEVEL 159#define SDP_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_WARNING 160#endif 161 162#ifndef GAP_INITIAL_TRACE_LEVEL 163#define GAP_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_WARNING 164#endif 165 166#ifndef BNEP_INITIAL_TRACE_LEVEL 167#define BNEP_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_WARNING 168#endif 169 170#ifndef PAN_INITIAL_TRACE_LEVEL 171#define PAN_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_WARNING 172#endif 173 174#ifndef A2DP_INITIAL_TRACE_LEVEL 175#define A2DP_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_WARNING 176#endif 177 178#ifndef AVDT_INITIAL_TRACE_LEVEL 179#define AVDT_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_WARNING 180#endif 181 182#ifndef AVCT_INITIAL_TRACE_LEVEL 183#define AVCT_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_WARNING 184#endif 185 186#ifndef AVRC_INITIAL_TRACE_LEVEL 187#define AVRC_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_WARNING 188#endif 189 190#ifndef MCA_INITIAL_TRACE_LEVEL 191#define MCA_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_WARNING 192#endif 193 194#ifndef HID_INITIAL_TRACE_LEVEL 195#define HID_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_WARNING 196#endif 197 198#ifndef APPL_INITIAL_TRACE_LEVEL 199#define APPL_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_WARNING 200#endif 201 202#ifndef GATT_INITIAL_TRACE_LEVEL 203#define GATT_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_WARNING 204#endif 205 206#ifndef SMP_INITIAL_TRACE_LEVEL 207#define SMP_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_WARNING 208#endif 209 210#define BT_TRACE(l, t, ...) \ 211 LogMsg((TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t)), ##__VA_ARGS__) 212 213/* Define tracing for the HCI unit */ 214#define HCI_TRACE_ERROR(...) \ 215 { \ 216 if (btu_trace_level >= BT_TRACE_LEVEL_ERROR) \ 217 BT_TRACE(TRACE_LAYER_HCI, TRACE_TYPE_ERROR, ##__VA_ARGS__); \ 218 } 219#define HCI_TRACE_WARNING(...) \ 220 { \ 221 if (btu_trace_level >= BT_TRACE_LEVEL_WARNING) \ 222 BT_TRACE(TRACE_LAYER_HCI, TRACE_TYPE_WARNING, ##__VA_ARGS__); \ 223 } 224#define HCI_TRACE_EVENT(...) \ 225 { \ 226 if (btu_trace_level >= BT_TRACE_LEVEL_EVENT) \ 227 BT_TRACE(TRACE_LAYER_HCI, TRACE_TYPE_EVENT, ##__VA_ARGS__); \ 228 } 229#define HCI_TRACE_DEBUG(...) \ 230 { \ 231 if (btu_trace_level >= BT_TRACE_LEVEL_DEBUG) \ 232 BT_TRACE(TRACE_LAYER_HCI, TRACE_TYPE_DEBUG, ##__VA_ARGS__); \ 233 } 234 235/* Define tracing for BTM */ 236#define BTM_TRACE_ERROR(...) \ 237 { \ 238 if (btm_cb.trace_level >= BT_TRACE_LEVEL_ERROR) \ 239 BT_TRACE(TRACE_LAYER_BTM, TRACE_TYPE_ERROR, ##__VA_ARGS__); \ 240 } 241#define BTM_TRACE_WARNING(...) \ 242 { \ 243 if (btm_cb.trace_level >= BT_TRACE_LEVEL_WARNING) \ 244 BT_TRACE(TRACE_LAYER_BTM, TRACE_TYPE_WARNING, ##__VA_ARGS__); \ 245 } 246#define BTM_TRACE_API(...) \ 247 { \ 248 if (btm_cb.trace_level >= BT_TRACE_LEVEL_API) \ 249 BT_TRACE(TRACE_LAYER_BTM, TRACE_TYPE_API, ##__VA_ARGS__); \ 250 } 251#define BTM_TRACE_EVENT(...) \ 252 { \ 253 if (btm_cb.trace_level >= BT_TRACE_LEVEL_EVENT) \ 254 BT_TRACE(TRACE_LAYER_BTM, TRACE_TYPE_EVENT, ##__VA_ARGS__); \ 255 } 256#define BTM_TRACE_DEBUG(...) \ 257 { \ 258 if (btm_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) \ 259 BT_TRACE(TRACE_LAYER_BTM, TRACE_TYPE_DEBUG, ##__VA_ARGS__); \ 260 } 261 262/* Define tracing for the L2CAP unit */ 263#define L2CAP_TRACE_ERROR(...) \ 264 { \ 265 if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_ERROR) \ 266 BT_TRACE(TRACE_LAYER_L2CAP, TRACE_TYPE_ERROR, ##__VA_ARGS__); \ 267 } 268#define L2CAP_TRACE_WARNING(...) \ 269 { \ 270 if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_WARNING) \ 271 BT_TRACE(TRACE_LAYER_L2CAP, TRACE_TYPE_WARNING, ##__VA_ARGS__); \ 272 } 273#define L2CAP_TRACE_API(...) \ 274 { \ 275 if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_API) \ 276 BT_TRACE(TRACE_LAYER_L2CAP, TRACE_TYPE_API, ##__VA_ARGS__); \ 277 } 278#define L2CAP_TRACE_EVENT(...) \ 279 { \ 280 if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_EVENT) \ 281 BT_TRACE(TRACE_LAYER_L2CAP, TRACE_TYPE_EVENT, ##__VA_ARGS__); \ 282 } 283#define L2CAP_TRACE_DEBUG(...) \ 284 { \ 285 if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_DEBUG) \ 286 BT_TRACE(TRACE_LAYER_L2CAP, TRACE_TYPE_DEBUG, ##__VA_ARGS__); \ 287 } 288 289/* Define tracing for the SDP unit */ 290#define SDP_TRACE_ERROR(...) \ 291 { \ 292 if (sdp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) \ 293 BT_TRACE(TRACE_LAYER_SDP, TRACE_TYPE_ERROR, ##__VA_ARGS__); \ 294 } 295#define SDP_TRACE_WARNING(...) \ 296 { \ 297 if (sdp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) \ 298 BT_TRACE(TRACE_LAYER_SDP, TRACE_TYPE_WARNING, ##__VA_ARGS__); \ 299 } 300#define SDP_TRACE_API(...) \ 301 { \ 302 if (sdp_cb.trace_level >= BT_TRACE_LEVEL_API) \ 303 BT_TRACE(TRACE_LAYER_SDP, TRACE_TYPE_API, ##__VA_ARGS__); \ 304 } 305#define SDP_TRACE_EVENT(...) \ 306 { \ 307 if (sdp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) \ 308 BT_TRACE(TRACE_LAYER_SDP, TRACE_TYPE_EVENT, ##__VA_ARGS__); \ 309 } 310#define SDP_TRACE_DEBUG(...) \ 311 { \ 312 if (sdp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) \ 313 BT_TRACE(TRACE_LAYER_SDP, TRACE_TYPE_DEBUG, ##__VA_ARGS__); \ 314 } 315 316/* Define tracing for the RFCOMM unit */ 317#define RFCOMM_TRACE_ERROR(...) \ 318 { \ 319 if (rfc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) \ 320 BT_TRACE(TRACE_LAYER_RFCOMM, TRACE_TYPE_ERROR, ##__VA_ARGS__); \ 321 } 322#define RFCOMM_TRACE_WARNING(...) \ 323 { \ 324 if (rfc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) \ 325 BT_TRACE(TRACE_LAYER_RFCOMM, TRACE_TYPE_WARNING, ##__VA_ARGS__); \ 326 } 327#define RFCOMM_TRACE_API(...) \ 328 { \ 329 if (rfc_cb.trace_level >= BT_TRACE_LEVEL_API) \ 330 BT_TRACE(TRACE_LAYER_RFCOMM, TRACE_TYPE_API, ##__VA_ARGS__); \ 331 } 332#define RFCOMM_TRACE_EVENT(...) \ 333 { \ 334 if (rfc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) \ 335 BT_TRACE(TRACE_LAYER_RFCOMM, TRACE_TYPE_EVENT, ##__VA_ARGS__); \ 336 } 337#define RFCOMM_TRACE_DEBUG(...) \ 338 { \ 339 if (rfc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) \ 340 BT_TRACE(TRACE_LAYER_RFCOMM, TRACE_TYPE_DEBUG, ##__VA_ARGS__); \ 341 } 342 343/* Generic Access Profile traces */ 344#define GAP_TRACE_ERROR(...) \ 345 { \ 346 if (gap_cb.trace_level >= BT_TRACE_LEVEL_ERROR) \ 347 BT_TRACE(TRACE_LAYER_GAP, TRACE_TYPE_ERROR, ##__VA_ARGS__); \ 348 } 349#define GAP_TRACE_EVENT(...) \ 350 { \ 351 if (gap_cb.trace_level >= BT_TRACE_LEVEL_EVENT) \ 352 BT_TRACE(TRACE_LAYER_GAP, TRACE_TYPE_EVENT, ##__VA_ARGS__); \ 353 } 354#define GAP_TRACE_API(...) \ 355 { \ 356 if (gap_cb.trace_level >= BT_TRACE_LEVEL_API) \ 357 BT_TRACE(TRACE_LAYER_GAP, TRACE_TYPE_API, ##__VA_ARGS__); \ 358 } 359#define GAP_TRACE_WARNING(...) \ 360 { \ 361 if (gap_cb.trace_level >= BT_TRACE_LEVEL_WARNING) \ 362 BT_TRACE(TRACE_LAYER_GAP, TRACE_TYPE_WARNING, ##__VA_ARGS__); \ 363 } 364 365/* define traces for HID Host */ 366#define HIDH_TRACE_ERROR(...) \ 367 { \ 368 if (hh_cb.trace_level >= BT_TRACE_LEVEL_ERROR) \ 369 BT_TRACE(TRACE_LAYER_HID, TRACE_TYPE_ERROR, ##__VA_ARGS__); \ 370 } 371#define HIDH_TRACE_WARNING(...) \ 372 { \ 373 if (hh_cb.trace_level >= BT_TRACE_LEVEL_WARNING) \ 374 BT_TRACE(TRACE_LAYER_HID, TRACE_TYPE_WARNING, ##__VA_ARGS__); \ 375 } 376#define HIDH_TRACE_API(...) \ 377 { \ 378 if (hh_cb.trace_level >= BT_TRACE_LEVEL_API) \ 379 BT_TRACE(TRACE_LAYER_HID, TRACE_TYPE_API, ##__VA_ARGS__); \ 380 } 381#define HIDH_TRACE_EVENT(...) \ 382 { \ 383 if (hh_cb.trace_level >= BT_TRACE_LEVEL_EVENT) \ 384 BT_TRACE(TRACE_LAYER_HID, TRACE_TYPE_EVENT, ##__VA_ARGS__); \ 385 } 386#define HIDH_TRACE_DEBUG(...) \ 387 { \ 388 if (hh_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) \ 389 BT_TRACE(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, ##__VA_ARGS__); \ 390 } 391 392/* define traces for HID Device */ 393#define HIDD_TRACE_ERROR(...) \ 394 { \ 395 if (hd_cb.trace_level >= BT_TRACE_LEVEL_ERROR) \ 396 BT_TRACE(TRACE_LAYER_HID, TRACE_TYPE_ERROR, ##__VA_ARGS__); \ 397 } 398#define HIDD_TRACE_WARNING(...) \ 399 { \ 400 if (hd_cb.trace_level >= BT_TRACE_LEVEL_WARNING) \ 401 BT_TRACE(TRACE_LAYER_HID, TRACE_TYPE_WARNING, ##__VA_ARGS__); \ 402 } 403#define HIDD_TRACE_API(...) \ 404 { \ 405 if (hd_cb.trace_level >= BT_TRACE_LEVEL_API) \ 406 BT_TRACE(TRACE_LAYER_HID, TRACE_TYPE_API, ##__VA_ARGS__); \ 407 } 408#define HIDD_TRACE_EVENT(...) \ 409 { \ 410 if (hd_cb.trace_level >= BT_TRACE_LEVEL_EVENT) \ 411 BT_TRACE(TRACE_LAYER_HID, TRACE_TYPE_EVENT, ##__VA_ARGS__); \ 412 } 413#define HIDD_TRACE_DEBUG(...) \ 414 { \ 415 if (hd_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) \ 416 BT_TRACE(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, ##__VA_ARGS__); \ 417 } 418#define HIDD_TRACE_VERBOSE(...) \ 419 { \ 420 if (hd_cb.trace_level >= BT_TRACE_LEVEL_VERBOSE) \ 421 BT_TRACE(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, ##__VA_ARGS__); \ 422 } 423 424/* define traces for BNEP */ 425#define BNEP_TRACE_ERROR(...) \ 426 { \ 427 if (bnep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) \ 428 BT_TRACE(TRACE_LAYER_BNEP, TRACE_TYPE_ERROR, ##__VA_ARGS__); \ 429 } 430#define BNEP_TRACE_WARNING(...) \ 431 { \ 432 if (bnep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) \ 433 BT_TRACE(TRACE_LAYER_BNEP, TRACE_TYPE_WARNING, ##__VA_ARGS__); \ 434 } 435#define BNEP_TRACE_API(...) \ 436 { \ 437 if (bnep_cb.trace_level >= BT_TRACE_LEVEL_API) \ 438 BT_TRACE(TRACE_LAYER_BNEP, TRACE_TYPE_API, ##__VA_ARGS__); \ 439 } 440#define BNEP_TRACE_EVENT(...) \ 441 { \ 442 if (bnep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) \ 443 BT_TRACE(TRACE_LAYER_BNEP, TRACE_TYPE_EVENT, ##__VA_ARGS__); \ 444 } 445#define BNEP_TRACE_DEBUG(...) \ 446 { \ 447 if (bnep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) \ 448 BT_TRACE(TRACE_LAYER_BNEP, TRACE_TYPE_DEBUG, ##__VA_ARGS__); \ 449 } 450 451/* define traces for PAN */ 452#define PAN_TRACE_ERROR(...) \ 453 { \ 454 if (pan_cb.trace_level >= BT_TRACE_LEVEL_ERROR) \ 455 BT_TRACE(TRACE_LAYER_PAN, TRACE_TYPE_ERROR, ##__VA_ARGS__); \ 456 } 457#define PAN_TRACE_WARNING(...) \ 458 { \ 459 if (pan_cb.trace_level >= BT_TRACE_LEVEL_WARNING) \ 460 BT_TRACE(TRACE_LAYER_PAN, TRACE_TYPE_WARNING, ##__VA_ARGS__); \ 461 } 462#define PAN_TRACE_API(...) \ 463 { \ 464 if (pan_cb.trace_level >= BT_TRACE_LEVEL_API) \ 465 BT_TRACE(TRACE_LAYER_PAN, TRACE_TYPE_API, ##__VA_ARGS__); \ 466 } 467#define PAN_TRACE_EVENT(...) \ 468 { \ 469 if (pan_cb.trace_level >= BT_TRACE_LEVEL_EVENT) \ 470 BT_TRACE(TRACE_LAYER_PAN, TRACE_TYPE_EVENT, ##__VA_ARGS__); \ 471 } 472#define PAN_TRACE_DEBUG(...) \ 473 { \ 474 if (pan_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) \ 475 BT_TRACE(TRACE_LAYER_PAN, TRACE_TYPE_DEBUG, ##__VA_ARGS__); \ 476 } 477 478/* Define tracing for the A2DP profile */ 479#define A2DP_TRACE_ERROR(...) \ 480 { \ 481 if (a2dp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) \ 482 BT_TRACE(TRACE_LAYER_A2DP, TRACE_TYPE_ERROR, ##__VA_ARGS__); \ 483 } 484#define A2DP_TRACE_WARNING(...) \ 485 { \ 486 if (a2dp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) \ 487 BT_TRACE(TRACE_LAYER_A2DP, TRACE_TYPE_WARNING, ##__VA_ARGS__); \ 488 } 489#define A2DP_TRACE_EVENT(...) \ 490 { \ 491 if (a2dp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) \ 492 BT_TRACE(TRACE_LAYER_A2DP, TRACE_TYPE_EVENT, ##__VA_ARGS__); \ 493 } 494#define A2DP_TRACE_DEBUG(...) \ 495 { \ 496 if (a2dp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) \ 497 BT_TRACE(TRACE_LAYER_A2DP, TRACE_TYPE_DEBUG, ##__VA_ARGS__); \ 498 } 499#define A2DP_TRACE_API(...) \ 500 { \ 501 if (a2dp_cb.trace_level >= BT_TRACE_LEVEL_API) \ 502 BT_TRACE(TRACE_LAYER_A2DP, TRACE_TYPE_API, ##__VA_ARGS__); \ 503 } 504 505/* AVDTP */ 506#define AVDT_TRACE_ERROR(...) \ 507 { \ 508 if (avdt_cb.trace_level >= BT_TRACE_LEVEL_ERROR) \ 509 BT_TRACE(TRACE_LAYER_AVP, TRACE_TYPE_ERROR, ##__VA_ARGS__); \ 510 } 511#define AVDT_TRACE_WARNING(...) \ 512 { \ 513 if (avdt_cb.trace_level >= BT_TRACE_LEVEL_WARNING) \ 514 BT_TRACE(TRACE_LAYER_AVP, TRACE_TYPE_WARNING, ##__VA_ARGS__); \ 515 } 516#define AVDT_TRACE_EVENT(...) \ 517 { \ 518 if (avdt_cb.trace_level >= BT_TRACE_LEVEL_EVENT) \ 519 BT_TRACE(TRACE_LAYER_AVP, TRACE_TYPE_EVENT, ##__VA_ARGS__); \ 520 } 521#define AVDT_TRACE_DEBUG(...) \ 522 { \ 523 if (avdt_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) \ 524 BT_TRACE(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG, ##__VA_ARGS__); \ 525 } 526#define AVDT_TRACE_API(...) \ 527 { \ 528 if (avdt_cb.trace_level >= BT_TRACE_LEVEL_API) \ 529 BT_TRACE(TRACE_LAYER_AVP, TRACE_TYPE_API, ##__VA_ARGS__); \ 530 } 531 532/* Define tracing for the AVCTP protocol */ 533#define AVCT_TRACE_ERROR(...) \ 534 { \ 535 if (avct_cb.trace_level >= BT_TRACE_LEVEL_ERROR) \ 536 BT_TRACE(TRACE_LAYER_AVP, TRACE_TYPE_ERROR, ##__VA_ARGS__); \ 537 } 538#define AVCT_TRACE_WARNING(...) \ 539 { \ 540 if (avct_cb.trace_level >= BT_TRACE_LEVEL_WARNING) \ 541 BT_TRACE(TRACE_LAYER_AVP, TRACE_TYPE_WARNING, ##__VA_ARGS__); \ 542 } 543#define AVCT_TRACE_EVENT(...) \ 544 { \ 545 if (avct_cb.trace_level >= BT_TRACE_LEVEL_EVENT) \ 546 BT_TRACE(TRACE_LAYER_AVP, TRACE_TYPE_EVENT, ##__VA_ARGS__); \ 547 } 548#define AVCT_TRACE_DEBUG(...) \ 549 { \ 550 if (avct_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) \ 551 BT_TRACE(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG, ##__VA_ARGS__); \ 552 } 553#define AVCT_TRACE_API(...) \ 554 { \ 555 if (avct_cb.trace_level >= BT_TRACE_LEVEL_API) \ 556 BT_TRACE(TRACE_LAYER_AVP, TRACE_TYPE_API, ##__VA_ARGS__); \ 557 } 558 559/* Define tracing for the AVRCP profile */ 560#define AVRC_TRACE_ERROR(...) \ 561 { \ 562 if (avrc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) \ 563 BT_TRACE(TRACE_LAYER_AVP, TRACE_TYPE_ERROR, ##__VA_ARGS__); \ 564 } 565#define AVRC_TRACE_WARNING(...) \ 566 { \ 567 if (avrc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) \ 568 BT_TRACE(TRACE_LAYER_AVP, TRACE_TYPE_WARNING, ##__VA_ARGS__); \ 569 } 570#define AVRC_TRACE_EVENT(...) \ 571 { \ 572 if (avrc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) \ 573 BT_TRACE(TRACE_LAYER_AVP, TRACE_TYPE_EVENT, ##__VA_ARGS__); \ 574 } 575#define AVRC_TRACE_DEBUG(...) \ 576 { \ 577 if (avrc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) \ 578 BT_TRACE(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG, ##__VA_ARGS__); \ 579 } 580#define AVRC_TRACE_API(...) \ 581 { \ 582 if (avrc_cb.trace_level >= BT_TRACE_LEVEL_API) \ 583 BT_TRACE(TRACE_LAYER_AVP, TRACE_TYPE_API, ##__VA_ARGS__); \ 584 } 585 586/* MCAP */ 587#define MCA_TRACE_ERROR(...) \ 588 { \ 589 if (mca_cb.trace_level >= BT_TRACE_LEVEL_ERROR) \ 590 BT_TRACE(TRACE_LAYER_MCA, TRACE_TYPE_ERROR, ##__VA_ARGS__); \ 591 } 592#define MCA_TRACE_WARNING(...) \ 593 { \ 594 if (mca_cb.trace_level >= BT_TRACE_LEVEL_WARNING) \ 595 BT_TRACE(TRACE_LAYER_MCA, TRACE_TYPE_WARNING, ##__VA_ARGS__); \ 596 } 597#define MCA_TRACE_EVENT(...) \ 598 { \ 599 if (mca_cb.trace_level >= BT_TRACE_LEVEL_EVENT) \ 600 BT_TRACE(TRACE_LAYER_MCA, TRACE_TYPE_EVENT, ##__VA_ARGS__); \ 601 } 602#define MCA_TRACE_DEBUG(...) \ 603 { \ 604 if (mca_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) \ 605 BT_TRACE(TRACE_LAYER_MCA, TRACE_TYPE_DEBUG, ##__VA_ARGS__); \ 606 } 607#define MCA_TRACE_API(...) \ 608 { \ 609 if (mca_cb.trace_level >= BT_TRACE_LEVEL_API) \ 610 BT_TRACE(TRACE_LAYER_MCA, TRACE_TYPE_API, ##__VA_ARGS__); \ 611 } 612 613/* Define tracing for the ATT/GATT unit */ 614#define GATT_TRACE_ERROR(...) \ 615 { \ 616 if (gatt_cb.trace_level >= BT_TRACE_LEVEL_ERROR) \ 617 BT_TRACE(TRACE_LAYER_ATT, TRACE_TYPE_ERROR, ##__VA_ARGS__); \ 618 } 619#define GATT_TRACE_WARNING(...) \ 620 { \ 621 if (gatt_cb.trace_level >= BT_TRACE_LEVEL_WARNING) \ 622 BT_TRACE(TRACE_LAYER_ATT, TRACE_TYPE_WARNING, ##__VA_ARGS__); \ 623 } 624#define GATT_TRACE_API(...) \ 625 { \ 626 if (gatt_cb.trace_level >= BT_TRACE_LEVEL_API) \ 627 BT_TRACE(TRACE_LAYER_ATT, TRACE_TYPE_API, ##__VA_ARGS__); \ 628 } 629#define GATT_TRACE_EVENT(...) \ 630 { \ 631 if (gatt_cb.trace_level >= BT_TRACE_LEVEL_EVENT) \ 632 BT_TRACE(TRACE_LAYER_ATT, TRACE_TYPE_EVENT, ##__VA_ARGS__); \ 633 } 634#define GATT_TRACE_DEBUG(...) \ 635 { \ 636 if (gatt_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) \ 637 BT_TRACE(TRACE_LAYER_ATT, TRACE_TYPE_DEBUG, ##__VA_ARGS__); \ 638 } 639 640/* Define tracing for the SMP unit */ 641#define SMP_TRACE_ERROR(...) \ 642 { \ 643 if (smp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) \ 644 BT_TRACE(TRACE_LAYER_SMP, TRACE_TYPE_ERROR, ##__VA_ARGS__); \ 645 } 646#define SMP_TRACE_WARNING(...) \ 647 { \ 648 if (smp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) \ 649 BT_TRACE(TRACE_LAYER_SMP, TRACE_TYPE_WARNING, ##__VA_ARGS__); \ 650 } 651#define SMP_TRACE_API(...) \ 652 { \ 653 if (smp_cb.trace_level >= BT_TRACE_LEVEL_API) \ 654 BT_TRACE(TRACE_LAYER_SMP, TRACE_TYPE_API, ##__VA_ARGS__); \ 655 } 656#define SMP_TRACE_EVENT(...) \ 657 { \ 658 if (smp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) \ 659 BT_TRACE(TRACE_LAYER_SMP, TRACE_TYPE_EVENT, ##__VA_ARGS__); \ 660 } 661#define SMP_TRACE_DEBUG(...) \ 662 { \ 663 if (smp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) \ 664 BT_TRACE(TRACE_LAYER_SMP, TRACE_TYPE_DEBUG, ##__VA_ARGS__); \ 665 } 666 667extern uint8_t btif_trace_level; 668 669/* define traces for application */ 670#define BTIF_TRACE_ERROR(...) \ 671 { \ 672 if (btif_trace_level >= BT_TRACE_LEVEL_ERROR) \ 673 LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \ 674 TRACE_TYPE_ERROR, \ 675 ##__VA_ARGS__); \ 676 } 677#define BTIF_TRACE_WARNING(...) \ 678 { \ 679 if (btif_trace_level >= BT_TRACE_LEVEL_WARNING) \ 680 LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \ 681 TRACE_TYPE_WARNING, \ 682 ##__VA_ARGS__); \ 683 } 684#define BTIF_TRACE_API(...) \ 685 { \ 686 if (btif_trace_level >= BT_TRACE_LEVEL_API) \ 687 LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \ 688 TRACE_TYPE_API, \ 689 ##__VA_ARGS__); \ 690 } 691#define BTIF_TRACE_EVENT(...) \ 692 { \ 693 if (btif_trace_level >= BT_TRACE_LEVEL_EVENT) \ 694 LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \ 695 TRACE_TYPE_EVENT, \ 696 ##__VA_ARGS__); \ 697 } 698#define BTIF_TRACE_DEBUG(...) \ 699 { \ 700 if (btif_trace_level >= BT_TRACE_LEVEL_DEBUG) \ 701 LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \ 702 TRACE_TYPE_DEBUG, \ 703 ##__VA_ARGS__); \ 704 } 705#define BTIF_TRACE_VERBOSE(...) \ 706 { \ 707 if (btif_trace_level >= BT_TRACE_LEVEL_VERBOSE) \ 708 LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \ 709 TRACE_TYPE_DEBUG, \ 710 ##__VA_ARGS__); \ 711 } 712 713/* define traces for application */ 714#define APPL_TRACE_ERROR(...) \ 715 { \ 716 if (appl_trace_level >= BT_TRACE_LEVEL_ERROR) \ 717 LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \ 718 TRACE_TYPE_ERROR, \ 719 ##__VA_ARGS__); \ 720 } 721#define APPL_TRACE_WARNING(...) \ 722 { \ 723 if (appl_trace_level >= BT_TRACE_LEVEL_WARNING) \ 724 LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \ 725 TRACE_TYPE_WARNING, \ 726 ##__VA_ARGS__); \ 727 } 728#define APPL_TRACE_API(...) \ 729 { \ 730 if (appl_trace_level >= BT_TRACE_LEVEL_API) \ 731 LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \ 732 TRACE_TYPE_API, \ 733 ##__VA_ARGS__); \ 734 } 735#define APPL_TRACE_EVENT(...) \ 736 { \ 737 if (appl_trace_level >= BT_TRACE_LEVEL_EVENT) \ 738 LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \ 739 TRACE_TYPE_EVENT, \ 740 ##__VA_ARGS__); \ 741 } 742#define APPL_TRACE_DEBUG(...) \ 743 { \ 744 if (appl_trace_level >= BT_TRACE_LEVEL_DEBUG) \ 745 LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \ 746 TRACE_TYPE_DEBUG, \ 747 ##__VA_ARGS__); \ 748 } 749#define APPL_TRACE_VERBOSE(...) \ 750 { \ 751 if (appl_trace_level >= BT_TRACE_LEVEL_VERBOSE) \ 752 LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \ 753 TRACE_TYPE_DEBUG, \ 754 ##__VA_ARGS__); \ 755 } 756 757typedef uint8_t tBTTRC_LAYER_ID; 758typedef uint8_t(tBTTRC_SET_TRACE_LEVEL)(uint8_t); 759 760typedef struct { 761 const tBTTRC_LAYER_ID layer_id_start; 762 const tBTTRC_LAYER_ID layer_id_end; 763 tBTTRC_SET_TRACE_LEVEL* p_f; 764 const char* trc_name; 765 uint8_t trace_level; 766} tBTTRC_FUNC_MAP; 767 768/* External declaration for appl_trace_level here to avoid to add the 769 * declaration in all the files using APPL_TRACExxx macros */ 770extern uint8_t appl_trace_level; 771 772void LogMsg(uint32_t trace_set_mask, const char* fmt_str, ...); 773 774#ifdef __cplusplus 775} 776#endif 777