如何提高observer或者其他蓝牙主机的形式对广播包的捕获的成功率?
各位TI的工程师以及路过的大神们:
现在我使用TI BLE 蓝牙协议栈(1.4.1)和CC2541 作为observer ,能捕捉广播信号,但是经常丢失(即便是1秒钟广播一次的广播包都会丢失)
1.这是什么原因呢?
2.observer是否能胜任扫描100个广播频率为1HZ广播包的任务(同时广播而捕捉失败不考虑)?
3.若是不能,我该采用什么方式去完成这样的设计,或者说observer最快捕捉广播包的频率是多少?
4.若是observer可以胜任这样的设计,我的参数该怎么配置?何时再发起扫描请求?
下面是我的部分修改的代码(现象是能捕捉1HZ的广播包,但是经常丢包,有时候挺连续的,有时候三四秒都没反应):
// Maximum number of scan responses
#define DEFAULT_MAX_SCAN_RES 1 //调整参数影响不大?
// Scan duration in ms
#define DEFAULT_SCAN_DURATION 10//4000 100左右会合适一点,小了也是断断续续
// Discovey mode (limited, general, all)
#define DEFAULT_DISCOVERY_MODE DEVDISC_MODE_ALL
// TRUE to use active scan
#define DEFAULT_DISCOVERY_ACTIVE_SCAN FALSE
// TRUE to use white list during discovery
#define DEFAULT_DISCOVERY_WHITE_LIST FALSE
case GAP_DEVICE_INIT_DONE_EVENT:
{
//pEvent->deviceInfo.pEvtData =&broadcasterData;
{
gapDeviceInitDoneEvent_t *pEvt = (gapDeviceInitDoneEvent_t *)pEvent;
osal_memcpy( dongleAddr, pEvt->devAddr, B_ADDR_LEN );//复制蓝牙地址
}
LCD_WRITE_STRING( "BLE Observer", HAL_LCD_LINE_1 );
LCD_WRITE_STRING( bdAddr2Str( pEvent->initDone.devAddr ), HAL_LCD_LINE_2 );
GAPObserverRole_StartDiscovery( DEFAULT_DISCOVERY_MODE,
DEFAULT_DISCOVERY_ACTIVE_SCAN,
DEFAULT_DISCOVERY_WHITE_LIST );
}
break;
case GAP_DEVICE_INFO_EVENT:
{
HalUARTWrite(0,pEvent->deviceInfo.addr,6);
HalUARTWrite(0,pEvent->deviceInfo.pEvtData,28);
HalUARTWrite(0,&pEvent->deviceInfo.rssi,1);
}
break;
case GAP_DEVICE_DISCOVERY_EVENT:
{
// discovery complete
GAPObserverRole_StartDiscovery( DEFAULT_DISCOVERY_MODE,
DEFAULT_DISCOVERY_ACTIVE_SCAN,
DEFAULT_DISCOVERY_WHITE_LIST );
}
break;
DEFAULT_MAX_SCAN_RES 可以尽量设的大(需要注意这个过大会导致内存溢出,所以找一个合适的值,比如从10开始),然后搜索的时间可以设为短而多次,在一次搜索结束之后,再开始第二次搜索。
还是会丢数据,看来是无法避免了
想要尽可能扫描到,
1、信号要好;
2、广播频率尽量高;
3、扫描时间可以改为500ms扫描一次,这样1秒就可以扫描二次,有一次成功就算成功了
如果环境中ble设备多,还要改大扫描的最大个数,以保证能扫描到空间中的所有BLE设备
应该说,以保证能把扫描到空间中的所有BLE设备保存在扫描结果中;
如何知道一个扫描结束了呢?如果周围没有蓝牙,也会进入这个结束函数里面吗?