2、连接过程
2.1 初始化
对主机各个参数进行初始化后,注册simpleBLERoleCB回调,simpleBLERoleCB里面的simpleBLECentralEventCB是设备的事件回调,初始化后会进入GAP_DEVICE_INIT_DONE_EVENT状态,主机开始扫描。
case GAP_DEVICE_INIT_DONE_EVENT:
{
osal_set_event(simpleBLETaskId,CENTRAL_INIT_DONE_EVT);
}
//------------------------------------------
if (events & CENTRAL_INIT_DONE_EVT)
{
LOG("BLE as central Init Done \r\n");
simpleBLECentral_DiscoverDevice();
return (events ^ CENTRAL_INIT_DONE_EVT);
}
//------------------------------------------
static void simpleBLECentral_DiscoverDevice(void)
{
simpleBLEScanRes = simpleBLEScanIdx = 0;
osal_memset(simpleBLEDevList,0,sizeof(SimpleClientADV_ScanData)*DEFAULT_MAX_SCAN_RES);
bStatus_t stu = GAPCentralRole_StartDiscovery( DEFAULT_DISCOVERY_MODE,
TRUE/*DEFAULT_DISCOVERY_ACTIVE_SCAN*/, // passive scan
FALSE/*DEFAULT_DISCOVERY_WHITE_LIST*/ );
AT_LOG("simpleBLECentral_DiscoverDevice Return Value :%d\n",stu);
}
2.2 发现设备
设备初始化进入搜索状态后,开始扫描范围内的BLE设备,协议层每发现一个设备会返回一个GAP_DEVICE_INFO_EVENT事件,接着对返回的设备信息进行处理:如果发现的是新设备,则将设备信息添加在发现设备表里面;如果是已经发现过的设备,则将该设备在设备表里的信息进行更新。
case GAP_DEVICE_INFO_EVENT:
{
// only save connectable adv
if (pEvent->deviceInfo.eventType != GAP_ADRPT_ADV_IND
&& pEvent->deviceInfo.eventType != GAP_ADRPT_ADV_DIRECT_IND
&& pEvent->deviceInfo.eventType != GAP_ADRPT_SCAN_RSP)
break;
simpleBLEAddDeviceInfo( pEvent );
}
2.3 发现设备完成
直到发现的设备数量达到设置的最大值,或者扫描的时间达到设置的扫描间隔,完成这一次的扫描
周期。协议层返回GAP_DEVICE_DISCOVERY_EVENT事件。
case GAP_DEVICE_DISCOVERY_EVENT:
{
AT_LOG("GAP_DEVICE_DISCOVERY_EVENT\n");
// discovery complete
// initialize scan index to last device
simpleBLEScanIdx = simpleBLEScanRes;
for(unsigned i = 0; i < simpleBLEScanRes ; i++)
{
AT_LOG("[Dev %02d/%02d] ", i+1,simpleBLEScanRes );
AT_LOG("AdvA [T%02X] :%02X:%02X:%02X:%02X:%02X:%02X ",
simpleBLEDevList[i].AddrType,\
simpleBLEDevList[i].addr[0],\
simpleBLEDevList[i].addr[1],\
si