修改广告数据包

10个职位/0个新职位
最后一篇文章
尼克1号医生
离线
最后一次见到:4年4个月前
已加入:2014-07-01 11:55
修改广告数据包

我使用Beacon示例项目作为基础,但是我想向广告数据包添加更改数据。
例如,来自ADC的一些值,甚至只是一个递增计数器。
我发现这个示例的结构很混乱-我猜它在app\u adv\func的app\u dialog beacon\u proj.c中设置了广告包,但它并没有立即显示出它的实际调用位置。我想它只在设置时打过一次电话,然后就做广告了。

所以我的问题是,当我有新的数据时,如何再次调用这个函数。我是否必须先停止广告,然后再重新包装,还是我可以重新包装?

我应该在程序中的什么地方这样做,最好的方法是什么?

非常感谢

GLU对话框
离线
最后一次见到:3年4个月前
工作人员
已加入:2014-02-07 13:35
你好,

你好,

你完全正确。

以下是您问题的答案:

如何动态改变广告数据?

首先,必须停止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()才能再次开始播发。

当做,

对话小组。

茨维卡
离线
最后一次见到:5年3个月前
已加入:2015-01-13 09:43
你好,

你好,

我还尝试修改每个广告消息的广告数据包(序列号),
从上面的解释我不明白该怎么办?

设置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循环。

当做,
茨维卡

哈代·陈
离线
最后一次见到:1年8个月前
已加入:2015-03-13 04:20
嗨,对话小组,

嗨,对话小组,

所以,在BLE堆栈要发送新的数据包之前,没有*回调*类型的函数可用于更改ADV数据包,对吗?

MT\u对话框
离线
最后一次见到:1周1小时前
工作人员
已加入:2015-06-08 11:34
你好哈代·陈,

你好哈代·陈,

你的意思是在完成一个广告包的发送后将被调用的回调函数?不,没有这样的回电。如果要实现这种功能,请检查app\u async\u trm()函数中app\u sleep.h文件中的信标引用设计,也许这会有所帮助。只有完成广告操作的回调可用。

谢谢你的对话

哈代·陈
离线
最后一次见到:1年8个月前
已加入:2015-03-13 04:20
嗨,MT\u dialog,

嗨,MT\u dialog,

是否有任何文件解释从app\u last\u rwble\u evt\u get报告的事件?
i、 e.活动何时开始?*发送的每个*ADV数据包?或是连接的终止?或者每一包连接PDU?

MT\u对话框
离线
最后一次见到:1周1小时前
工作人员
已加入:2015-06-08 11:34
你好哈代·陈,

你好哈代·陈,

也请参考你的其他帖子,http://support.dialog-semiconductor.com/please-explain-last-ble-event-enum. 当传输结束时,BLE\u EVT\u端将可用,这意味着在每个BLE事件结束时,您将为每个完成的广告事件和每个完成的连接间隔获得一个BLE\u EVT\u端。

谢谢你的对话

哈代·陈
离线
最后一次见到:1年8个月前
已加入:2015-03-13 04:20
嗨,对话小组,

嗨,对话小组,

因此,是否有可能通过钩住事件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个不同的消息,这是可能的吗?

MT\u对话框
离线
最后一次见到:1周1小时前
工作人员
已加入:2015-06-08 11:34
你好哈代·陈,

你好哈代·陈,

我相信你可以做到这一点,检查最后的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文件中查看信标实现,以获得一些想法。

谢谢你的对话

哈代·陈
离线
最后一次见到:1年8个月前
已加入:2015-03-13 04:20
嗨,对话小组,

嗨,对话小组,

谢谢,是的,我已经按照这种方式成功地完成了这个功能。
干杯!

主题已锁定