相比于Android L使用的蓝牙协议栈blueangel,Android M使用的是bluedroid蓝牙协议栈。bluedroid搜索蓝牙设备的默认时间是12.8s,而blueangel默认的搜索时间是60s。这就造成有些时候,bluedroid搜索的蓝牙设备过少或者搜索不到某些设备的情况。
针对bluedroid的默认搜索参数可以修改如下几种方法:
方法一、增大搜索的总时间长度
在system/bt/btif/src/Btif_dm.c下:
#define BTIF_DM_DEFAULT_INQ_MAX_DURATION
10 //默认
根据蓝牙规格,inquriy Time = N*1.28 sec,
N Range:1 ~ 48 , time range: 1.28s~61.44s
方法二、修改单次搜索的window 和interval
在 system/bt/stack/btm/Btm_devctl.c 文件下的reset_complete()会对搜索的这两个参数赋值;
这两个参数的定义在:system/bt/stack/include/Hcidefs.h下:
#define HCI_DEF_INQUIRYSCAN_INTERVAL 0X1000 /*2.56 sec*/
#define HCI_DEF_INQUIRYSCAN_WINDOW 0X12 /*11.25 ms*/
其中,HCI_DEF_INQUIRYSCAN_INTERVAL 是两个搜索的间隔,也即BR/EDR controller started上一次的inquiry scan到准备进行下一次inquiry scan的间隔; 范围:0x0012-0x1000,N*0.625ms
HCI_DEF_INQUIRYSCAN_WINDOW 一次搜索的时间,范围:0x0011-0x1000; N*0.625ms
inquiryscan_interval值要比inquiryscan_window值大2倍才可以;
建议:把inquiryscan interval设置为1.28s;inquiryscan_window设置为22.5ms;这样慢慢微调一下,找到贵司希望的值