ST17H66低功耗蓝牙SOC开发(7)—— simpleBleCentral工程讲解(下)

本文详细介绍了使用ST17H66低功耗蓝牙SOC进行中央设备(主机)的开发流程,包括初始化、设备发现、连接建立、从机服务获取和数据收发等关键步骤。在连接过程中,主机扫描并连接目标设备,获取从机服务列表,并启用监听功能。主从数据交互涉及从机的上报数据接收和主机的下发数据操作。
摘要由CSDN通过智能技术生成

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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WHMTBYY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值