1、从btsnoop.cc中可以看到有个btsnoop_mode,开启蓝牙的时候就是通过这里找到对应的函数
2、执行start_up()的时候,就会启动btsnoop,代码如下:
static future_t* start_up() {
std::array<char, PROPERTY_VALUE_MAX> property = {};
std::lock_guard<std::mutex> lock(btsnoop_mutex);
// Default mode is FILTERED on userdebug/eng build, DISABLED on user build.
// It can also be overwritten by modifying the global setting.
int is_debuggable = osi_property_get_int32(IS_DEBUGGABLE_PROPERTY, 0);
std::string default_mode = BTSNOOP_MODE_DISABLED;
if (is_debuggable) {
int len = osi_property_get(BTSNOOP_DEFAULT_MODE_PROPERTY, property.data(),
BTSNOOP_MODE_DISABLED);
default_mode = std::string(property.data(), len);
}
// Get the actual mode
int len = osi_property_get(BTSNOOP_LOG_MODE_PROPERTY, property.data(),
default_mode.c_str());
std::string btsnoop_mode(property.data(), len);
if (btsnoop_mode == BTSNOOP_MODE_FILTERED) {
LOG(INFO) << __func__ << ": Filtered Snoop Logs enabled";
is_btsnoop_enabled = true;
is_btsnoop_filtered = true;
delete_btsnoop_files(false);
} else if (btsnoop_mode == BTSNOOP_MODE_FULL) {
LOG(INFO) << __func__ << ": Snoop Logs fully enabled";
is_btsnoop_enabled = true;
is_btsnoop_filtered = false;
delete_btsnoop_files(true);
} else {
LOG(INFO) << __func__ << ": Snoop Logs disabled";
is_btsnoop_enabled = false;
is_btsnoop_filtered = false;
delete_btsnoop_files(true);
delete_btsnoop_files(false);
}
if (is_btsnoop_enabled) {
open_next_snoop_file();
packets_per_file = osi_property_get_int32(BTSNOOP_MAX_PACKETS_PROPERTY,
DEFAULT_BTSNOOP_SIZE);
btsnoop_net_open();
}
return NULL;
}
3、对应的宏定义:
#define IS_DEBUGGABLE_PROPERTY "ro.debuggable"
#define BTSNOOP_LOG_MODE_PROPERTY "persist.bluetooth.btsnooplogmode"
#define BTSNOOP_DEFAULT_MODE_PROPERTY "persist.bluetooth.btsnoopdefaultmode"
#define BTSNOOP_MODE_DISABLED "disabled"
#define BTSNOOP_MODE_FILTERED "filtered"
#define BTSNOOP_MODE_FULL "full"
#define BTSNOOP_PATH_PROPERTY "persist.bluetooth.btsnooppath"
#define DEFAULT_BTSNOOP_PATH "/data/misc/bluetooth/logs/btsnoop_hci.log"
#define BTSNOOP_MAX_PACKETS_PROPERTY "persist.bluetooth.btsnoopsize"
4、可以看到启动btsnoop的时候,先看"ro.debuggable"设置是什么(用getprop),我这边看到车机上是1
5、再看"persist.bluetooth.btsnooplogmode",我这边车机啥也没有,所以default_mode默认应该是"disabled",我这边没有btsnoop,如果要打印btsnoop,需要设置setprop persist.bluetooth.btsnooplogmode full,btsnoop的存放路径就在/data/misc/bluetooth/logs/btsnoop_hci.log