blob: 22c357dc3f7faf42db67684cc73fae6e2f1d7c7d [file] [log] [blame]
The Android Open Source Project5738f832012-12-12 16:00:35 -08001/******************************************************************************
2 *
Jakub Pawlowski5b790fe2017-09-18 09:00:20 -07003 * Copyright 2001-2012 Broadcom Corporation
The Android Open Source Project5738f832012-12-12 16:00:35 -08004 *
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
Marie Janssen49a86702015-07-08 11:48:57 -070019#define LOG_TAG "bt_bte"
Marie Janssen49120dc2015-07-07 16:47:20 -070020
Jack Hef2af1c42016-12-13 01:59:12 -080021#include <base/logging.h>
Myles Watson911d1ae2016-11-28 16:44:40 -080022#include <stdarg.h>
The Android Open Source Project5738f832012-12-12 16:00:35 -080023#include <stdio.h>
24#include <stdlib.h>
25#include <string.h>
Chris Mantonaa0f6ec2014-09-24 15:18:41 -070026#include <sys/time.h>
27#include <time.h>
The Android Open Source Project5738f832012-12-12 16:00:35 -080028
Marie Janssendb554582015-06-26 14:53:46 -070029#include "avrc_api.h"
Myles Watson911d1ae2016-11-28 16:44:40 -080030#include "bt_common.h"
Chris Mantonaa0f6ec2014-09-24 15:18:41 -070031#include "bta_api.h"
Marie Janssendb554582015-06-26 14:53:46 -070032#include "bte.h"
33#include "btm_api.h"
Chris Mantonaa0f6ec2014-09-24 15:18:41 -070034#include "btu.h"
The Android Open Source Project5738f832012-12-12 16:00:35 -080035#include "l2c_api.h"
Myles Watson911d1ae2016-11-28 16:44:40 -080036#include "main_int.h"
Marie Janssendb554582015-06-26 14:53:46 -070037#include "osi/include/config.h"
Sharvil Nanavati44802762014-12-23 23:08:58 -080038#include "osi/include/log.h"
Marie Janssendb554582015-06-26 14:53:46 -070039#include "port_api.h"
40#include "sdp_api.h"
Zach Johnson9891f322014-09-22 22:11:55 -070041#include "stack_config.h"
Chris Mantonaa0f6ec2014-09-24 15:18:41 -070042
The Android Open Source Project5738f832012-12-12 16:00:35 -080043#include "avdt_api.h"
Pavlin Radoslavovf66f4e92016-10-14 15:14:37 -070044#include "a2dp_api.h"
Marie Janssend19e0782016-07-15 12:48:27 -070045#if (BNEP_INCLUDED == TRUE)
The Android Open Source Project5738f832012-12-12 16:00:35 -080046#include "bnep_api.h"
47#endif
Marie Janssend19e0782016-07-15 12:48:27 -070048#if (PAN_INCLUDED == TRUE)
The Android Open Source Project5738f832012-12-12 16:00:35 -080049#include "pan_api.h"
50#endif
Hemant Gupta8843cc82014-04-18 12:34:55 +053051#if (HID_HOST_INCLUDED == TRUE)
52#include "hidh_api.h"
53#endif
54#if (HID_DEV_INCLUDED == TRUE)
55#include "hidd_api.h"
56#endif
57
Ganesh Ganapathi Battaead3cde2013-02-05 15:22:31 -080058#include "smp_api.h"
The Android Open Source Project5738f832012-12-12 16:00:35 -080059
The Android Open Source Project5738f832012-12-12 16:00:35 -080060#ifndef DEFAULT_CONF_TRACE_LEVEL
61#define DEFAULT_CONF_TRACE_LEVEL BT_TRACE_LEVEL_WARNING
62#endif
63
64#ifndef BTE_LOG_BUF_SIZE
Gurpreet Ghai7a3819f2017-08-07 11:35:22 +053065#define BTE_LOG_BUF_SIZE 256
The Android Open Source Project5738f832012-12-12 16:00:35 -080066#endif
Chris Mantonaa0f6ec2014-09-24 15:18:41 -070067
Myles Watson911d1ae2016-11-28 16:44:40 -080068#define BTE_LOG_MAX_SIZE (BTE_LOG_BUF_SIZE - 12)
The Android Open Source Project5738f832012-12-12 16:00:35 -080069
The Android Open Source Project5738f832012-12-12 16:00:35 -080070#define MSG_BUFFER_OFFSET 0
Chris Mantonaa0f6ec2014-09-24 15:18:41 -070071
Chris Mantonaa0f6ec2014-09-24 15:18:41 -070072/* LayerIDs for BTA, currently everything maps onto appl_trace_level */
Myles Watson911d1ae2016-11-28 16:44:40 -080073static const char* const bt_layer_tags[] = {
Jack He238f8352019-01-03 17:11:24 -080074 "bt_btif",
75 "bt_usb",
76 "bt_serial",
77 "bt_socket",
78 "bt_rs232",
79 "bt_lc",
80 "bt_lm",
81 "bt_hci",
82 "bt_l2cap",
83 "bt_rfcomm",
84 "bt_sdp",
85 "bt_tcs",
86 "bt_obex",
87 "bt_btm",
88 "bt_gap",
89 "UNUSED",
90 "UNUSED",
91 "bt_icp",
92 "bt_hsp2",
93 "bt_spp",
94 "bt_ctp",
95 "bt_bpp",
96 "bt_hcrp",
97 "bt_ftp",
98 "bt_opp",
99 "bt_btu",
100 "bt_gki_deprecated",
101 "bt_bnep",
102 "bt_pan",
103 "bt_hfp",
104 "bt_hid",
105 "bt_bip",
106 "bt_avp",
107 "bt_a2d",
108 "bt_sap",
109 "bt_amp",
110 "bt_mca_deprecated",
111 "bt_att",
112 "bt_smp",
113 "bt_nfc",
114 "bt_nci",
115 "bt_idep",
116 "bt_ndep",
117 "bt_llcp",
118 "bt_rw",
119 "bt_ce",
120 "bt_snep",
121 "bt_ndef",
122 "bt_nfa",
Chris Mantonaa0f6ec2014-09-24 15:18:41 -0700123};
Chris Mantonaa0f6ec2014-09-24 15:18:41 -0700124static uint8_t BTAPP_SetTraceLevel(uint8_t new_level);
125static uint8_t BTIF_SetTraceLevel(uint8_t new_level);
126static uint8_t BTU_SetTraceLevel(uint8_t new_level);
127
128/* make sure list is order by increasing layer id!!! */
129static tBTTRC_FUNC_MAP bttrc_set_level_map[] = {
Myles Watson911d1ae2016-11-28 16:44:40 -0800130 {BTTRC_ID_STK_BTU, BTTRC_ID_STK_HCI, BTU_SetTraceLevel, "TRC_HCI",
131 DEFAULT_CONF_TRACE_LEVEL},
132 {BTTRC_ID_STK_L2CAP, BTTRC_ID_STK_L2CAP, L2CA_SetTraceLevel, "TRC_L2CAP",
133 DEFAULT_CONF_TRACE_LEVEL},
134 {BTTRC_ID_STK_RFCOMM, BTTRC_ID_STK_RFCOMM_DATA, PORT_SetTraceLevel,
135 "TRC_RFCOMM", DEFAULT_CONF_TRACE_LEVEL},
Myles Watson911d1ae2016-11-28 16:44:40 -0800136 {BTTRC_ID_STK_AVDT, BTTRC_ID_STK_AVDT, AVDT_SetTraceLevel, "TRC_AVDT",
137 DEFAULT_CONF_TRACE_LEVEL},
Myles Watson911d1ae2016-11-28 16:44:40 -0800138 {BTTRC_ID_STK_AVRC, BTTRC_ID_STK_AVRC, AVRC_SetTraceLevel, "TRC_AVRC",
139 DEFAULT_CONF_TRACE_LEVEL},
Myles Watson911d1ae2016-11-28 16:44:40 -0800140 {BTTRC_ID_STK_A2DP, BTTRC_ID_STK_A2DP, A2DP_SetTraceLevel, "TRC_A2D",
141 DEFAULT_CONF_TRACE_LEVEL},
Marie Janssend19e0782016-07-15 12:48:27 -0700142#if (BNEP_INCLUDED == TRUE)
Myles Watson911d1ae2016-11-28 16:44:40 -0800143 {BTTRC_ID_STK_BNEP, BTTRC_ID_STK_BNEP, BNEP_SetTraceLevel, "TRC_BNEP",
144 DEFAULT_CONF_TRACE_LEVEL},
Chris Mantonaa0f6ec2014-09-24 15:18:41 -0700145#endif
Myles Watson911d1ae2016-11-28 16:44:40 -0800146 {BTTRC_ID_STK_BTM_ACL, BTTRC_ID_STK_BTM_SEC, BTM_SetTraceLevel, "TRC_BTM",
147 DEFAULT_CONF_TRACE_LEVEL},
Hemant Gupta8843cc82014-04-18 12:34:55 +0530148#if (HID_HOST_INCLUDED == TRUE)
149 {BTTRC_ID_STK_HID, BTTRC_ID_STK_HID, HID_HostSetTraceLevel, "TRC_HID_HOST",
150 DEFAULT_CONF_TRACE_LEVEL},
151#endif
Marie Janssend19e0782016-07-15 12:48:27 -0700152#if (PAN_INCLUDED == TRUE)
Myles Watson911d1ae2016-11-28 16:44:40 -0800153 {BTTRC_ID_STK_PAN, BTTRC_ID_STK_PAN, PAN_SetTraceLevel, "TRC_PAN",
154 DEFAULT_CONF_TRACE_LEVEL},
Chris Mantonaa0f6ec2014-09-24 15:18:41 -0700155#endif
Myles Watson911d1ae2016-11-28 16:44:40 -0800156 {BTTRC_ID_STK_SDP, BTTRC_ID_STK_SDP, SDP_SetTraceLevel, "TRC_SDP",
157 DEFAULT_CONF_TRACE_LEVEL},
Myles Watson911d1ae2016-11-28 16:44:40 -0800158 {BTTRC_ID_STK_SMP, BTTRC_ID_STK_SMP, SMP_SetTraceLevel, "TRC_SMP",
159 DEFAULT_CONF_TRACE_LEVEL},
Hemant Gupta8843cc82014-04-18 12:34:55 +0530160#if (HID_DEV_INCLUDED == TRUE)
161 {BTTRC_ID_STK_HIDD, BTTRC_ID_STK_HIDD, HID_DevSetTraceLevel, "TRC_HID_DEV",
162 DEFAULT_CONF_TRACE_LEVEL},
163#endif
The Android Open Source Project5738f832012-12-12 16:00:35 -0800164
Myles Watson911d1ae2016-11-28 16:44:40 -0800165 /* LayerIDs for BTA, currently everything maps onto appl_trace_level.
166 */
167 {BTTRC_ID_BTA_ACC, BTTRC_ID_BTAPP, BTAPP_SetTraceLevel, "TRC_BTAPP",
168 DEFAULT_CONF_TRACE_LEVEL},
169 {BTTRC_ID_BTA_ACC, BTTRC_ID_BTAPP, BTIF_SetTraceLevel, "TRC_BTIF",
170 DEFAULT_CONF_TRACE_LEVEL},
The Android Open Source Project5738f832012-12-12 16:00:35 -0800171
Myles Watson911d1ae2016-11-28 16:44:40 -0800172 {0, 0, NULL, NULL, DEFAULT_CONF_TRACE_LEVEL}};
The Android Open Source Project5738f832012-12-12 16:00:35 -0800173
Myles Watson911d1ae2016-11-28 16:44:40 -0800174void LogMsg(uint32_t trace_set_mask, const char* fmt_str, ...) {
Gurpreet Ghai7a3819f2017-08-07 11:35:22 +0530175 char buffer[BTE_LOG_BUF_SIZE];
Chris Mantonaa0f6ec2014-09-24 15:18:41 -0700176 int trace_layer = TRACE_GET_LAYER(trace_set_mask);
Myles Watson911d1ae2016-11-28 16:44:40 -0800177 if (trace_layer >= TRACE_LAYER_MAX_NUM) trace_layer = 0;
The Android Open Source Project5738f832012-12-12 16:00:35 -0800178
Chris Mantonaa0f6ec2014-09-24 15:18:41 -0700179 va_list ap;
180 va_start(ap, fmt_str);
181 vsnprintf(&buffer[MSG_BUFFER_OFFSET], BTE_LOG_MAX_SIZE, fmt_str, ap);
182 va_end(ap);
The Android Open Source Project5738f832012-12-12 16:00:35 -0800183
Myles Watson911d1ae2016-11-28 16:44:40 -0800184 switch (TRACE_GET_TYPE(trace_set_mask)) {
Chris Mantonaa0f6ec2014-09-24 15:18:41 -0700185 case TRACE_TYPE_ERROR:
Marie Janssendb554582015-06-26 14:53:46 -0700186 LOG_ERROR(bt_layer_tags[trace_layer], "%s", buffer);
Chris Mantonaa0f6ec2014-09-24 15:18:41 -0700187 break;
188 case TRACE_TYPE_WARNING:
Marie Janssendb554582015-06-26 14:53:46 -0700189 LOG_WARN(bt_layer_tags[trace_layer], "%s", buffer);
Chris Mantonaa0f6ec2014-09-24 15:18:41 -0700190 break;
191 case TRACE_TYPE_API:
192 case TRACE_TYPE_EVENT:
Marie Janssendb554582015-06-26 14:53:46 -0700193 LOG_INFO(bt_layer_tags[trace_layer], "%s", buffer);
Chris Mantonaa0f6ec2014-09-24 15:18:41 -0700194 break;
195 case TRACE_TYPE_DEBUG:
Marie Janssendb554582015-06-26 14:53:46 -0700196 LOG_DEBUG(bt_layer_tags[trace_layer], "%s", buffer);
Chris Mantonaa0f6ec2014-09-24 15:18:41 -0700197 break;
198 default:
Myles Watson9ca07092016-11-28 16:41:53 -0800199 /* we should never get this */
Myles Watson5d700dd2017-03-21 10:24:20 -0700200 LOG_ERROR(bt_layer_tags[trace_layer], "!BAD TRACE TYPE! %s", buffer);
201 CHECK(TRACE_GET_TYPE(trace_set_mask) == TRACE_TYPE_ERROR);
Chris Mantonaa0f6ec2014-09-24 15:18:41 -0700202 break;
203 }
204}
The Android Open Source Project5738f832012-12-12 16:00:35 -0800205
Chris Mantonaa0f6ec2014-09-24 15:18:41 -0700206/* this function should go into BTAPP_DM for example */
207static uint8_t BTAPP_SetTraceLevel(uint8_t new_level) {
Myles Watson911d1ae2016-11-28 16:44:40 -0800208 if (new_level != 0xFF) appl_trace_level = new_level;
The Android Open Source Project5738f832012-12-12 16:00:35 -0800209
Chris Mantonaa0f6ec2014-09-24 15:18:41 -0700210 return appl_trace_level;
211}
212
213static uint8_t BTIF_SetTraceLevel(uint8_t new_level) {
Myles Watson911d1ae2016-11-28 16:44:40 -0800214 if (new_level != 0xFF) btif_trace_level = new_level;
Chris Mantonaa0f6ec2014-09-24 15:18:41 -0700215
216 return btif_trace_level;
217}
218
219static uint8_t BTU_SetTraceLevel(uint8_t new_level) {
Myles Watson911d1ae2016-11-28 16:44:40 -0800220 if (new_level != 0xFF) btu_trace_level = new_level;
Chris Mantonaa0f6ec2014-09-24 15:18:41 -0700221
Pavlin Radoslavov78bcff72015-12-04 17:36:34 -0800222 return btu_trace_level;
The Android Open Source Project5738f832012-12-12 16:00:35 -0800223}
Zach Johnson9891f322014-09-22 22:11:55 -0700224
Myles Watson911d1ae2016-11-28 16:44:40 -0800225static void load_levels_from_config(const config_t* config) {
Jack Hef2af1c42016-12-13 01:59:12 -0800226 CHECK(config != NULL);
Zach Johnson9891f322014-09-22 22:11:55 -0700227
Myles Watson911d1ae2016-11-28 16:44:40 -0800228 for (tBTTRC_FUNC_MAP* functions = &bttrc_set_level_map[0];
229 functions->trc_name; ++functions) {
Jakub Pawlowskif3fb3162017-10-06 00:04:27 -0700230 int value = config_get_int(*config, CONFIG_DEFAULT_SECTION,
231 functions->trc_name, -1);
Myles Watson911d1ae2016-11-28 16:44:40 -0800232 if (value != -1) functions->trace_level = value;
Eagle Kang95f6f1b2017-04-13 14:50:53 +0800233 LOG_INFO(LOG_TAG, "BTE_InitTraceLevels -- %s : Level %d",
234 functions->trc_name, functions->trace_level);
Myles Watson911d1ae2016-11-28 16:44:40 -0800235 if (functions->p_f) functions->p_f(functions->trace_level);
Zach Johnson9891f322014-09-22 22:11:55 -0700236 }
237}
238
Myles Watson911d1ae2016-11-28 16:44:40 -0800239static future_t* init(void) {
240 const stack_config_t* stack_config = stack_config_get_interface();
Zach Johnson9891f322014-09-22 22:11:55 -0700241 if (!stack_config->get_trace_config_enabled()) {
Marie Janssendb554582015-06-26 14:53:46 -0700242 LOG_INFO(LOG_TAG, "using compile default trace settings");
Zach Johnson9891f322014-09-22 22:11:55 -0700243 return NULL;
244 }
245
Jakub Pawlowski75b83662016-09-27 18:24:59 -0700246 init_cpp_logging(stack_config->get_all());
247
Zach Johnson9891f322014-09-22 22:11:55 -0700248 load_levels_from_config(stack_config->get_all());
249 return NULL;
250}
251
Pavlin Radoslavovb2a292b2016-10-14 19:34:48 -0700252EXPORT_SYMBOL extern const module_t bte_logmsg_module = {
Myles Watson911d1ae2016-11-28 16:44:40 -0800253 .name = BTE_LOGMSG_MODULE,
254 .init = init,
255 .start_up = NULL,
256 .shut_down = NULL,
257 .clean_up = NULL,
258 .dependencies = {STACK_CONFIG_MODULE, NULL}};