基于官方的CentPeri例程
目前调试发现配对好且绑定的主从机,当从机上电一段时间后,主机再上电,发现无法搜索到定向广播信息,而主机先上电,从机后上电,能够立即发现并建立连接
想请问下,主从首次连接且绑定后,从机再次上电并设置为定向广播,是不是需要在限定的时间内让主机去扫描并连接?超时后从机不再发送定向广播?
如果是有时间限制的,那么可以从哪里设置超时时间?或者定时启动定向广播?
或者说有没有关于定向广播的官方的例程可以参考?
基于官方的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,如下图
对应宏定义:
#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); //事件类型 } }