我使用Beacon示例项目作为基础,但是我想向广告数据包添加更改数据。
例如,来自ADC的一些值,甚至只是一个递增计数器。
我发现这个示例的结构很混乱-我猜它在app\u adv\func的app\u dialog beacon\u proj.c中设置了广告包,但它并没有立即显示出它的实际调用位置。我想它只在设置时打过一次电话,然后就做广告了。
所以我的问题是,当我有新的数据时,如何再次调用这个函数。我是否必须先停止广告,然后再重新包装,还是我可以重新包装?
我应该在程序中的什么地方这样做,最好的方法是什么?
非常感谢

你好,
你完全正确。
以下是您问题的答案:
如何动态改变广告数据?
首先,必须停止BLE收音机,然后才能更新ADV数据。
内核计时器必须用于在特定时间后更新广告字符串。
内核计时器函数示例:app\u timer\u set(app\u ADV\u timer,TASK\u app,300);
必须在app\u adv\u func()中调用的函数。
一旦时间过去,必须向内核发送GAPM\u CANCEL消息。
这将在公布新参数之前取消正在进行的活动。
这是通过调用BLE timer处理程序中的app\u adv\u stop()来完成的。
广告可以重新开始
在gapm\u cmp\u evt\u处理程序()中,case gapm\u ADV\u NON\u CONN,必须调用函数app\u ADV\u start()才能再次开始播发。
当做,
对话小组。
你好,
我还尝试修改每个广告消息的广告数据包(序列号),
从上面的解释我不明白该怎么办?
设置app\u timer\u set(app\u ADV\u timer,TASK\u app,300);在app\u ADV\u func()处。时间一过,app\u adv\u timer\u handler(..)函数就启动了,
在gapm\u cmp\u evt\u handler()处再次设置app\u adv\u start(),case-case-gapm\u adv\u-indirect循环。
当做,
茨维卡
嗨,对话小组,
所以,在BLE堆栈要发送新的数据包之前,没有*回调*类型的函数可用于更改ADV数据包,对吗?
你好哈代·陈,
你的意思是在完成一个广告包的发送后将被调用的回调函数?不,没有这样的回电。如果要实现这种功能,请检查app\u async\u trm()函数中app\u sleep.h文件中的信标引用设计,也许这会有所帮助。只有完成广告操作的回调可用。
谢谢你的对话
嗨,MT\u dialog,
是否有任何文件解释从app\u last\u rwble\u evt\u get报告的事件?
i、 e.活动何时开始?*发送的每个*ADV数据包?或是连接的终止?或者每一包连接PDU?
你好哈代·陈,
也请参考你的其他帖子,http://support.dialog-semiconductor.com/please-explain-last-ble-event-enum. 当传输结束时,BLE\u EVT\u端将可用,这意味着在每个BLE事件结束时,您将为每个完成的广告事件和每个完成的连接间隔获得一个BLE\u EVT\u端。
谢谢你的对话
嗨,对话小组,
因此,是否有可能通过钩住事件BLE\u EVT\u END来更新广告内容(也可以通过检查以前的事件代码)。i、 e.每次传输完成时应该生成的BLEïEVTïTX)?
但是我想知道是否应该将*latency*视为总是调用*app\u adv\u stop*&*app\u adv\u start*来更改广告内容。我是否应该等待内核报告的任何回调或事件,以完成对*app\u adv\u stop*和*app\u adv\u start*的每次调用?如果这样改变广告内容,DA14580支持的改变*每个ADV包*广告内容的最大速度(或者说最小间隔)是多少(以ADV\u noncon为例)。
简言之,如果我想有一个20毫秒的间隔信标,并在每个广告中旋转3个不同的消息,这是可能的吗?
你好哈代·陈,
我相信你可以做到这一点,检查最后的ble\u evt为ble\u evt\u结束,并在这种情况下发出一个广告停止,以改变广告字符串。停止播发过程完成后,您可以在gapm\u cmp\u evt\u处理程序、case gapm\u ADV\u indirect或gapm\u ADV\u NON\u CONN中捕获播发结束消息更改播发字符串并再次开始播发。我不相信从命令(app\u adv\u stop和app\u adv\u start)的延迟会有那么大才能被考虑在内。您可以在app\u asynch\u trm()函数的app\u sleep.h文件中查看信标实现,以获得一些想法。
谢谢你的对话
嗨,对话小组,
谢谢,是的,我已经按照这种方式成功地完成了这个功能。
干杯!