Home | History | Annotate | Download | only in include
      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
     24 extern "C" {
     25 #endif
     26 
     27 static 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 
    667 extern 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 
    757 typedef uint8_t tBTTRC_LAYER_ID;
    758 typedef uint8_t(tBTTRC_SET_TRACE_LEVEL)(uint8_t);
    759 
    760 typedef 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 */
    770 extern uint8_t appl_trace_level;
    771 
    772 void LogMsg(uint32_t trace_set_mask, const char* fmt_str, ...);
    773 
    774 #ifdef __cplusplus
    775 }
    776 #endif
    777