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