关于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又被重写了吧?
前辈你好,对于这个问题我也有同样的疑问,不知道你解决了没有啊?