修改广告数据包

10个帖子/ 0个新帖子
最后发表
DrNick1
离线
最后看到:4年4个月前
加入:11 2014-07-01 55
修改广告数据包

我使用Beacon示例项目作为基础,但我想添加更改数据到广告数据包。
例如,来自ADC的一些值,甚至只是一个递增的计数器。
我发现这个例子的结构令人困惑-我猜它在app_dialog beacon_project .c中的app_adv_func中设置了广告包,但它不是立即明显的这实际上是从哪里调用的。我认为它只在设置时被调用一次,然后它就会做广告。

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

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

非常感谢

gl_dialog
离线
最后看到:3年4个月前
工作人员
加入:2014-02-07 35
你好,

你好,

你完全正确。

以下是对你问题的回答:

如何动态改变广告数据?

首先,必须停止BLE收音机,然后可以更新ADV数据。

必须使用内核计时器在一定时间后更新广告字符串。
内核定时器函数示例:app_timer_set(APP_ADV_TIMER, TASK_APP, 300);
函数必须在app_adv_func()中调用。

一旦时间过去,必须将GAPM_CANCEL消息发送到内核。
这将在发布新参数之前取消正在进行的活动。
这可以通过调用BLE计时器处理程序中的app_adv_stop()来实现。

广告可以重新开始
在gapm_cmp_evt_handler()中,对于GAPM_ADV_NON_CONN,必须调用函数app_adv_start()来再次开始发布。

问候,

对话框的团队。

帮我
离线
最后看到:5年3个月前
加入:2015-01-13 09:43
你好,

你好,

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

设置app_timer_set(APP_ADV_TIMER, TASK_APP, 300);在app_adv_func()。一旦时间过去,app_adv_timer_handler(..)函数就是start,
在gapm_cmp_evt_handler()中再次设置app_adv_start(), case case GAPM_ADV_UNDIRECT循环。

问候,
帮我

HARDY.CHEN.
离线
最后看到:1年8个月前
加入:2015-03-13 04:20
嗨,对话框的团队,

嗨,对话框的团队,

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

MT_dialog
离线
最后看到:5天14小时前
工作人员
加入:2015-06-08 34
嗨Hardy.chen,

嗨Hardy.chen,

您的意思是一个回调函数,它将在发送完一个广告包后被调用?不,没有这样的复试。如果你想实现这种功能,检查app_async_trm()函数中的app_sleep.h文件中的信标引用设计,这可能会有帮助。只有完成提供广告操作的回调。

由于MT_dialog

HARDY.CHEN.
离线
最后看到:1年8个月前
加入:2015-03-13 04:20
嗨MT_dialog,

嗨MT_dialog,

有任何文档解释从app_last_rwble_evt_get报告的事件吗?
例如,BLE_EVT_END事件什么时候可用?每个发送的ADV数据包?或BLE连接的终止?还是每个连接PDU的数据包?

MT_dialog
离线
最后看到:5天14小时前
工作人员
加入:2015-06-08 34
嗨Hardy.chen,

嗨Hardy.chen,

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

由于MT_dialog

HARDY.CHEN.
离线
最后看到:1年8个月前
加入:2015-03-13 04:20
嗨,对话框的团队,

嗨,对话框的团队,

因此,是否有可能通过连接事件BLE_EVT_END来更新广告内容(也可以通过检查之前的事件代码)。即BLE_EVT_TX),应该在每次传输完成时产生?

但是我想知道*latency*是否应该被认为是*app_adv_stop* & *app_adv_start*应该总是被调用以改变广告内容。我应该等待任何回调或事件,从内核报告完成每个调用*app_adv_stop* & *app_adv_start*?如果这样改变广告内容,DA14580在每个ADV包*(以ADV_NONCONN为例)中支持改变广告内容的最大速度(或者说最小间隔)是多少?

简而言之,如果我想在20ms的间隔内拥有信标,并在每个广告中旋转3个不同的消息,这将是可能的吗?

MT_dialog
离线
最后看到:5天14小时前
工作人员
加入:2015-06-08 34
嗨Hardy.chen,

嗨Hardy.chen,

我相信你可以做到这一点,检查last_ble_evt的BLE_EVT_END,当它发生时,发布一个广告停止,以改变广告字符串。在停止发布过程完成后,您可以在gapm_cmp_evt_handler中捕获发布结束消息,如果GAPM_ADV_UNDIRECT或GAPM_ADV_NON_CONN更改发布字符串并再次开始发布。我不相信来自命令(app_adv_stop和app_adv_start)的延迟会被考虑在内。您可以在app_asynch_trm()函数的app_sleep.h文件中查看信标实现,以获得一些想法。

由于MT_dialog

HARDY.CHEN.
离线
最后看到:1年8个月前
加入:2015-03-13 04:20
嗨,对话框的团队,

嗨,对话框的团队,

谢谢,是的,我根据这种方式成功完成了此功能。
干杯!

主题锁定