关于CC254x 观察者模式下scan列表的问题
时间:10-02
整理:3721RD
点击:
cc254x中的观察者例程里面,simpleBLEObserverEventCB函数下有两个事件,分别是GAP_DEVICE_INFO_EVENT和GAP_DEVICE_DISCOVERY_EVENT。从名字来看,前者应该是scan到设备时候触发的事件,后者是scan结束时触发的事件。代码分别如下:
case GAP_DEVICE_INFO_EVENT:
{
simpleBLEAddDeviceInfo( pEvent->deviceInfo.addr, pEvent->deviceInfo.addrType );
}
break;
case GAP_DEVICE_DISCOVERY_EVENT:
{
// discovery complete
simpleBLEScanning = FALSE;
// Copy results
simpleBLEScanRes = pEvent->discCmpl.numDevs;
osal_memcpy( simpleBLEDevList, pEvent->discCmpl.pDevList,
(sizeof( gapDevRec_t ) * pEvent->discCmpl.numDevs) );
LCD_WRITE_STRING_VALUE( "Devices Found", simpleBLEScanRes,
10, HAL_LCD_LINE_1 );
if ( simpleBLEScanRes > 0 )
{
LCD_WRITE_STRING( "<- To Select", HAL_LCD_LINE_2 );
}
// initialize scan index to last device
simpleBLEScanIdx = simpleBLEScanRes;
}
break;
其中,在
GAP_DEVICE_INFO_EVENT事件中的simpleBLEAddDeviceInfo函数,已经把scan过程中得到的设备信息存入simpleBLEDevList中。为什么在GAP_DEVICE_DISCOVERY_EVENT事件中还要执行
osal_memcpy( simpleBLEDevList, pEvent->discCmpl.pDevList, (sizeof( gapDevRec_t ) * pEvent->discCmpl.numDevs) );
重新写入simpleBLEDevList列表中去呢,是不是多此一举呢?另外discCmpl.pDevList的数据从哪里来的,没有找到相关的内容,莫非在lib中? 如果我要在scan过程中过滤掉某些rssi值设备,是在GAP_DEVICE_INFO_EVENT中过滤吗?但是,在GAP_DEVICE_DISCOVERY_EVENT事件中simpleBLEDevList又被重写了吧?
前辈你好,对于这个问题我也有同样的疑问,不知道你解决了没有啊?
