CH573F 定向广播功能

基于官方的CentPeri例程

目前调试发现配对好且绑定的主从机,当从机上电一段时间后,主机再上电,发现无法搜索到定向广播信息,而主机先上电,从机后上电,能够立即发现并建立连接

想请问下,主从首次连接且绑定后,从机再次上电并设置为定向广播,是不是需要在限定的时间内让主机去扫描并连接?超时后从机不再发送定向广播?

如果是有时间限制的,那么可以从哪里设置超时时间?或者定时启动定向广播?

或者说有没有关于定向广播的官方的例程可以参考?

https://www.cnblogs.com/gscw/p/17289302.html

参考该博客。

定向广播持续1.28s后,会进入timeout 即打印waiting for advertising的地方,在这里重新广播使能就可以了,这样会一直进行定向广播。


https://www.cnblogs.com/gscw/p/17289302.html

参考该博客。

定向广播持续1.28s后,会进入timeout 即打印waiting for advertising的地方,在这里重新广播使能就可以了,这样会一直进行定向广播。


谢谢,之前调试一直没有没有收到waiting for advertising

仅仅是收到以下信息

Initialized..

Advertising..

经追踪是【peripheralStateNotificationCB】回调函数内有“waiting for advertising”但并没有打印

        case GAPROLE_WAITING:
            PRINT("go in Waiting for %d\n",pEvent->gap.opcode);
            if(pEvent->gap.opcode == GAP_END_DISCOVERABLE_DONE_EVENT)
            {
                PRINT("Waiting for advertising..\n");
            }
            else if(pEvent->gap.opcode == GAP_LINK_TERMINATED_EVENT)
            {
                Peripheral_LinkTerminated(pEvent);
                PRINT("Disconnected..Reason:%x\n", pEvent->linkTerminate.reason);
            }
            break;

尝试打印【gap.opcode】,发现在广播结束后,该值为5,如下图

image.png

对应宏定义:

#define GAP_LINK_ESTABLISHED_EVENT              0x05 //!< Sent when the Establish Link Request is complete. This event is sent as an tmos message defined as gapEstLinkReqEvent_t.

英文翻译为【当建立链接请求完成时发送】,但这时候从机仅仅是执行了定向广播,并在超时后关闭广播,并没有连接,这是我的定向广播设置有问题还是demo有错误



从机初始化定向广播设置如下

    // Setup the GAP Peripheral Role Profile
    {
        //常规广播,这部分是demo的
        uint8_t  initial_advertising_enable = TRUE;
        uint16_t desired_min_interval = DEFAULT_DESIRED_MIN_CONN_INTERVAL;
        uint16_t desired_max_interval = DEFAULT_DESIRED_MAX_CONN_INTERVAL;

        PRINT("ADV\n");
        // Set the GAP Role Parameters
        GAPRole_SetParameter(GAPROLE_ADVERT_ENABLED, sizeof(uint8_t), &initial_advertising_enable);     //开启/关闭广播
        GAPRole_SetParameter(GAPROLE_SCAN_RSP_DATA, sizeof(scanRspData), scanRspData);                  //中心设备尝试连接时的回应数据包
        GAPRole_SetParameter(GAPROLE_ADVERT_DATA, sizeof(advertData), advertData);                      //广播时发送的数据包
        GAPRole_SetParameter(GAPROLE_MIN_CONN_INTERVAL, sizeof(uint16_t), &desired_min_interval);       //最小连接间隔
        GAPRole_SetParameter(GAPROLE_MAX_CONN_INTERVAL, sizeof(uint16_t), &desired_max_interval);       //最大连接间隔

        //定向广播,这部分是新增的,【MSGbyte_BLE_Bond】是自行添加的,用于绑定后重新上电的判断
        uint8_t Adv_Event_Type = GAP_ADTYPE_ADV_HDC_DIRECT_IND;
        uint8_t Adv_Direct_Type = ADDRTYPE_PUBLIC;
        
        if(messageGetByte(MSGbyte_BLE_Bond) == MSG_BLE_BONDED){
            PRINT("DIR\n");
            GAPRole_SetParameter( GAPROLE_ADV_DIRECT_ADDR, B_ADDR_LEN, bondInfo.publicAddr);                //定向广播的地址
            GAPRole_SetParameter( GAPROLE_ADV_DIRECT_TYPE, sizeof(uint8_t), &Adv_Direct_Type);              //定向广播的地址类型
            GAPRole_SetParameter( GAPROLE_ADV_EVENT_TYPE, sizeof(uint8_t), &Adv_Event_Type);                //事件类型
        }
    }



只有登录才能回复,可以选择微信账号登录