ble精准指定广播次数和时间的问题
一:问题出现的原因:
客人的问题是想在例如广播间隔是300ms ,我想在他发送广播前 我能更新广播包 ,或者我update后 能立刻发送出去的问题;
二:问题的具体分析和解决方法:
想精准的控制更新广播包,那就只能让每次广播只发送一次,然后就停止,让客人更新广播数据,再次启动广播的方式,经查询sdk中有max_adv_evts 这个接口可以控制发送广播的次数;
在禁用广告之前应发送的最大广告事件。将该值设置为0将禁用该限制。当该参数指定的广告事件数(如果不为0)达到时,广告将自动停止,并引发类型为@ref BLE_GAP_EVT_ADV_SET_TERMINATED的事件;
我们将adv_param.max_adv_evts = 1;然后在启动广播,广播在执行一次后,立刻停止,并通过BLE_GAP_EVT_ADV_SET_TERMINATED 回调中,重新配置广播参数,在次重新sd_ble_gap_adv_start 后可以输出启动广播,这样子就可以保证准确的每次更新的广播数据都可以保证发出一次;(开始广告后不应有较长的延迟,超过几毫秒 + 10ms 随机因素)
如果想保证300ms发一包,那就在BLE_GAP_EVT_ADV_SET_TERMINATED事件收到后,做一个定时器,等待300ms后,立刻将包发出;这样即可达到客人的目标;
三 测试结果:
客人反馈此方法可以达到定时时间内发送一次广播数据;
四:关于此问题的相关资料如果有需要可以联系我们,加下面nordic ble qq交流群:921114908