bte_logmsg.cc revision 5b790feeeb211c42bf78ca3ae9c26aa30e516765
15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
35b790feeeb211c42bf78ca3ae9c26aa30e516765Jakub Pawlowski *  Copyright 2001-2012 Broadcom Corporation
45738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
55738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Licensed under the Apache License, Version 2.0 (the "License");
65738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  you may not use this file except in compliance with the License.
75738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  You may obtain a copy of the License at:
85738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
95738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  http://www.apache.org/licenses/LICENSE-2.0
105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  See the License for the specific language governing permissions and
155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  limitations under the License.
165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/
185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1949a86709488e5cfd5e23759da18bf9613e15b04dMarie Janssen#define LOG_TAG "bt_bte"
2049120dc867c7818511b5afec461dfc97d17eef58Marie Janssen
21f2af1c42ccb2f642b241c2261b42d0be61d45438Jack He#include <base/logging.h>
22911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#include <stdarg.h>
235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <stdio.h>
245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <stdlib.h>
255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <string.h>
26aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Manton#include <sys/time.h>
27aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Manton#include <time.h>
285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29db554581079863974af8e1289646f5deea6fc044Marie Janssen#include "avrc_api.h"
30911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#include "bt_common.h"
31aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Manton#include "bta_api.h"
32db554581079863974af8e1289646f5deea6fc044Marie Janssen#include "bte.h"
33db554581079863974af8e1289646f5deea6fc044Marie Janssen#include "btm_api.h"
345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btu.h"
355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "l2c_api.h"
36911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#include "main_int.h"
37db554581079863974af8e1289646f5deea6fc044Marie Janssen#include "osi/include/config.h"
38db554581079863974af8e1289646f5deea6fc044Marie Janssen#include "osi/include/log.h"
39db554581079863974af8e1289646f5deea6fc044Marie Janssen#include "port_api.h"
40db554581079863974af8e1289646f5deea6fc044Marie Janssen#include "sdp_api.h"
419891f32471b5c01cf58e4d7dadb04cb3024a9a88Zach Johnson#include "stack_config.h"
42aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Manton
43d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen#if (AVDT_INCLUDED == TRUE)
445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "avdt_api.h"
455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
46d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen#if (A2D_INCLUDED == TRUE)
47f66f4e95f2b4bc8d36033f2d65b387e32601fcd8Pavlin Radoslavov#include "a2dp_api.h"
485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
49d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen#if (BNEP_INCLUDED == TRUE)
505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bnep_api.h"
515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
52d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen#if (PAN_INCLUDED == TRUE)
535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "pan_api.h"
545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
558843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta#if (HID_HOST_INCLUDED == TRUE)
568843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta#include "hidh_api.h"
578843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta#endif
588843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta#if (HID_DEV_INCLUDED == TRUE)
598843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta#include "hidd_api.h"
608843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta#endif
618843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta
62ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "smp_api.h"
635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef DEFAULT_CONF_TRACE_LEVEL
655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define DEFAULT_CONF_TRACE_LEVEL BT_TRACE_LEVEL_WARNING
665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef BTE_LOG_BUF_SIZE
69911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTE_LOG_BUF_SIZE 1024
705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
72911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BTE_LOG_MAX_SIZE (BTE_LOG_BUF_SIZE - 12)
735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define MSG_BUFFER_OFFSET 0
755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
76aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Manton/* LayerIDs for BTA, currently everything maps onto appl_trace_level */
77911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic const char* const bt_layer_tags[] = {
78911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    "bt_btif", "bt_usb",  "bt_serial", "bt_socket", "bt_rs232", "bt_lc",
79911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    "bt_lm",   "bt_hci",  "bt_l2cap",  "bt_rfcomm", "bt_sdp",   "bt_tcs",
80911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    "bt_obex", "bt_btm",  "bt_gap",    "UNUSED",    "UNUSED",   "bt_icp",
81911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    "bt_hsp2", "bt_spp",  "bt_ctp",    "bt_bpp",    "bt_hcrp",  "bt_ftp",
82911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    "bt_opp",  "bt_btu",  "bt_gki", /* OBSOLETED */
83911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    "bt_bnep", "bt_pan",  "bt_hfp",    "bt_hid",    "bt_bip",   "bt_avp",
84911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    "bt_a2d",  "bt_sap",  "bt_amp",    "bt_mca",    "bt_att",   "bt_smp",
85911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    "bt_nfc",  "bt_nci",  "bt_idep",   "bt_ndep",   "bt_llcp",  "bt_rw",
86911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    "bt_ce",   "bt_snep", "bt_ndef",   "bt_nfa",
87aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Manton};
88aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Mantonstatic uint8_t BTAPP_SetTraceLevel(uint8_t new_level);
89aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Mantonstatic uint8_t BTIF_SetTraceLevel(uint8_t new_level);
90aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Mantonstatic uint8_t BTU_SetTraceLevel(uint8_t new_level);
915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* make sure list is order by increasing layer id!!! */
93aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Mantonstatic tBTTRC_FUNC_MAP bttrc_set_level_map[] = {
94911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    {BTTRC_ID_STK_BTU, BTTRC_ID_STK_HCI, BTU_SetTraceLevel, "TRC_HCI",
95911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson     DEFAULT_CONF_TRACE_LEVEL},
96911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    {BTTRC_ID_STK_L2CAP, BTTRC_ID_STK_L2CAP, L2CA_SetTraceLevel, "TRC_L2CAP",
97911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson     DEFAULT_CONF_TRACE_LEVEL},
98911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    {BTTRC_ID_STK_RFCOMM, BTTRC_ID_STK_RFCOMM_DATA, PORT_SetTraceLevel,
99911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson     "TRC_RFCOMM", DEFAULT_CONF_TRACE_LEVEL},
100d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen#if (AVDT_INCLUDED == TRUE)
101911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    {BTTRC_ID_STK_AVDT, BTTRC_ID_STK_AVDT, AVDT_SetTraceLevel, "TRC_AVDT",
102911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson     DEFAULT_CONF_TRACE_LEVEL},
1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
104911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    {BTTRC_ID_STK_AVRC, BTTRC_ID_STK_AVRC, AVRC_SetTraceLevel, "TRC_AVRC",
105911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson     DEFAULT_CONF_TRACE_LEVEL},
106d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen#if (AVDT_INCLUDED == TRUE)
107911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson//{BTTRC_ID_AVDT_SCB, BTTRC_ID_AVDT_CCB, NULL, "TRC_AVDT_SCB",
108911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson// DEFAULT_CONF_TRACE_LEVEL},
1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
110d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen#if (A2D_INCLUDED == TRUE)
111911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    {BTTRC_ID_STK_A2DP, BTTRC_ID_STK_A2DP, A2DP_SetTraceLevel, "TRC_A2D",
112911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson     DEFAULT_CONF_TRACE_LEVEL},
1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
114d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen#if (BNEP_INCLUDED == TRUE)
115911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    {BTTRC_ID_STK_BNEP, BTTRC_ID_STK_BNEP, BNEP_SetTraceLevel, "TRC_BNEP",
116911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson     DEFAULT_CONF_TRACE_LEVEL},
1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
118911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    {BTTRC_ID_STK_BTM_ACL, BTTRC_ID_STK_BTM_SEC, BTM_SetTraceLevel, "TRC_BTM",
119911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson     DEFAULT_CONF_TRACE_LEVEL},
1208843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta#if (HID_HOST_INCLUDED == TRUE)
1218843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta    {BTTRC_ID_STK_HID, BTTRC_ID_STK_HID, HID_HostSetTraceLevel, "TRC_HID_HOST",
1228843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta     DEFAULT_CONF_TRACE_LEVEL},
1238843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta#endif
124d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen#if (PAN_INCLUDED == TRUE)
125911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    {BTTRC_ID_STK_PAN, BTTRC_ID_STK_PAN, PAN_SetTraceLevel, "TRC_PAN",
126911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson     DEFAULT_CONF_TRACE_LEVEL},
1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
128911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    {BTTRC_ID_STK_SDP, BTTRC_ID_STK_SDP, SDP_SetTraceLevel, "TRC_SDP",
129911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson     DEFAULT_CONF_TRACE_LEVEL},
130911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    {BTTRC_ID_STK_SMP, BTTRC_ID_STK_SMP, SMP_SetTraceLevel, "TRC_SMP",
131911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson     DEFAULT_CONF_TRACE_LEVEL},
1328843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta#if (HID_DEV_INCLUDED == TRUE)
1338843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta    {BTTRC_ID_STK_HIDD, BTTRC_ID_STK_HIDD, HID_DevSetTraceLevel, "TRC_HID_DEV",
1348843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta     DEFAULT_CONF_TRACE_LEVEL},
1358843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta#endif
136911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson
137911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    /* LayerIDs for BTA, currently everything maps onto appl_trace_level.
138911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson     */
139911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    {BTTRC_ID_BTA_ACC, BTTRC_ID_BTAPP, BTAPP_SetTraceLevel, "TRC_BTAPP",
140911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson     DEFAULT_CONF_TRACE_LEVEL},
141911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    {BTTRC_ID_BTA_ACC, BTTRC_ID_BTAPP, BTIF_SetTraceLevel, "TRC_BTIF",
142911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson     DEFAULT_CONF_TRACE_LEVEL},
143911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson
144911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    {0, 0, NULL, NULL, DEFAULT_CONF_TRACE_LEVEL}};
145911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson
146911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonvoid LogMsg(uint32_t trace_set_mask, const char* fmt_str, ...) {
147aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Manton  static char buffer[BTE_LOG_BUF_SIZE];
148aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Manton  int trace_layer = TRACE_GET_LAYER(trace_set_mask);
149911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  if (trace_layer >= TRACE_LAYER_MAX_NUM) trace_layer = 0;
150aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Manton
151aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Manton  va_list ap;
152aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Manton  va_start(ap, fmt_str);
153aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Manton  vsnprintf(&buffer[MSG_BUFFER_OFFSET], BTE_LOG_MAX_SIZE, fmt_str, ap);
154aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Manton  va_end(ap);
155aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Manton
156911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  switch (TRACE_GET_TYPE(trace_set_mask)) {
157aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Manton    case TRACE_TYPE_ERROR:
158db554581079863974af8e1289646f5deea6fc044Marie Janssen      LOG_ERROR(bt_layer_tags[trace_layer], "%s", buffer);
159aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Manton      break;
160aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Manton    case TRACE_TYPE_WARNING:
161db554581079863974af8e1289646f5deea6fc044Marie Janssen      LOG_WARN(bt_layer_tags[trace_layer], "%s", buffer);
162aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Manton      break;
163aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Manton    case TRACE_TYPE_API:
164aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Manton    case TRACE_TYPE_EVENT:
165db554581079863974af8e1289646f5deea6fc044Marie Janssen      LOG_INFO(bt_layer_tags[trace_layer], "%s", buffer);
166aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Manton      break;
167aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Manton    case TRACE_TYPE_DEBUG:
168db554581079863974af8e1289646f5deea6fc044Marie Janssen      LOG_DEBUG(bt_layer_tags[trace_layer], "%s", buffer);
169aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Manton      break;
170aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Manton    default:
1719ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson      /* we should never get this */
1725d700dd909645dd1fe120014d817041aaed43b8dMyles Watson      LOG_ERROR(bt_layer_tags[trace_layer], "!BAD TRACE TYPE! %s", buffer);
1735d700dd909645dd1fe120014d817041aaed43b8dMyles Watson      CHECK(TRACE_GET_TYPE(trace_set_mask) == TRACE_TYPE_ERROR);
174aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Manton      break;
175aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Manton  }
176aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Manton}
1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
178aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Manton/* this function should go into BTAPP_DM for example */
179aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Mantonstatic uint8_t BTAPP_SetTraceLevel(uint8_t new_level) {
180911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  if (new_level != 0xFF) appl_trace_level = new_level;
1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
182aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Manton  return appl_trace_level;
183aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Manton}
184aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Manton
185aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Mantonstatic uint8_t BTIF_SetTraceLevel(uint8_t new_level) {
186911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  if (new_level != 0xFF) btif_trace_level = new_level;
187aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Manton
188aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Manton  return btif_trace_level;
189aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Manton}
190aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Manton
191aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Mantonstatic uint8_t BTU_SetTraceLevel(uint8_t new_level) {
192911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  if (new_level != 0xFF) btu_trace_level = new_level;
193aa0f6ecc4cfd5c401e6278ee7139ce0cacc40483Chris Manton
19478bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov  return btu_trace_level;
1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1969891f32471b5c01cf58e4d7dadb04cb3024a9a88Zach Johnson
197911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic void load_levels_from_config(const config_t* config) {
198f2af1c42ccb2f642b241c2261b42d0be61d45438Jack He  CHECK(config != NULL);
1999891f32471b5c01cf58e4d7dadb04cb3024a9a88Zach Johnson
200911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  for (tBTTRC_FUNC_MAP* functions = &bttrc_set_level_map[0];
201911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson       functions->trc_name; ++functions) {
202f3fb316634973d26cc4b4f55656b86e2a15bd69cJakub Pawlowski    int value = config_get_int(*config, CONFIG_DEFAULT_SECTION,
203f3fb316634973d26cc4b4f55656b86e2a15bd69cJakub Pawlowski                               functions->trc_name, -1);
204911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    if (value != -1) functions->trace_level = value;
2059891f32471b5c01cf58e4d7dadb04cb3024a9a88Zach Johnson
206911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    if (functions->p_f) functions->p_f(functions->trace_level);
2079891f32471b5c01cf58e4d7dadb04cb3024a9a88Zach Johnson  }
2089891f32471b5c01cf58e4d7dadb04cb3024a9a88Zach Johnson}
2099891f32471b5c01cf58e4d7dadb04cb3024a9a88Zach Johnson
210911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic future_t* init(void) {
211911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  const stack_config_t* stack_config = stack_config_get_interface();
2129891f32471b5c01cf58e4d7dadb04cb3024a9a88Zach Johnson  if (!stack_config->get_trace_config_enabled()) {
213db554581079863974af8e1289646f5deea6fc044Marie Janssen    LOG_INFO(LOG_TAG, "using compile default trace settings");
2149891f32471b5c01cf58e4d7dadb04cb3024a9a88Zach Johnson    return NULL;
2159891f32471b5c01cf58e4d7dadb04cb3024a9a88Zach Johnson  }
2169891f32471b5c01cf58e4d7dadb04cb3024a9a88Zach Johnson
21775b83661eaecceeb48c73891ced70904bf0ce01bJakub Pawlowski  init_cpp_logging(stack_config->get_all());
21875b83661eaecceeb48c73891ced70904bf0ce01bJakub Pawlowski
2199891f32471b5c01cf58e4d7dadb04cb3024a9a88Zach Johnson  load_levels_from_config(stack_config->get_all());
2209891f32471b5c01cf58e4d7dadb04cb3024a9a88Zach Johnson  return NULL;
2219891f32471b5c01cf58e4d7dadb04cb3024a9a88Zach Johnson}
2229891f32471b5c01cf58e4d7dadb04cb3024a9a88Zach Johnson
223b2a292b5d8df2f359c38b0787bc01181225a9bc9Pavlin RadoslavovEXPORT_SYMBOL extern const module_t bte_logmsg_module = {
224911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    .name = BTE_LOGMSG_MODULE,
225911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    .init = init,
226911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    .start_up = NULL,
227911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    .shut_down = NULL,
228911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    .clean_up = NULL,
229911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    .dependencies = {STACK_CONFIG_MODULE, NULL}};
230